diff --git a/API.md b/API.md index 02344e6..d518d95 100644 --- a/API.md +++ b/API.md @@ -335,9 +335,8 @@ interface NLDSettings { dutch: boolean; spanish: boolean; italian: boolean; - modalToggleTime: boolean; modalToggleLink: boolean; - modalMomentFormat: string; + modalMomentFormat: string; // Moment.js format for the Date Picker, date-only (default: "YYYY-MM-DD") // Smart suggestions enableSmartSuggestions: boolean; enableHistorySuggestions: boolean; diff --git a/CHANGELOG.md b/CHANGELOG.md index b522840..146ffdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - The autosuggest dropdown now shows a preview of the resolved date/time next to each suggestion (e.g. `Next Monday` — `2025-01-06`), so you can see what will actually be inserted before picking one. - **Korean support** (partial): `오늘`/`내일`/`어제`, weekdays, `이번`/`다음`/`지난` prefixes, and suffix-style relative expressions (`3일 후`, `2주 전`). Vocabulary based on [CreamNuts' nldates-obsidian-korean](https://github.com/CreamNuts/nldates-obsidian-korean) (MIT), with thanks. Like the other partially-supported languages, chrono-node has no Korean parser to fall back on, so some combined phrasings (weekday + specific time, date ranges) aren't recognized yet — tracked in [#40](https://github.com/Amato21/nldates-revived/issues/40). +### Fixed +- Date Picker: picking a date via the calendar grid or a quick-select button (Today/Tomorrow/Next week/...) always inserted `12:00` as the time, regardless of what was actually selected. The modal was reformatting the selection down to a bare date string and re-parsing it through the NLP engine to build the preview/output, which discarded the actual time and let chrono-node's "no time specified" default (noon) leak through. Quick-select buttons had a related issue: they carried the real current wall-clock time instead of a clean date. + +### Changed +- Date Picker no longer deals with time at all — it's a date picker. Previously, picking a date always carried *some* time value (the real current wall-clock time), with no way to control or clear it. Rather than adding a settings menu to make that time optional, the modal now always produces a plain date, even if the manual input field is used to type a phrase that includes a time (e.g. "today at 3pm"). The default format changed from `YYYY-MM-DD HH:mm` to `YYYY-MM-DD` accordingly. For dates that do need a specific time, use the "Insert the current date and time" command or type a full expression into the autosuggest instead. + ## [0.9.71] - 2026-07-17 ### Added diff --git a/main.js b/main.js index 92fc087..f30811b 100644 --- a/main.js +++ b/main.js @@ -2203,9 +2203,8 @@ const DEFAULT_SETTINGS = { ukrainian: false, chinese: false, korean: false, - modalToggleTime: false, modalToggleLink: false, - modalMomentFormat: "YYYY-MM-DD HH:mm", + modalMomentFormat: "YYYY-MM-DD", // Smart suggestions enableSmartSuggestions: true, enableHistorySuggestions: true, @@ -2461,7 +2460,13 @@ class DatePickerModal extends require$$0.Modal { this.keyboardHandler = null; this.updateSelectedDateFn = null; this.plugin = plugin; - this.selectedDate = moment(); + // Normalized to midnight: this is a date picker, not a time picker, and + // nothing in the UI lets the user set a time-of-day. Carrying the real + // current wall-clock time here (moment()) meant that opening the modal + // and immediately inserting produced whatever the clock happened to + // read, not a clean date -- and getDateStr() below formats *some* + // moment with a format string that includes "HH:mm" by default. + this.selectedDate = moment().startOf("day"); this.currentMonth = moment(); // Détecter le mode sombre this.isDarkMode = activeDocument.body.classList.contains("theme-dark"); @@ -2477,21 +2482,50 @@ class DatePickerModal extends require$$0.Modal { let momentFormat = this.plugin.settings.modalMomentFormat; let insertAsLink = this.plugin.settings.modalToggleLink; let dateInput = ""; + // Strips the trailing "|" that marks "keep as alias" (see shouldIncludeAlias + // below) -- shared so the input's onChange handler and getDateStr() agree + // on exactly what text gets parsed/cached. + const stripAliasSuffix = (text) => text.endsWith("|") ? text.slice(0, -1) : text; + let cachedManualParse = null; + // Parses manually-typed text via the NLP parser, caching the result. + // Called from both the input's onChange handler (to validate/update the + // calendar selection) and getDateStr() (to build the preview/output) -- + // without the cache, typing a single character invoked + // plugin.parseDate() 2-3 times (onChange's own validation call, then + // updateSelectedDate -> updatePreview -> getDateStr, plus onChange's + // trailing updatePreview() call), which matters since NLP parsing isn't + // free. + const parseManualInput = (cleanText) => { + if (cachedManualParse && cachedManualParse.input === cleanText) { + return cachedManualParse.moment; + } + const parsedMoment = this.plugin.parseDate(cleanText).moment; + cachedManualParse = { input: cleanText, moment: parsedMoment }; + return parsedMoment; + }; const getDateStr = () => { - let cleanDateInput = dateInput; - let shouldIncludeAlias = false; - if (dateInput.endsWith("|")) { - shouldIncludeAlias = true; - cleanDateInput = dateInput.slice(0, -1); - } - // Utiliser la date sélectionnée dans le calendrier si disponible - const dateToParse = cleanDateInput || this.selectedDate.format("YYYY-MM-DD"); - const parsedDate = this.plugin.parseDate(dateToParse); + const shouldIncludeAlias = dateInput.endsWith("|"); + const cleanDateInput = stripAliasSuffix(dateInput); // Valider le format avant utilisation const formatValidation = validateMomentFormat(momentFormat); const formatToUse = formatValidation.valid ? momentFormat : DEFAULT_SETTINGS.modalMomentFormat; - let parsedDateString = parsedDate.moment.isValid() - ? parsedDate.moment.format(formatToUse) + // Only round-trip through the NLP parser when the user actually typed + // something in the manual field (e.g. "next friday") -- this.selectedDate + // (calendar clicks, quick-select buttons) is already a resolved moment + // with nothing left to parse. + const parsedMoment = cleanDateInput + ? parseManualInput(cleanDateInput) + : this.selectedDate; + // This is a date picker, not a time picker -- there's no time-of-day + // control anywhere in this modal's UI, so any time the NLP parser + // might have inferred from typed text (e.g. "today at 3pm") is + // deliberately discarded here, not just left at whatever default + // chrono-node happened to produce. Cloned first: parsedMoment may be + // the cached result from parseManualInput(), and moment's mutating + // .startOf() would otherwise corrupt that cache entry. + const momentToFormat = parsedMoment.isValid() ? parsedMoment.clone().startOf("day") : parsedMoment; + let parsedDateString = momentToFormat.isValid() + ? momentToFormat.format(formatToUse) : ""; if (insertAsLink) { parsedDateString = generateMarkdownLink(this.app, parsedDateString, shouldIncludeAlias ? cleanDateInput : undefined); @@ -2595,9 +2629,14 @@ class DatePickerModal extends require$$0.Modal { textEl.onChange((value) => { dateInput = value; if (value) { - const parsed = this.plugin.parseDate(value); - if (parsed.moment.isValid()) { - updateSelectedDate(parsed.moment, false); + const parsedMoment = parseManualInput(stripAliasSuffix(value)); + if (parsedMoment.isValid()) { + // updateSelectedDate() already calls updatePreview() itself; + // an unconditional call below on top of this would just + // re-run getDateStr() (and, before parseManualInput()'s + // caching, re-invoke the NLP parser) for no reason. + updateSelectedDate(parsedMoment, false); + return; } } updatePreview(); @@ -2611,12 +2650,12 @@ class DatePickerModal extends require$$0.Modal { .setName("Date format") .setDesc("Moment format to be used") .addMomentFormat((momentEl) => { - momentEl.setPlaceholder("YYYY-MM-DD HH:mm"); + momentEl.setPlaceholder("YYYY-MM-DD"); momentEl.setValue(momentFormat); momentEl.onChange((value) => { - const validated = validateMomentFormat(value.trim() || "YYYY-MM-DD HH:mm"); + const validated = validateMomentFormat(value.trim() || "YYYY-MM-DD"); if (validated.valid) { - momentFormat = value.trim() || "YYYY-MM-DD HH:mm"; + momentFormat = value.trim() || "YYYY-MM-DD"; this.plugin.settings.modalMomentFormat = momentFormat; void this.plugin.saveSettings(); updatePreview(); @@ -2680,30 +2719,35 @@ class DatePickerModal extends require$$0.Modal { // Prendre la première variante si plusieurs (séparées par |) return translation.split("|")[0].trim(); }; + // .startOf("day") on every option: without it these carried the real + // current wall-clock time (e.g. clicking "Tomorrow" at 14:32 selected + // tomorrow at 14:32, not a clean date), inconsistent with calendar-grid + // clicks (already midnight-based) and liable to the same "unexpected + // time baked into the output" confusion as the getDateStr() bug above. const quickOptions = [ { label: getFirstVariant("today"), - moment: moment() + moment: moment().startOf("day") }, { label: getFirstVariant("tomorrow"), - moment: moment().add(1, "day") + moment: moment().add(1, "day").startOf("day") }, { label: getFirstVariant("yesterday"), - moment: moment().subtract(1, "day") + moment: moment().subtract(1, "day").startOf("day") }, { label: `${getFirstVariant("next")} ${getFirstVariant("week")}`, - moment: moment().add(1, "week") + moment: moment().add(1, "week").startOf("day") }, { label: `${getFirstVariant("next")} ${getFirstVariant("month")}`, - moment: moment().add(1, "month") + moment: moment().add(1, "month").startOf("day") }, { label: `${getFirstVariant("next")} ${getFirstVariant("year")}`, - moment: moment().add(1, "year") + moment: moment().add(1, "year").startOf("day") }, ]; const buttonsContainer = this.quickButtonsEl.createDiv("nld-quick-buttons-grid"); @@ -2825,7 +2869,7 @@ class DatePickerModal extends require$$0.Modal { break; case "Home": e.preventDefault(); - updateSelectedDate(moment()); + updateSelectedDate(moment().startOf("day")); this.currentMonth = moment(); this.renderCalendar(); break; @@ -17583,4 +17627,4 @@ class NaturalLanguageDates extends require$$0.Plugin { } module.exports = NaturalLanguageDates; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcva28udHMiLCJzcmMvbGFuZy9oZWxwZXIudHMiLCJzcmMvdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbW9kYWxzL2RhdGUtcGlja2VyLnRzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3RpbWV6b25lLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3Jlc3VsdHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vdXRpbHMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi95ZWFycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24vd2Vla2RheXMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbmZpZ3VyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jaHJvbm8uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9yZWZpbmVycy9OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9yZWZpbmVycy9FU01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSUNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3JlZmluZXJzL1ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9pbmRleC5qcyIsInNyYy9sb2dnZXIudHMiLCJzcmMvY2hyb25vLnRzIiwic3JjL3RpbWUtZGV0ZWN0b3IudHMiLCJzcmMvbHJ1LWNhY2hlLnRzIiwic3JjL3BhcnNlci50cyIsInNyYy9zdWdnZXN0L2RhdGUtc3VnZ2VzdC50cyIsInNyYy9jb21tYW5kcy50cyIsInNyYy9oaXN0b3J5LW1hbmFnZXIudHMiLCJzcmMvY29udGV4dC1hbmFseXplci50cyIsInNyYy9lcnJvcnMudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBvYnNpZGlhbiA9IHJlcXVpcmUoJ29ic2lkaWFuJyk7XG5cbmNvbnN0IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU0tRERcIjtcbmNvbnN0IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gXCJnZ2dnLVtXXXd3XCI7XG5jb25zdCBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU1cIjtcbmNvbnN0IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gXCJZWVlZLVtRXVFcIjtcbmNvbnN0IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gXCJZWVlZXCI7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhwZXJpb2RpY2l0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IHdpbmRvdy5hcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5bcGVyaW9kaWNpdHldPy5lbmFibGVkO1xufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYGRhaWx5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXREYWlseU5vdGVTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGludGVybmFsUGx1Z2lucywgcGx1Z2lucyB9ID0gd2luZG93LmFwcDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcImRhaWx5XCIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZm9sZGVyLCB0ZW1wbGF0ZSB9ID0gcGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LmRhaWx5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZvbGRlciwgZm9ybWF0LCB0ZW1wbGF0ZSB9ID0gaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoXCJkYWlseS1ub3Rlc1wiKT8uaW5zdGFuY2U/Lm9wdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBmb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gZGFpbHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgd2Vla2x5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIik/Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBlcmlvZGljTm90ZXNTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy53ZWVrbHk7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ3ZWVrbHlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwZXJpb2RpY05vdGVzU2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gY2FsZW5kYXJTZXR0aW5ncyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3Mud2Vla2x5Tm90ZVRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gd2Vla2x5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJtb250aGx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ubW9udGhseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gbW9udGhseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJxdWFydGVybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5xdWFydGVybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gcXVhcnRlcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRZZWFybHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VyID0gd2luZG93LmFwcC5wbHVnaW5zO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcInllYXJseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LnllYXJseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIk5vIGN1c3RvbSB5ZWFybHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG5cbi8vIENyZWRpdDogQGNyZWF0aW9uaXgvcGF0aC5qc1xuZnVuY3Rpb24gam9pbiguLi5wYXJ0U2VnbWVudHMpIHtcbiAgICAvLyBTcGxpdCB0aGUgaW5wdXRzIGludG8gYSBsaXN0IG9mIHBhdGggY29tbWFuZHMuXG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0U2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHBhcnRTZWdtZW50c1tpXS5zcGxpdChcIi9cIikpO1xuICAgIH1cbiAgICAvLyBJbnRlcnByZXQgdGhlIHBhdGggY29tbWFuZHMgdG8gZ2V0IHRoZSBuZXcgcmVzb2x2ZWQgcGF0aC5cbiAgICBjb25zdCBuZXdQYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLy8gQWxzbyByZW1vdmUgXCIuXCIgc2VnbWVudHNcbiAgICAgICAgaWYgKCFwYXJ0IHx8IHBhcnQgPT09IFwiLlwiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIFB1c2ggbmV3IHBhdGggc2VnbWVudHMuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld1BhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIHRoZSBpbml0aWFsIHNsYXNoIGlmIHRoZXJlIHdhcyBvbmUuXG4gICAgaWYgKHBhcnRzWzBdID09PSBcIlwiKVxuICAgICAgICBuZXdQYXJ0cy51bnNoaWZ0KFwiXCIpO1xuICAgIC8vIFR1cm4gYmFjayBpbnRvIGEgc2luZ2xlIHN0cmluZyBwYXRoLlxuICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiL1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2VuYW1lKGZ1bGxQYXRoKSB7XG4gICAgbGV0IGJhc2UgPSBmdWxsUGF0aC5zdWJzdHJpbmcoZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKGJhc2UubGFzdEluZGV4T2YoXCIuXCIpICE9IC0xKVxuICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgIHJldHVybiBiYXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGgpIHtcbiAgICBjb25zdCBkaXJzID0gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gICAgZGlycy5wb3AoKTsgLy8gcmVtb3ZlIGJhc2VuYW1lXG4gICAgaWYgKGRpcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGpvaW4oLi4uZGlycyk7XG4gICAgICAgIGlmICghd2luZG93LmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZGlyKSkge1xuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZGlyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGdldE5vdGVQYXRoKGRpcmVjdG9yeSwgZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgIGZpbGVuYW1lICs9IFwiLm1kXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpO1xuICAgIGF3YWl0IGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKTtcbiAgICByZXR1cm4gcGF0aDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHsgbWV0YWRhdGFDYWNoZSwgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aCh0ZW1wbGF0ZSk7XG4gICAgaWYgKHRlbXBsYXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXCJcIiwgbnVsbF0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBtZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHRlbXBsYXRlUGF0aCwgXCJcIik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdmF1bHQuY2FjaGVkUmVhZCh0ZW1wbGF0ZUZpbGUpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBJRm9sZEluZm8gPSB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLmxvYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgcmV0dXJuIFtjb250ZW50cywgSUZvbGRJbmZvXTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZVBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFtcIlwiLCBudWxsXTtcbiAgICB9XG59XG5cbi8qKlxuICogZGF0ZVVJRCBpcyBhIHdheSBvZiB3ZWVrbHkgaWRlbnRpZnlpbmcgZGFpbHkvd2Vla2x5L21vbnRobHkgbm90ZXMuXG4gKiBUaGV5IGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFudWxhcml0eSB0byBhdm9pZCBhbWJpZ3VpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGVVSUQoZGF0ZSwgZ3JhbnVsYXJpdHkgPSBcImRheVwiKSB7XG4gICAgY29uc3QgdHMgPSBkYXRlLmNsb25lKCkuc3RhcnRPZihncmFudWxhcml0eSkuZm9ybWF0KCk7XG4gICAgcmV0dXJuIGAke2dyYW51bGFyaXR5fS0ke3RzfWA7XG59XG5mdW5jdGlvbiByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcW1teXFxdXSpcXF0vZywgXCJcIik7IC8vIHJlbW92ZSBldmVyeXRoaW5nIHdpdGhpbiBicmFja2V0c1xufVxuLyoqXG4gKiBYWFg6IFdoZW4gcGFyc2luZyBkYXRlcyB0aGF0IGNvbnRhaW4gYm90aCB3ZWVrIG51bWJlcnMgYW5kIG1vbnRocyxcbiAqIE1vbWVudCBjaG9zZXMgdG8gaWdub3JlIHRoZSB3ZWVrIG51bWJlcnMuIEZvciB0aGUgd2VlayBkYXRlVUlELCB3ZVxuICogd2FudCB0aGUgb3Bwb3NpdGUgYmVoYXZpb3IuIFN0cmlwIHRoZSBNTU0gZnJvbSB0aGUgZm9ybWF0IHRvIHBhdGNoLlxuICovXG5mdW5jdGlvbiBpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSB7XG4gICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpICYmXG4gICAgICAgICAgICAoL017MSw0fS8udGVzdChjbGVhbkZvcm1hdCkgfHwgL0R7MSw0fS8udGVzdChjbGVhbkZvcm1hdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21GaWxlKGZpbGUsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZS5iYXNlbmFtZSwgZ3JhbnVsYXJpdHkpO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21QYXRoKHBhdGgsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoYmFzZW5hbWUocGF0aCksIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUsIGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH07XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0U2V0dGluZ3NbZ3JhbnVsYXJpdHldKCkuZm9ybWF0LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBjb25zdCBub3RlRGF0ZSA9IHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgaWYgKCFub3RlRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIFxuICAgICAgICAgICAgICAgIC8vIElmIGZvcm1hdCBjb250YWlucyB3ZWVrLCByZW1vdmUgZGF5ICYgbW9udGggZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC9NezEsNH0vZywgXCJcIikucmVwbGFjZSgvRHsxLDR9L2csIFwiXCIpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdGVEYXRlO1xufVxuXG5jbGFzcyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWlseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xuICAgIGNvbnN0IG1vbWVudCA9IHdpbmRvdy5tb21lbnQ7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgbW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqeWVzdGVyZGF5XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KGZvcm1hdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdG9tb3Jyb3dcXHMqfX0vZ2ksIGRhdGUuY2xvbmUoKS5hZGQoMSwgXCJkXCIpLmZvcm1hdChmb3JtYXQpKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERhaWx5Tm90ZShkYXRlLCBkYWlseU5vdGVzKSB7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbERhaWx5Tm90ZXMoKSB7XG4gICAgLyoqXG4gICAgICogRmluZCBhbGwgZGFpbHkgbm90ZXMgaW4gdGhlIGRhaWx5IG5vdGUgZm9sZGVyXG4gICAgICovXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBkYWlseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFkYWlseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgZGFpbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYWlseU5vdGVzID0ge307XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKGRhaWx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJkYXlcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRhaWx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXM7XG59XG5cbmNsYXNzIFdlZWtseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlaygpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IHdlZWtTdGFydCA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWsuZG93O1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXG4gICAgICAgIFwic3VuZGF5XCIsXG4gICAgICAgIFwibW9uZGF5XCIsXG4gICAgICAgIFwidHVlc2RheVwiLFxuICAgICAgICBcIndlZG5lc2RheVwiLFxuICAgICAgICBcInRodXJzZGF5XCIsXG4gICAgICAgIFwiZnJpZGF5XCIsXG4gICAgICAgIFwic2F0dXJkYXlcIixcbiAgICBdO1xuICAgIHdoaWxlICh3ZWVrU3RhcnQpIHtcbiAgICAgICAgZGF5c09mV2Vlay5wdXNoKGRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgIHdlZWtTdGFydC0tO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c09mV2Vlaztcbn1cbmZ1bmN0aW9uIGdldERheU9mV2Vla051bWVyaWNhbFZhbHVlKGRheU9mV2Vla05hbWUpIHtcbiAgICByZXR1cm4gZ2V0RGF5c09mV2VlaygpLmluZGV4T2YoZGF5T2ZXZWVrTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlZWtseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KVxccyo6KC4qPyl9fS9naSwgKF8sIGRheU9mV2VlaywgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla2RheShkYXkpLmZvcm1hdChtb21lbnRGb3JtYXQudHJpbSgpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZShkYXRlLCB3ZWVrbHlOb3Rlcykge1xuICAgIHJldHVybiB3ZWVrbHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFdlZWtseU5vdGVzKCkge1xuICAgIGNvbnN0IHdlZWtseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB3ZWVrbHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3Qgd2Vla2x5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXdlZWtseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHdlZWtseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih3ZWVrbHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcIndlZWtcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICB3ZWVrbHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG59XG5cbmNsYXNzIE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9udGhseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZShkYXRlLCBtb250aGx5Tm90ZXMpIHtcbiAgICByZXR1cm4gbW9udGhseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vbnRobHlOb3RlcygpIHtcbiAgICBjb25zdCBtb250aGx5Tm90ZXMgPSB7fTtcbiAgICBpZiAoIWFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBtb250aGx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIW1vbnRobHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9udGhseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgbW9udGhseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihtb250aGx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aGx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlcztcbn1cblxuY2xhc3MgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVF1YXJ0ZXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGUoZGF0ZSwgcXVhcnRlcmx5KSB7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseVtnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFF1YXJ0ZXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IHt9O1xuICAgIGlmICghYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gcXVhcnRlcmx5O1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBxdWFydGVybHlGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXF1YXJ0ZXJseUZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBxdWFydGVybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4ocXVhcnRlcmx5Rm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJxdWFydGVyXCIpO1xuICAgICAgICAgICAgICAgIHF1YXJ0ZXJseVtkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVhcnRlcmx5O1xufVxuXG5jbGFzcyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlWWVhcmx5Tm90ZShkYXRlKSB7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IHRlbXBsYXRlLCBmb3JtYXQsIGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZShkYXRlLCB5ZWFybHlOb3Rlcykge1xuICAgIHJldHVybiB5ZWFybHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFllYXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHllYXJseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB5ZWFybHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgeWVhcmx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXllYXJseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHllYXJseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih5ZWFybHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInllYXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB5ZWFybHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG59XG5cbmZ1bmN0aW9uIGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRhaWx5Tm90ZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnNbXCJkYWlseS1ub3Rlc1wiXTtcbiAgICBpZiAoZGFpbHlOb3Rlc1BsdWdpbiAmJiBkYWlseU5vdGVzUGx1Z2luLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LmRhaWx5Py5lbmFibGVkO1xufVxuLyoqXG4gKiBYWFg6IFwiV2Vla2x5IE5vdGVzXCIgbGl2ZSBpbiBlaXRoZXIgdGhlIENhbGVuZGFyIHBsdWdpbiBvciB0aGUgcGVyaW9kaWMtbm90ZXMgcGx1Z2luLlxuICogQ2hlY2sgYm90aCB1bnRpbCB0aGUgd2Vla2x5IG5vdGVzIGZlYXR1cmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDYWxlbmRhciBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LndlZWtseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/Lm1vbnRobHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnF1YXJ0ZXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwZXJpb2RpY05vdGVzID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8ueWVhcmx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MoZ3JhbnVsYXJpdHkpIHtcbiAgICBjb25zdCBnZXRTZXR0aW5ncyA9IHtcbiAgICAgICAgZGF5OiBnZXREYWlseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgd2VlazogZ2V0V2Vla2x5Tm90ZVNldHRpbmdzLFxuICAgICAgICBtb250aDogZ2V0TW9udGhseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgcXVhcnRlcjogZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB5ZWFyOiBnZXRZZWFybHlOb3RlU2V0dGluZ3MsXG4gICAgfVtncmFudWxhcml0eV07XG4gICAgcmV0dXJuIGdldFNldHRpbmdzKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQZXJpb2RpY05vdGUoZ3JhbnVsYXJpdHksIGRhdGUpIHtcbiAgICBjb25zdCBjcmVhdGVGbiA9IHtcbiAgICAgICAgZGF5OiBjcmVhdGVEYWlseU5vdGUsXG4gICAgICAgIG1vbnRoOiBjcmVhdGVNb250aGx5Tm90ZSxcbiAgICAgICAgd2VlazogY3JlYXRlV2Vla2x5Tm90ZSxcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVGbltncmFudWxhcml0eV0oZGF0ZSk7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuYXBwSGFzRGFpbHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuY3JlYXRlRGFpbHlOb3RlID0gY3JlYXRlRGFpbHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVNb250aGx5Tm90ZSA9IGNyZWF0ZU1vbnRobHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVQZXJpb2RpY05vdGUgPSBjcmVhdGVQZXJpb2RpY05vdGU7XG5leHBvcnRzLmNyZWF0ZVF1YXJ0ZXJseU5vdGUgPSBjcmVhdGVRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVXZWVrbHlOb3RlID0gY3JlYXRlV2Vla2x5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlWWVhcmx5Tm90ZSA9IGNyZWF0ZVllYXJseU5vdGU7XG5leHBvcnRzLmdldEFsbERhaWx5Tm90ZXMgPSBnZXRBbGxEYWlseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxNb250aGx5Tm90ZXMgPSBnZXRBbGxNb250aGx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFF1YXJ0ZXJseU5vdGVzID0gZ2V0QWxsUXVhcnRlcmx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFdlZWtseU5vdGVzID0gZ2V0QWxsV2Vla2x5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFllYXJseU5vdGVzID0gZ2V0QWxsWWVhcmx5Tm90ZXM7XG5leHBvcnRzLmdldERhaWx5Tm90ZSA9IGdldERhaWx5Tm90ZTtcbmV4cG9ydHMuZ2V0RGFpbHlOb3RlU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0RGF0ZUZyb21GaWxlID0gZ2V0RGF0ZUZyb21GaWxlO1xuZXhwb3J0cy5nZXREYXRlRnJvbVBhdGggPSBnZXREYXRlRnJvbVBhdGg7XG5leHBvcnRzLmdldERhdGVVSUQgPSBnZXREYXRlVUlEO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZSA9IGdldE1vbnRobHlOb3RlO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZVNldHRpbmdzID0gZ2V0TW9udGhseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MgPSBnZXRQZXJpb2RpY05vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UXVhcnRlcmx5Tm90ZSA9IGdldFF1YXJ0ZXJseU5vdGU7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0VGVtcGxhdGVJbmZvID0gZ2V0VGVtcGxhdGVJbmZvO1xuZXhwb3J0cy5nZXRXZWVrbHlOb3RlID0gZ2V0V2Vla2x5Tm90ZTtcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZVNldHRpbmdzID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzO1xuZXhwb3J0cy5nZXRZZWFybHlOb3RlID0gZ2V0WWVhcmx5Tm90ZTtcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZVNldHRpbmdzID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzO1xuIiwiLy8gT2JzaWRpYW4gYnVuZGxlcyBtb21lbnQuanMgYW5kIGV4cG9zZXMgaXQgYXMgd2luZG93Lm1vbWVudCBhdCBydW50aW1lLlxuLy8gSXRzIHR5cGUgaXMgZGVjbGFyZWQgZ2xvYmFsbHkgdmlhIFwiZGVjbGFyZSBnbG9iYWxcIiBpbiB0eXBlcy5kLnRzLCB3aGljaFxuLy8gd29ya3MgZmluZSBmb3Igd2hvbGUtcHJvamVjdCB0eXBlLWNoZWNraW5nICh0aGlzIHByb2plY3QncyBvd24gdHNjb25maWcsXG4vLyB0ZXN0cywgYnVpbGQpIGJ1dCBub3QgZm9yIHRvb2xzIHRoYXQgdHlwZS1jaGVjayBmaWxlcyBpbiBpc29sYXRpb24gLS1cbi8vIHRob3NlIG5ldmVyIHNlZSB0aGUgYW1iaWVudCBhdWdtZW50YXRpb24gZnJvbSB0aGF0IHNlcGFyYXRlIGZpbGUsIHNvXG4vLyBldmVyeSB3aW5kb3cubW9tZW50IHVzYWdlIHNpbGVudGx5IHJlc29sdmVzIHRvIGBhbnlgIHRoZXJlLCBjYXNjYWRpbmdcbi8vIGludG8gdW5zYWZlLSogbGludCB3YXJuaW5ncyBvbiBldmVyeSBsaW5lIHRoYXQgdG91Y2hlcyBpdHMgcmV0dXJuIHZhbHVlLlxuLy9cbi8vIFJlLWV4cG9ydGluZyB0aHJvdWdoIGEgcmVhbCBFUyBpbXBvcnQgc2lkZXN0ZXBzIHRoYXQ6IGEgbW9kdWxlIGltcG9ydCdzXG4vLyB0eXBlIGlzIHJlc29sdmVkIGZyb20gdGhpcyBmaWxlJ3Mgb3duIGRlY2xhcmVkIHR5cGUgcmVnYXJkbGVzcyBvZiBhbWJpZW50XG4vLyBkZWNsYXJhdGlvbiB2aXNpYmlsaXR5IGVsc2V3aGVyZS5cbi8vXG4vLyBVc2VzIGEgUHJveHkgaW5zdGVhZCBvZiBjYXB0dXJpbmcgd2luZG93Lm1vbWVudCBkaXJlY3RseSBhdCBtb2R1bGUtbG9hZFxuLy8gdGltZSwgc28gbGF0ZXIgbXV0YXRpb25zIG9mIHdpbmRvdy5tb21lbnQgYXJlIHN0aWxsIHJlZmxlY3RlZCAtLSBzb21lXG4vLyB0ZXN0cyBpbnRlbnRpb25hbGx5IG1vbmtleS1wYXRjaCB3aW5kb3cubW9tZW50IG1pZC10ZXN0ICh0byBleGVyY2lzZVxuLy8gZXJyb3ItaGFuZGxpbmcgYnJhbmNoZXMgYXJvdW5kIGEgdGhyb3dpbmcgLmZvcm1hdCgpKSwgYW5kIGEgcGxhaW5cbi8vIGNhcHR1cmVkIHJlZmVyZW5jZSB3b3VsZCBrZWVwIHBvaW50aW5nIGF0IHRoZSBwcmUtbW9jayBmdW5jdGlvbi5cbmNvbnN0IG1vbWVudDogdHlwZW9mIGltcG9ydChcIm1vbWVudFwiKSA9IG5ldyBQcm94eShcbiAgKCgpOiB1bmRlZmluZWQgPT4gdW5kZWZpbmVkKSBhcyB1bmtub3duIGFzIHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIiksXG4gIHtcbiAgICBhcHBseTogKF90YXJnZXQsIHRoaXNBcmcsIGFyZ3M6IHVua25vd25bXSkgPT5cbiAgICAgIFJlZmxlY3QuYXBwbHkod2luZG93Lm1vbWVudCBhcyB1bmtub3duIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24sIHRoaXNBcmcsIGFyZ3MpLFxuICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biA9PiBSZWZsZWN0LmdldCh3aW5kb3cubW9tZW50LCBwcm9wLCByZWNlaXZlciksXG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudDtcbiIsIi8qKlxuICogTW9kdWxlIHBvdXIgbGUgZm9ybWF0YWdlIGRlIGRhdGVzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vKipcbiAqIENsYXNzZSBwb3VyIGZvcm1hdGVyIGRlcyBkYXRlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIHNlbG9uIGxlIGZvcm1hdCBzcMOpY2lmacOpXG4gICAqIEBwYXJhbSBkYXRlIExhIGRhdGUgw6AgZm9ybWF0ZXJcbiAgICogQHBhcmFtIGZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZSAoZm9ybWF0IE1vbWVudC5qcylcbiAgICogQHJldHVybnMgTGEgZGF0ZSBmb3JtYXTDqWUgZW4gc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdGUgdW5lIGRhdGUgYXZlYyBoZXVyZVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IExlIGZvcm1hdCBkZSBkYXRlXG4gICAqIEBwYXJhbSB0aW1lRm9ybWF0IExlIGZvcm1hdCBkJ2hldXJlXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgTGUgc8OpcGFyYXRldXIgZW50cmUgZGF0ZSBldCBoZXVyZSAoZMOpZmF1dDogXCIgXCIpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGF2ZWMgbCdoZXVyZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFdpdGhUaW1lKFxuICAgIGRhdGU6IERhdGUsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIHRpbWVGb3JtYXQ6IHN0cmluZyxcbiAgICBzZXBhcmF0b3IgPSBcIiBcIlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgdGltZUZvcm1hdCk7XG4gICAgcmV0dXJuIGAke2RhdGVTdHJ9JHtzZXBhcmF0b3J9JHt0aW1lU3RyfWA7XG4gIH1cbn1cblxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjYuMlxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9O1xuXG4gIChmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgcmV0dXJuIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiAhPT0gbnVsbCA/IHNlbGYgOiB0aGlzKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIFRyYW5zbGF0b3IsIGkxOG4sIHRyYW5zbGF0b3I7XG5cbiAgICBUcmFuc2xhdG9yID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gVHJhbnNsYXRvcigpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSBfX2JpbmQodGhpcy50cmFuc2xhdGUsIHRoaXMpOyAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0LCBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nLCBudW1PckZvcm1hdHRpbmdPckNvbnRleHQsIGZvcm1hdHRpbmdPckNvbnRleHQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRUZXh0LCBmb3JtYXR0aW5nLCBpc09iamVjdCwgbnVtO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgdmFyIHR5cGU7XG5cbiAgICAgICAgICB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGUgPT09IFwib2JqZWN0XCIgJiYgISFvYmo7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc09iamVjdChkZWZhdWx0TnVtT3JGb3JtYXR0aW5nKSkge1xuICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICBudW0gPSBudWxsO1xuICAgICAgICAgIGZvcm1hdHRpbmcgPSBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nO1xuICAgICAgICAgIGNvbnRleHQgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdE51bU9yRm9ybWF0dGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVmYXVsdFRleHQgPSBudWxsO1xuICAgICAgICAgICAgbnVtID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0ID0gZm9ybWF0dGluZ09yQ29udGV4dCB8fCB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IGZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodGV4dCkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodGV4dFsnaTE4biddKSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRbJ2kxOG4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSGFzaCh0ZXh0LCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0KHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBjLCBrLCB2LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuXG4gICAgICAgIGlmICgoZC52YWx1ZXMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmID0gZC52YWx1ZXM7XG4gICAgICAgICAgZm9yIChrIGluIF9yZWYpIHtcbiAgICAgICAgICAgIHYgPSBfcmVmW2tdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnZhbHVlc1trXSA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoZC5jb250ZXh0cyAhPSBudWxsKSkge1xuICAgICAgICAgIF9yZWYxID0gZC5jb250ZXh0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIGMgPSBfcmVmMVtfaV07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGF0YS5jb250ZXh0cy5wdXNoKGMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb24gPSBleHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jbGVhckNvbnRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0Q29udGV4dCgpO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUucmVzZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdmFsdWVzOiB7fSxcbiAgICAgICAgICBjb250ZXh0czogW11cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0ID0ge307XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVIYXNoID0gZnVuY3Rpb24oaGFzaCwgY29udGV4dCkge1xuICAgICAgICB2YXIgaywgdjtcblxuICAgICAgICBmb3IgKGsgaW4gaGFzaCkge1xuICAgICAgICAgIHYgPSBoYXNoW2tdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaGFzaFtrXSA9IHRoaXMudHJhbnNsYXRlVGV4dCh2LCBudWxsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0LCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGV4dERhdGEsIHJlc3VsdDtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0RGF0YSA9IHRoaXMuZ2V0Q29udGV4dERhdGEodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNvbnRleHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHREYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZFRyYW5zbGF0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgdGhpcy5kYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5maW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGRhdGEsIGRlZmF1bHRUZXh0KSB7XG4gICAgICAgIHZhciBhLCBiLCBjLCBkLCBlLCByZXN1bHQsIHRyaXBsZSwgdmFsdWUsIF9pLCBfbGVuO1xuXG4gICAgICAgIHZhbHVlID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbiAmJiB0eXBlb2YgdGhpcy5leHRlbnNpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmV4dGVuc2lvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hcHBseU51bWJlcnModmFsdWUsIG51bSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG51bSA9PSBudWxsKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYSA9IG51bSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gdmFsdWUubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgdHJpcGxlID0gdmFsdWVbX2ldO1xuICAgICAgICAgICAgICBiID0gdHJpcGxlWzBdID09PSBudWxsO1xuICAgICAgICAgICAgICBjID0gdHJpcGxlWzFdID09PSBudWxsO1xuICAgICAgICAgICAgICBkID0gbnVtID49IHRyaXBsZVswXTtcbiAgICAgICAgICAgICAgZSA9IG51bSA8PSB0cmlwbGVbMV07XG4gICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgYyB8fCAhYSAmJiAoIWIgJiYgZCAmJiAoYyB8fCBlKSB8fCBiICYmICFjICYmIGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hcHBseUZvcm1hdHRpbmcodHJpcGxlWzJdLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcocmVzdWx0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseU51bWJlcnMgPSBmdW5jdGlvbihzdHIsIG51bSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIi0lblwiLCBTdHJpbmcoLW51bSkpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmdldENvbnRleHREYXRhID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCkge1xuICAgICAgICB2YXIgYywgZXF1YWwsIGtleSwgdmFsdWUsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTtcblxuICAgICAgICBpZiAoZGF0YS5jb250ZXh0cyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX3JlZiA9IGRhdGEuY29udGV4dHM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGMgPSBfcmVmW19pXTtcbiAgICAgICAgICBlcXVhbCA9IHRydWU7XG4gICAgICAgICAgX3JlZjEgPSBjLm1hdGNoZXM7XG4gICAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgdmFsdWUgPT09IGNvbnRleHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS51c2VPcmlnaW5hbFRleHQgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgaWYgKG51bSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmFwcGx5Rm9ybWF0dGluZyA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZykge1xuICAgICAgICB2YXIgaW5kLCByZWdleDtcblxuICAgICAgICBmb3IgKGluZCBpbiBmb3JtYXR0aW5nKSB7XG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKFwiJXtcIiArIGluZCArIFwifVwiLCBcImdcIik7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZm9ybWF0dGluZ1tpbmRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdG9yO1xuXG4gICAgfSkoKTtcbiAgICB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICBpMThuID0gdHJhbnNsYXRvci50cmFuc2xhdGU7XG4gICAgaTE4bi50cmFuc2xhdG9yID0gdHJhbnNsYXRvcjtcbiAgICBpMThuLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB0cmFucztcblxuICAgICAgdHJhbnMgPSBuZXcgVHJhbnNsYXRvcigpO1xuICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICB0cmFucy5hZGQoZGF0YSk7XG4gICAgICB9XG4gICAgICB0cmFucy50cmFuc2xhdGUuY3JlYXRlID0gaTE4bi5jcmVhdGU7XG4gICAgICB0cmFucy50cmFuc2xhdGUudHJhbnNsYXRvciA9IHRyYW5zO1xuICAgICAgcmV0dXJuIHRyYW5zLnRyYW5zbGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIlRvZGF5XCIsXG4gIHRvbW9ycm93OiBcIlRvbW9ycm93XCIsXG4gIHllc3RlcmRheTogXCJZZXN0ZXJkYXlcIixcbiAgbmV4dDogXCJOZXh0XCIsXG4gIGxhc3Q6IFwiTGFzdFwiLFxuICB0aGlzOiBcIlRoaXNcIixcbiAgaW46IFwiSW5cIixcbiAgc3VuZGF5OiBcIlN1bmRheVwiLFxuICBtb25kYXk6IFwiTW9uZGF5XCIsXG4gIHR1ZXNkYXk6IFwiVHVlc2RheVwiLFxuICB3ZWRuZXNkYXk6IFwiV2VkbmVzZGF5XCIsXG4gIHRodXJzZGF5OiBcIlRodXJzZGF5XCIsXG4gIGZyaWRheTogXCJGcmlkYXlcIixcbiAgc2F0dXJkYXk6IFwiU2F0dXJkYXlcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IGhvdXJzXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gZGF5c1wiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSB3ZWVrc1wiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gbW9udGhzXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRheXMgYWdvXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWVrcyBhZ29cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtb250aHMgYWdvXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZXMgYWdvXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBob3VycyBhZ29cIixcbiAgdGltZTogXCJUaW1lXCIsXG4gIG5vdzogXCJOb3dcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvdXJcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJIb3VyfEhvdXJzfGh8aHJ8aHJzfGhcIixcbiAgZGF5OiBcIkRheXxEYXlzfGRcIixcbiAgd2VlazogXCJXZWVrfFdlZWtzfHdcIixcbiAgbW9udGg6IFwiTW9udGh8TW9udGhzfE18bW9cIixcbiAgeWVhcjogXCJZZWFyfFllYXJzfHl8eXJ8eXJzXCIsXG4gIGFuZDogXCJBbmRcIixcbiAgYXQ6IFwiQXRcIixcbiAgZnJvbTogXCJGcm9tXCIsXG4gIHRvOiBcIlRvfFVudGlsfFRpbGxcIixcbiAgb2Y6IFwib2ZcIixcbiAgZmlyc3Q6IFwiZmlyc3RcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLku4rml6VcIixcbiAgdG9tb3Jyb3c6IFwi5piO5pelXCIsXG4gIHllc3RlcmRheTogXCLmmKjml6VcIixcbiAgbmV4dDogXCLmrKF857+MfOadpVwiLCAvLyBcIlRzdWdpL1lva3UvUmFpXCIgKGV4OiBSYWktc2h1ID0gU2VtYWluZSBwcm9jaGFpbmUpXG4gIGxhc3Q6IFwi5YmNfOWOu3zlhYh85pioXCIsIC8vIFwiTWFlL0t5by9TZW4vU2FrdVwiIChleDogU2VuLXNodSA9IFNlbWFpbmUgZGVybmnDqHJlKVxuICB0aGlzOiBcIuS7inzmnKx85b2TXCIsIC8vIFwiSW1hL0hvbi9Ub1wiIChleDogS29uLXNodSA9IENldHRlIHNlbWFpbmUpXG4gIGluOiBcIuOBguOBqHxhdG9cIiwgLy8gXCJBdG9cIiAoUG91ciBkaXJlIFwiRGFucyBYIG1pbnV0ZXNcIiAtPiBcIkF0byBYIGZ1blwiKVxuICBzdW5kYXk6IFwi5pel5puc5pelXCIsXG4gIG1vbmRheTogXCLmnIjmm5zml6VcIixcbiAgdHVlc2RheTogXCLngavmm5zml6VcIixcbiAgd2VkbmVzZGF5OiBcIuawtOabnOaXpVwiLFxuICB0aHVyc2RheTogXCLmnKjmm5zml6VcIixcbiAgZnJpZGF5OiBcIumHkeabnOaXpVwiLFxuICBzYXR1cmRheTogXCLlnJ/mm5zml6VcIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhuW+jFwiLCAvLyBYIG1pbnV0ZXMgYWZ0ZXJcbiAgaW5ob3VyczogXCIle3RpbWVEZWx0YX3mmYLplpPlvoxcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeaXpeW+jFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfemAsemWk+W+jFwiLFxuICBpbm1vbnRoczogXCIle3RpbWVEZWx0YX3jg7bmnIjlvoxcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3ml6XliY1cIiwgLy8gWCBkYXlzIGFnb1xuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHplpPliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeODtuaciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhuWJjVwiLCAvLyBYIG1pbnV0ZXMgYWdvXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeaZgumWk+WJjVwiLCAvLyBYIGhvdXJzIGFnb1xuICB0aW1lOiBcIuaZgumWk1wiLFxuICBub3c6IFwi5LuKXCIsIC8vIEltYSAoTWFpbnRlbmFudClcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSDliIZcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0g5YiGXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0g5pmC6ZaTXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51dGU6IFwi5YiGfOOBteOCk3zjgbfjgpN8ZnVuXCIsXG4gIGhvdXI6IFwi5pmC6ZaTfOOBmOOBi+OCk3zmmYJ844GYXCIsXG4gIGRheTogXCLml6V844Gr44GhXCIsXG4gIHdlZWs6IFwi6YCxfOmAsemWk3zjgZfjgoXjgYZ844GX44KF44GG44GL44KTXCIsXG4gIG1vbnRoOiBcIuaciHzjg7bmnIh844GL44GS44GkfOOBjOOBpFwiLFxuICB5ZWFyOiBcIuW5tHzjga3jgpNcIixcbiAgb2Y6IFwi44GuXCIsXG4gIGZpcnN0OiBcIuacgOWInXznrKzkuIB85YidfOacgOWIneOBrlwiLFxuICBhbmQ6IFwi44GofOOBiuOCiOOBs1wiLFxuICBhdDogXCLjgat844GnXCIsXG4gIGZyb206IFwi44GL44KJfOOCiOOCilwiLFxuICB0bzogXCLjgb7jgad844G+44Gn44GrXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0OyIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkF1am91cmQnaHVpXCIsXG4gIHRvbW9ycm93OiBcIkRlbWFpblwiLFxuICB5ZXN0ZXJkYXk6IFwiSGllclwiLFxuICBuZXh0OiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIsXG4gIGxhc3Q6IFwiZGVybmllcnxkZXJuacOocmV8cGFzc8OpfHBhc3PDqWVcIixcbiAgdGhpczogXCJjZXxjZXR0ZXxjZXRcIixcbiAgaW46IFwiZGFuc1wiLFxuICBzdW5kYXk6IFwiRGltYW5jaGVcIixcbiAgbW9uZGF5OiBcIkx1bmRpXCIsXG4gIHR1ZXNkYXk6IFwiTWFyZGlcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNyZWRpXCIsXG4gIHRodXJzZGF5OiBcIkpldWRpXCIsXG4gIGZyaWRheTogXCJWZW5kcmVkaVwiLFxuICBzYXR1cmRheTogXCJTYW1lZGlcIixcbiAgaW5taW51dGVzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgaW5ob3VyczogXCJkYW5zICV7dGltZURlbHRhfSBoZXVyZXNcIixcbiAgaW5kYXlzOiBcImRhbnMgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIGlud2Vla3M6IFwiZGFucyAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgaW5tb250aHM6IFwiZGFucyAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBkYXlzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gam91cnNcIixcbiAgd2Vla3NhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBzZW1haW5lc1wiLFxuICBtb250aHNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtb2lzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGhvdXJzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIHRpbWU6IFwiaGV1cmVcIixcbiAgbm93OiBcIm1haW50ZW5hbnRcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51dGU6IFwibWludXRlfG1pbnV0ZXN8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhldXJlfGhldXJlc3xoXCIsXG4gIGRheTogXCJqb3VyfGpvdXJzfGp8ZFwiLFxuICB3ZWVrOiBcInNlbWFpbmV8c2VtYWluZXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1vaXN8TXxtb1wiLFxuICB5ZWFyOiBcImFubsOpZXxhbm7DqWVzfGFufGFuc3xhfHlcIixcbiAgYW5kOiBcImV0XCIsXG4gIGF0OiBcIsOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXB1aXN8ZHVcIixcbiAgdG86IFwiw6B8YXxqdXNxdSfDoHxqdXNxdSdhdXxhdVwiLFxuICBvZjogXCJkdXxkZVwiLFxuICBmaXJzdDogXCJwcmVtaWVyfHByZW1pw6hyZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIb2plXCIsXG4gIHRvbW9ycm93OiBcIkFtYW5ow6NcIixcbiAgeWVzdGVyZGF5OiBcIk9udGVtXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2VndWludGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzc2Fkb3xwYXNzYWRhXCIsXG4gIHRoaXM6IFwiZXN0ZXxlc3RhXCIsXG4gIGluOiBcImVtfGRhcXVpIGF8ZGFxdWlcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIlNlZ3VuZGEtZmVpcmFcIixcbiAgdHVlc2RheTogXCJUZXLDp2EtZmVpcmFcIixcbiAgd2VkbmVzZGF5OiBcIlF1YXJ0YS1mZWlyYVwiLFxuICB0aHVyc2RheTogXCJRdWludGEtZmVpcmFcIixcbiAgZnJpZGF5OiBcIlNleHRhLWZlaXJhXCIsXG4gIHNhdHVyZGF5OiBcIlPDoWJhZG9cIixcbiAgaW5taW51dGVzOiBcImVtICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGluaG91cnM6IFwiZW0gJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGluZGF5czogXCJlbSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICBpbndlZWtzOiBcImVtICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVtICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICB3ZWVrc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaG91cnNhZ286IFwiaMOhICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWdvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImRpYXxkaWFzfGRcIixcbiAgd2VlazogXCJzZW1hbmF8c2VtYW5hc3xzfHdcIixcbiAgbW9udGg6IFwibcOqc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYW5vfGFub3N8YXx5XCIsXG4gIGFuZDogXCJlXCIsXG4gIGF0OiBcIsOgc3xhc3zDoHxhXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXTDqXxhb3zDoFwiLFxuICBvZjogXCJkb3xkYXxkZVwiLFxuICBmaXJzdDogXCJwcmltZWlyb3xwcmltZWlyYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIZXV0ZVwiLFxuICB0b21vcnJvdzogXCJNb3JnZW5cIixcbiAgeWVzdGVyZGF5OiBcIkdlc3Rlcm5cIixcbiAgbmV4dDogXCJuw6RjaHN0ZXJ8bsOkY2hzdGV8bsOkY2hzdGVzfG7DpGNoc3RlblwiLFxuICBsYXN0OiBcImxldHp0ZXJ8bGV0enRlfGxldHp0ZXNcIixcbiAgdGhpczogXCJkaWVzZXJ8ZGllc2V8ZGllc2VzXCIsXG4gIGluOiBcImluXCIsXG4gIHN1bmRheTogXCJTb25udGFnXCIsXG4gIG1vbmRheTogXCJNb250YWdcIixcbiAgdHVlc2RheTogXCJEaWVuc3RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwiTWl0dHdvY2hcIixcbiAgdGh1cnNkYXk6IFwiRG9ubmVyc3RhZ1wiLFxuICBmcmlkYXk6IFwiRnJlaXRhZ1wiLFxuICBzYXR1cmRheTogXCJTYW1zdGFnXCIsXG4gIGlubWludXRlczogXCJpbiAle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBpbmhvdXJzOiBcImluICV7dGltZURlbHRhfSBTdHVuZGVuXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gVGFnZW5cIixcbiAgaW53ZWVrczogXCJpbiAle3RpbWVEZWx0YX0gV29jaGVuXCIsXG4gIGlubW9udGhzOiBcImluICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIGRheXNhZ286IFwidm9yICV7dGltZURlbHRhfSBUYWdlblwiLFxuICB3ZWVrc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFdvY2hlblwiLFxuICBtb250aHNhZ286IFwidm9yICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIG1pbnV0ZXNhZ286IFwidm9yICV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIGhvdXJzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gU3R1bmRlblwiLFxuICB0aW1lOiBcIlplaXRcIixcbiAgbm93OiBcImpldHp0XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gU3R1bmRlXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IFN0dW5kZVwiLFxuICBtaW51dGU6IFwiTWludXRlfE1pbnV0ZW58bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIlN0dW5kZXxTdHVuZGVufFN0ZHxoXCIsXG4gIGRheTogXCJUYWd8VGFnZXxkfHRcIixcbiAgd2VlazogXCJXb2NoZXxXb2NoZW58d1wiLFxuICBtb250aDogXCJNb25hdHxNb25hdGV8TW9uYXRzfE18bW9cIixcbiAgeWVhcjogXCJKYWhyfEphaHJlfGp8eVwiLFxuICBhbmQ6IFwidW5kXCIsXG4gIGF0OiBcInVtXCIsXG4gIGZyb206IFwidm9ufGFiXCIsXG4gIHRvOiBcImJpc3xiaXMgenVtXCIsXG4gIG9mOiBcImRlc3x2b21cIixcbiAgZmlyc3Q6IFwiZXJzdGVyfGVyc3RlfGVyc3Rlc1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJWYW5kYWFnXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2lzdGVyZW5cIixcbiAgbmV4dDogXCJ2b2xnZW5kZVwiLFxuICBsYXN0OiBcInZvcmlnZXxsYWF0c3RlXCIsXG4gIHRoaXM6IFwiZGV6ZXxkaXRcIixcbiAgaW46IFwib3ZlclwiLFxuICBzdW5kYXk6IFwiem9uZGFnXCIsXG4gIG1vbmRheTogXCJtYWFuZGFnXCIsXG4gIHR1ZXNkYXk6IFwiZGluc2RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwid29lbnNkYWdcIixcbiAgdGh1cnNkYXk6IFwiZG9uZGVyZGFnXCIsXG4gIGZyaWRheTogXCJ2cmlqZGFnXCIsXG4gIHNhdHVyZGF5OiBcInphdGVyZGFnXCIsXG4gIGlubWludXRlczogXCJvdmVyICV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIGluaG91cnM6IFwib3ZlciAle3RpbWVEZWx0YX0gdXJlblwiLFxuICBpbmRheXM6IFwib3ZlciAle3RpbWVEZWx0YX0gZGFnZW5cIixcbiAgaW53ZWVrczogXCJvdmVyICV7dGltZURlbHRhfSB3ZWtlblwiLFxuICBpbm1vbnRoczogXCJvdmVyICV7dGltZURlbHRhfSBtYWFuZGVuXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRhZ2VuIGdlbGVkZW5cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHdla2VuIGdlbGVkZW5cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtYWFuZGVuIGdlbGVkZW5cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRlbiBnZWxlZGVuXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSB1cmVuIGdlbGVkZW5cIixcbiAgdGltZTogXCJ0aWpkXCIsXG4gIG5vdzogXCJudVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IHV1clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXRlOiBcIm1pbnV1dHxtaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJ1dXJ8dXJlbnx1fGhcIixcbiAgZGF5OiBcImRhZ3xkYWdlbnxkXCIsXG4gIHdlZWs6IFwid2Vla3x3ZWtlbnx3XCIsXG4gIG1vbnRoOiBcIm1hYW5kfG1hYW5kZW58TXxtb1wiLFxuICB5ZWFyOiBcImphYXJ8amFyZW58anx5XCIsXG4gIGFuZDogXCJlblwiLFxuICBhdDogXCJvbVwiLFxuICBmcm9tOiBcInZhbnx2YW5hZlwiLFxuICB0bzogXCJ0b3R8dG90IGVuIG1ldFwiLFxuICBvZjogXCJ2YW5cIixcbiAgZmlyc3Q6IFwiZWVyc3RlXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG95XCIsXG4gIHRvbW9ycm93OiBcIk1hw7FhbmFcIixcbiAgeWVzdGVyZGF5OiBcIkF5ZXJcIixcbiAgbmV4dDogXCJwcsOzeGltb3xwcsOzeGltYXxzaWd1aWVudGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzYWRvfHBhc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbnxkZW50cm8gZGVcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIkx1bmVzXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVzXCIsXG4gIHdlZG5lc2RheTogXCJNacOpcmNvbGVzXCIsXG4gIHRodXJzZGF5OiBcIkp1ZXZlc1wiLFxuICBmcmlkYXk6IFwiVmllcm5lc1wiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbiAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVuICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW4gJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIGlud2Vla3M6IFwiZW4gJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgaW5tb250aHM6IFwiZW4gJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIGRheXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gZMOtYXNcIixcbiAgd2Vla3NhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBtb250aHNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGFnb3N1ZmZpeDogXCJhdHLDoXN8YXRyYXNcIixcbiAgdGltZTogXCJob3JhXCIsXG4gIG5vdzogXCJhaG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0b3N8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhvcmF8aG9yYXN8aFwiLFxuICBkYXk6IFwiZMOtYXxkw61hc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYcOxb3xhw7Fvc3xhfHlcIixcbiAgYW5kOiBcInlcIixcbiAgYXQ6IFwiYSBsYXN8YSBsYXxhfGVuXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXxoYXN0YVwiLFxuICBvZjogXCJkZXxkZWxcIixcbiAgZmlyc3Q6IFwicHJpbWVyfHByaW1lcmFcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG5cbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIk9nZ2lcIixcbiAgdG9tb3Jyb3c6IFwiRG9tYW5pXCIsXG4gIHllc3RlcmRheTogXCJJZXJpXCIsXG4gIG5leHQ6IFwicHJvc3NpbW98cHJvc3NpbWF8c2VndWVudGVcIixcbiAgbGFzdDogXCJ1bHRpbW98dWx0aW1hfHNjb3Jzb3xzY29yc2F8cGFzc2F0b3xwYXNzYXRhXCIsXG4gIHRoaXM6IFwicXVlc3RvfHF1ZXN0YVwiLFxuICBpbjogXCJpbnx0cmFcIixcbiAgc3VuZGF5OiBcIkRvbWVuaWNhXCIsXG4gIG1vbmRheTogXCJMdW5lZMOsXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVkw6xcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNvbGVkw6xcIixcbiAgdGh1cnNkYXk6IFwiR2lvdmVkw6xcIixcbiAgZnJpZGF5OiBcIlZlbmVyZMOsXCIsXG4gIHNhdHVyZGF5OiBcIlNhYmF0b1wiLFxuICBpbm1pbnV0ZXM6IFwidHJhICV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgaW5ob3VyczogXCJ0cmEgJXt0aW1lRGVsdGF9IG9yZVwiLFxuICBpbmRheXM6IFwidHJhICV7dGltZURlbHRhfSBnaW9ybmlcIixcbiAgaW53ZWVrczogXCJ0cmEgJXt0aW1lRGVsdGF9IHNldHRpbWFuZVwiLFxuICBpbm1vbnRoczogXCJ0cmEgJXt0aW1lRGVsdGF9IG1lc2lcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0gZ2lvcm5pIGZhXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSBzZXR0aW1hbmUgZmFcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtZXNpIGZhXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0aSBmYVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gb3JlIGZhXCIsXG4gIHRpbWU6IFwib3JhXCIsXG4gIG5vdzogXCJhZGVzc298b3JhXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IG9yYVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dGl8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIm9yYXxvcmV8aFwiLFxuICBkYXk6IFwiZ2lvcm5vfGdpb3JuaXxnfGRcIixcbiAgd2VlazogXCJzZXR0aW1hbmF8c2V0dGltYW5lfHN8d1wiLFxuICBtb250aDogXCJtZXNlfG1lc2l8TXxtb1wiLFxuICB5ZWFyOiBcImFubm98YW5uaXxhfHlcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiYWxsZXxhbGxhfGFcIixcbiAgZnJvbTogXCJkYXxkYWx8ZGFsbGFcIixcbiAgdG86IFwiYXxmaW5vIGF8ZmlubyBhbHxmaW5vIGFsbGFcIixcbiAgb2Y6IFwiZGVsfGRlbGxhfGRpXCIsXG4gIGZpcnN0OiBcInByaW1vfHByaW1hXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLQodC10LPQvtC00L3Rj1wiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQtdGA0LBcIixcbiAgbmV4dDogXCLRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnQsNGPfNGB0LvQtdC00YPRjtGJ0LXQtXzRgdC70LXQtNGD0Y7RidC40LVcIixcbiAgbGFzdDogXCLQv9C+0YHQu9C10LTQvdC40Ll80L/QvtGB0LvQtdC00L3Rj9GPfNC/0L7RgdC70LXQtNC90LXQtXzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0Ll80L/RgNC+0YjQu9Cw0Y980L/RgNC+0YjQu9C+0LV80L/RgNC+0YjQu9GL0LVcIixcbiAgdGhpczogXCLRjdGC0L7RgnzRjdGC0LB80Y3RgtC+fNGN0YLQuFwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQktC+0YHQutGA0LXRgdC10L3RjNC1fNCS0L7RgdC60YDQtdGB0LXQvdGM0Y9cIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTQtdC70YzQvdC40Lp80J/QvtC90LXQtNC10LvRjNC90LjQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRgtC+0YDQvdC40Lp80JLRgtC+0YDQvdC40LrQsFwiLFxuICB3ZWRuZXNkYXk6IFwi0KHRgNC10LTQsHzQodGA0LXQtNGLXCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgNCzfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCf0Y/RgtC90LjRhtCwfNCf0Y/RgtC90LjRhtGLXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdCx0L7RgtCwfNCh0YPQsdCx0L7RgtGLXCIsXG4gIGlubWludXRlczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgaW5ob3VyczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5XCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0L3QtdC00LXQu9GOfNC90LXQtNC10LvQuHzQvdC10LTQtdC70YxcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5INC90LDQt9Cw0LRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMINC90LDQt9Cw0LRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0XCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QsiDQvdCw0LfQsNC0XCIsXG4gIHRpbWU6IFwi0LLRgNC10LzRj1wiLFxuICBub3c6IFwi0YHQtdC50YfQsNGBXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnV0ZTogXCLQvNC40L3Rg9GC0LB80LzQuNC90YPRgtGLfNC80LjQvdGD0YJ80LzQuNC9fNC8XCIsXG4gIGhvdXI6IFwi0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJ80YdcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3Rj3zQtNC90LXQuXzQtFwiLFxuICB3ZWVrOiBcItC90LXQtNC10LvRj3zQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMfNC9fNC90LXQtFwiLFxuICBtb250aDogXCLQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsnzQvNC10YF80LxcIixcbiAgeWVhcjogXCLQs9C+0LR80LPQvtC00LB80LvQtdGCfNCzfNC7XCIsXG4gIGFuZDogXCLQuFwiLFxuICBhdDogXCLQslwiLFxuICBmcm9tOiBcItGBfNC+0YJcIixcbiAgdG86IFwi0LTQvnzQulwiLFxuICBvZjogXCLQuNC3fNC+0YJcIixcbiAgZmlyc3Q6IFwi0L/QtdGA0LLRi9C5fNC/0LXRgNCy0LDRj3zQv9C10YDQstC+0LV80L/QtdGA0LLRi9C1XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi0KHRjNC+0LPQvtC00L3RllwiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQvtGA0LBcIixcbiAgbmV4dDogXCLQvdCw0YHRgtGD0L/QvdC40Ll80L3QsNGB0YLRg9C/0L3QsHzQvdCw0YHRgtGD0L/QvdC1fNC90LDRgdGC0YPQv9C90ZZcIixcbiAgbGFzdDogXCLQvtGB0YLQsNC90L3RltC5fNC+0YHRgtCw0L3QvdGPfNC+0YHRgtCw0L3QvdGUfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvQuNC5fNC80LjQvdGD0LvQsHzQvNC40L3Rg9C70LV80LzQuNC90YPQu9GWXCIsXG4gIHRoaXM6IFwi0YbQtdC5fNGG0Y980YbQtXzRhtGWXCIsXG4gIGluOiBcItGH0LXRgNC10LdcIixcbiAgc3VuZGF5OiBcItCd0LXQtNGW0LvRj3zQndC10LTRltC70ZZcIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTRltC70L7QunzQn9C+0L3QtdC00ZbQu9C60LBcIixcbiAgdHVlc2RheTogXCLQktGW0LLRgtC+0YDQvtC6fNCS0ZbQstGC0L7RgNC60LBcIixcbiAgd2VkbmVzZGF5OiBcItCh0LXRgNC10LTQsHzQodC10YDQtdC00LhcIixcbiAgdGh1cnNkYXk6IFwi0KfQtdGC0LLQtdGAfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCfJ9GP0YLQvdC40YbRj3zQnyfRj9GC0L3QuNGG0ZZcIixcbiAgc2F0dXJkYXk6IFwi0KHRg9Cx0L7RgtCwfNCh0YPQsdC+0YLQuFwiLFxuICBpbm1pbnV0ZXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIGluaG91cnM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIGluZGF5czogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LJcIixcbiAgaW53ZWVrczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRgtC40LbQtNC10L3RjHzRgtC40LbQvdGWfNGC0LjQttC90ZbQslwiLFxuICBpbm1vbnRoczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3RlnzQtNC90ZbQsiDRgtC+0LzRg1wiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LIg0YLQvtC80YNcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyINGC0L7QvNGDXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvSDRgtC+0LzRg1wiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9INGC0L7QvNGDXCIsXG4gIHRpbWU6IFwi0YfQsNGBXCIsXG4gIG5vdzogXCLQt9Cw0YDQsNC3XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXRlOiBcItGF0LLQuNC70LjQvdCwfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvXzRhdCyfNC8XCIsXG4gIGhvdXI6IFwi0LPQvtC00LjQvdCwfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9fNCz0L7QtHzQs1wiLFxuICBkYXk6IFwi0LTQtdC90Yx80LTQvdGWfNC00L3RltCyfNC0XCIsXG4gIHdlZWs6IFwi0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJ80YJ80YLQuNC2XCIsXG4gIG1vbnRoOiBcItC80ZbRgdGP0YbRjHzQvNGW0YHRj9GG0ZZ80LzRltGB0Y/RhtGW0LJ80LzRltGBfNC8XCIsXG4gIHllYXI6IFwi0YDRltC6fNGA0L7QutC4fNGA0L7QutGW0LJ80YBcIixcbiAgYW5kOiBcItGWXCIsXG4gIGF0OiBcItC+XCIsXG4gIGZyb206IFwi0Ld80LLRltC0XCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0Ld80LLRltC0XCIsXG4gIGZpcnN0OiBcItC/0LXRgNGI0LjQuXzQv9C10YDRiNCwfNC/0LXRgNGI0LV80L/QtdGA0YjRllwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuS7iuWkqVwiLFxuICB0b21vcnJvdzogXCLmmI7lpKlcIixcbiAgeWVzdGVyZGF5OiBcIuaYqOWkqVwiLFxuICAvLyBGb3JtYWwgKFwi5LiL5LiA5YCLXCIvXCLkuIvkuIDkuKpcIikgYW5kIHNob3J0IHByZWZpeCAoXCLkuItcIiwgZS5nLiBcIuS4i+aYn+acn+S4gFwiL1wi5LiL5ZGo5LiAXCIpIGZvcm1zLFxuICAvLyBjb3ZlcmluZyBib3RoIFRyYWRpdGlvbmFsIGFuZCBTaW1wbGlmaWVkIHNjcmlwdC5cbiAgbmV4dDogXCLkuIvkuIDlgIt85LiL5LiA5LiqfOS4i1wiLFxuICAvLyBcIuacgOW+jC/mnIDlkI5cIiAoXCJsYXN0XCIgaW4gZ2VuZXJhbCksIFwi5LiK5LiA5YCLL+S4iuS4gOS4qlwiIChcInByZXZpb3VzXCIpLCBhbmQgc2hvcnQgXCLkuIpcIlxuICAvLyAoZS5nLiBcIuS4iuaYn+acn+S4gFwiL1wi5LiK5ZGo5LiAXCIpLlxuICBsYXN0OiBcIuacgOW+jHzmnIDlkI585LiK5LiA5YCLfOS4iuS4gOS4qnzkuIpcIixcbiAgLy8gXCLpgJnlgIsv6L+Z5LiqXCIgKGZvcm1hbCkgYW5kIHNob3J0IFwi6YCZL+i/mVwiIChlLmcuIFwi6YCZ5pif5pyf5LiAXCIvXCLov5nlkajkuIBcIikuXG4gIHRoaXM6IFwi6YCZ5YCLfOi/meS4qnzpgJl86L+ZXCIsXG4gIGluOiBcIuWcqFwiLFxuICAvLyBcIuemruaLnC/npLzmi5xcIiAoY29sbG9xdWlhbCwgb3JpZ2luYWxseSBcIndvcnNoaXAgZGF5XCIpIGlzIGFsc28gZXh0cmVtZWx5IGNvbW1vblxuICAvLyBmb3Igd2Vla2RheXMsIGUuZy4gXCLnpq7mi5zkuIBcIi9cIuekvOaLnOS4gFwiIGZvciBNb25kYXkuXG4gIHN1bmRheTogXCLmmJ/mnJ/ml6V85ZGo5pelfOmAseaXpXzmmJ/mnJ/lpKl856au5ouc5pelfOekvOaLnOaXpXznpq7mi5zlpKl856S85ouc5aSpXCIsXG4gIG1vbmRheTogXCLmmJ/mnJ/kuIB85ZGo5LiAfOmAseS4gHznpq7mi5zkuIB856S85ouc5LiAXCIsXG4gIHR1ZXNkYXk6IFwi5pif5pyf5LqMfOWRqOS6jHzpgLHkuox856au5ouc5LqMfOekvOaLnOS6jFwiLFxuICB3ZWRuZXNkYXk6IFwi5pif5pyf5LiJfOWRqOS4iXzpgLHkuIl856au5ouc5LiJfOekvOaLnOS4iVwiLFxuICB0aHVyc2RheTogXCLmmJ/mnJ/lm5t85ZGo5ZubfOmAseWbm3znpq7mi5zlm5t856S85ouc5ZubXCIsXG4gIGZyaWRheTogXCLmmJ/mnJ/kupR85ZGo5LqUfOmAseS6lHznpq7mi5zkupR856S85ouc5LqUXCIsXG4gIHNhdHVyZGF5OiBcIuaYn+acn+WFrXzlkajlha186YCx5YWtfOemruaLnOWFrXznpLzmi5zlha1cIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhumQmOW+jFwiLFxuICBpbmhvdXJzOiBcIiV7dGltZURlbHRhfeWwj+aZguW+jFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF95aSp5b6MXCIsXG4gIGlud2Vla3M6IFwiJXt0aW1lRGVsdGF96YCx5b6MXCIsXG4gIGlubW9udGhzOiBcIiV7dGltZURlbHRhfeWAi+aciOW+jFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeWkqeWJjVwiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeWAi+aciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhumQmOWJjVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3lsI/mmYLliY1cIixcbiAgLy8gTm90IHVzZWQgZm9yIGRpc3BsYXksIG9ubHkgZm9yIG1hdGNoaW5nIFwiTiB1bml0XCIgKyB0aGlzIG1hcmtlciAoZS5nLlxuICAvLyBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiA9IFwiMiBkYXlzXCIgKyBcIuW+jFwiL1wi5ZCOXCIgPSBcIjIgZGF5cyBsYXRlclwiKS4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIHRoZSAle3RpbWVEZWx0YX0gdGVtcGxhdGVzIGFib3ZlICh3aGljaCBhcmUgYWxzbyB1c2VkIHZlcmJhdGltIGluXG4gIC8vIGF1dG9zdWdnZXN0IGxhYmVscyBhbmQgZG9uJ3Qgc3VwcG9ydCBcInxcIiBhbHRlcm5hdGl2ZXMgdGhlIHNhbWUgd2F5KS5cbiAgLy8gXCLkuYvlvowv5LmL5ZCOXCIgYW5kIFwi5Lul5b6ML+S7peWQjlwiIGFyZSBlcXVhbGx5IGNvbW1vbiBhbHRlcm5hdGl2ZXMgdG8gYmFyZSBcIuW+jC/lkI5cIlxuICAvLyAoZS5nLiBcIjLlpKnkuYvlvoxcIiwgXCIz5YCL5pyI5Lul5b6MXCIpLlxuICBsYXRlcjogXCLlvox85ZCOfOS5i+W+jHzkuYvlkI585Lul5b6MfOS7peWQjlwiLFxuICB0aW1lOiBcIuaZgumWk3zml7bpl7RcIixcbiAgbm93OiBcIuePvuWcqHznjrDlnKhcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfeWIhumQmFwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfeWIhumQmFwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnV0ZTogXCLliIbpkJh85YiG6ZKffOWIhlwiLFxuICBob3VyOiBcIuWwj+aZgnzlsI/ml7Z85pmCfOaXtlwiLFxuICBkYXk6IFwi5aSpfOaXpVwiLFxuICB3ZWVrOiBcIumAsXzlkah85pif5pyffOWAi+aYn+acn3zkuKrmmJ/mnJ9856au5oucfOekvOaLnHzlgIvnpq7mi5x85Liq56S85oucXCIsXG4gIG1vbnRoOiBcIuaciHzlgIvmnIh85Liq5pyIXCIsXG4gIHllYXI6IFwi5bm0XCIsXG4gIGFuZDogXCLlkoxcIixcbiAgYXQ6IFwi5ZyoXCIsXG4gIGZyb206IFwi5b6efOS7jnzoh6pcIixcbiAgdG86IFwi5YiwfOiHs1wiLFxuICBvZjogXCLnmoRcIixcbiAgZmlyc3Q6IFwi56ys5LiAfOesrOS4gOWAi3znrKzkuIDkuKpcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCIvLyBLb3JlYW4gc3VwcG9ydC4gVm9jYWJ1bGFyeSBmb3IgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCB3ZWVrZGF5cyxcbi8vIHRoaXMvbmV4dC9sYXN0LCB0aGUgaG91ci9taW51dGUvZGF5L3dlZWsvbW9udGgveWVhciB1bml0cywgYW5kIHRoZVxuLy8gXCJsYXRlclwiL1wiYWdvc3VmZml4XCIgcmVsYXRpdmUtZXhwcmVzc2lvbiBtYXJrZXJzIGlzIHRha2VuIGRpcmVjdGx5IGZyb21cbi8vIENyZWFtTnV0cycgdHJhbnNsYXRlS29yZWFuVG9FbmdsaXNoKCkgZGljdGlvbmFyeVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9DcmVhbU51dHMvbmxkYXRlcy1vYnNpZGlhbi1rb3JlYW4sIE1JVCksIHNpbmNlIGl0J3Ncbi8vIHZvY2FidWxhcnkgYSByZWFsIEtvcmVhbi1zcGVha2luZyB1c2VyIGJhc2UgaGFzIGFscmVhZHkgYmVlbiB1c2luZy5cbi8vXG4vLyBLb3JlYW4gcGhyYXNlcyBudW1iZXJzIGluIGEgc3VmZml4IHBvc2l0aW9uIChudW1iZXIgKyB1bml0ICsgbWFya2VyLCBlLmcuXG4vLyBcIjPsnbwg7ZuEXCIgPSBcIjMgZGF5c1wiICsgXCLtm4RcIiAoXCJsYXRlclwiKSA9IFwiaW4gMyBkYXlzXCIpLCBub3QgRW5nbGlzaCdzIHByZWZpeFxuLy8gXCJpbiAzIGRheXNcIiAtLSBzbyBpbm1pbnV0ZXMvaW5kYXlzL2V0Yy4gYW5kIGRheXNhZ28vd2Vla3NhZ28vZXRjLiBiZWxvdyBhcmVcbi8vIGJ1aWx0IHN1ZmZpeC1zdHlsZSwgdGhlIHNhbWUgbWVjaGFuaXNtIGFscmVhZHkgdXNlZCBmb3IgQ2hpbmVzZSAoc2VlXG4vLyB6aC50cydzIFwibGF0ZXJcIi9cImFnb3N1ZmZpeFwiIGNvbW1lbnRzKSwgcmF0aGVyIHRoYW4gbWlycm9yaW5nIHRoZSBFbmdsaXNoXG4vLyB0ZW1wbGF0ZSBsaXRlcmFsbHkuXG4vL1xuLy8gVU5WRVJJRklFRDogXCJhbmRcIi9cImF0XCIvXCJmcm9tXCIvXCJ0b1wiL1wib2ZcIiBiZWxvdyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgaW5cbi8vIENyZWFtTnV0cycgZmlsZSAoaGlzIHRyYW5zbGF0b3IgZG9lc24ndCBzdXBwb3J0IGNvbWJpbmVkIGR1cmF0aW9ucyxcbi8vIHdlZWtkYXkrdGltZSwgb3IgZGF0ZSByYW5nZXMpIGFuZCBhcmUgbXkgb3duIGJlc3QtZWZmb3J0IHBpY2tzLCBub3Rcbi8vIGNoZWNrZWQgYnkgYSBLb3JlYW4gc3BlYWtlci4gS29yZWFuIG5vcm1hbGx5IGF0dGFjaGVzIHBhcnRpY2xlcyBsaWtlIOyXkFxuLy8gKFwiYXRcIikv67aA7YSwKFwiZnJvbVwiKS/quYzsp4AoXCJ0b1wiKS/snZgoXCJvZlwiKSBkaXJlY3RseSB0byB0aGUgcHJldmlvdXMgd29yZCB3aXRoXG4vLyBubyBzcGFjZSwgd2hpbGUgdGhpcyBwbHVnaW4ncyByZWdleCBwYXR0ZXJucyByZXF1aXJlIHRoZW0gYXMgYVxuLy8gc3BhY2Utc2VwYXJhdGVkIHN0YW5kYWxvbmUgd29yZCAtLSBzbyBcIm5leHQgTW9uZGF5IGF0IDNwbVwiLSwgXCJmcm9tIE1vbmRheVxuLy8gdG8gRnJpZGF5XCItLCBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiLSwgYW5kIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiLXN0eWxlXG4vLyBjb21iaW5lZCBleHByZXNzaW9ucyBtYXkgbm90IG1hdGNoIG5hdHVyYWwgS29yZWFuIHBocmFzaW5nIGV2ZW4gdGhvdWdoIHRoZVxuLy8gc2ltcGxlIGV4cHJlc3Npb25zIGFib3ZlIGRvLiBUcmFja2VkIGluICM0MC5cbmNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuyYpOuKmFwiLFxuICB0b21vcnJvdzogXCLrgrTsnbxcIixcbiAgeWVzdGVyZGF5OiBcIuyWtOygnFwiLFxuICBuZXh0OiBcIuuLpOydjFwiLFxuICBsYXN0OiBcIuyngOuCnFwiLFxuICB0aGlzOiBcIuydtOuyiFwiLFxuICBpbjogXCLslZ7snLzroZxcIixcbiAgc3VuZGF5OiBcIuydvOyalOydvFwiLFxuICBtb25kYXk6IFwi7JuU7JqU7J28XCIsXG4gIHR1ZXNkYXk6IFwi7ZmU7JqU7J28XCIsXG4gIHdlZG5lc2RheTogXCLsiJjsmpTsnbxcIixcbiAgdGh1cnNkYXk6IFwi66qp7JqU7J28XCIsXG4gIGZyaWRheTogXCLquIjsmpTsnbxcIixcbiAgc2F0dXJkYXk6IFwi7Yag7JqU7J28XCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3rtoQg7ZuEXCIsXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF97Iuc6rCEIO2bhFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF97J28IO2bhFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfeyjvCDtm4RcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF96rCc7JuUIO2bhFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeydvCDsoIRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF97KO8IOyghFwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF96rCc7JuUIOyghFwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeu2hCDsoIRcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF97Iuc6rCEIOyghFwiLFxuICAvLyBTdWZmaXggbWFya2VycyBmb3IgXCJOIHVuaXRcIiArIG1hcmtlciAoZS5nLiBcIjPsnbwg7ZuEXCIgPSBcImluIDMgZGF5c1wiLFxuICAvLyBcIjLso7wg7KCEXCIgPSBcIjIgd2Vla3MgYWdvXCIpIC0tIHZlcmlmaWVkIGFnYWluc3QgQ3JlYW1OdXRzJyBoYW5kbGVOYXRpdmVEYXRlRXhwcmVzc2lvbnMoKS9wcm9jZXNzTnVtYmVyUGF0dGVybigpLlxuICBsYXRlcjogXCLtm4R865KkXCIsXG4gIGFnb3N1ZmZpeDogXCLsoIRcIixcbiAgdGltZTogXCLsi5zqsIRcIixcbiAgbm93OiBcIuyngOq4iFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF967aEXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF967aEXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXRlOiBcIuu2hFwiLFxuICBob3VyOiBcIuyLnOqwhFwiLFxuICBkYXk6IFwi7J28XCIsXG4gIHdlZWs6IFwi7KO8XCIsXG4gIG1vbnRoOiBcIuqwnOyblHzri6xcIixcbiAgeWVhcjogXCLrhYRcIixcbiAgYW5kOiBcIuq3uOumrOqzoFwiLFxuICBhdDogXCLsl5BcIixcbiAgZnJvbTogXCLrtoDthLBcIixcbiAgdG86IFwi6rmM7KeAXCIsXG4gIG9mOiBcIuydmFwiLFxuICBmaXJzdDogXCLssqtcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJpbXBvcnQgaTE4biBmcm9tICdyb2RkZWgtaTE4bic7XG5cbmltcG9ydCBlbiBmcm9tICcuL2VuJztcbmltcG9ydCBqYSBmcm9tICcuL2phJztcbmltcG9ydCBmciBmcm9tICcuL2ZyJztcbmltcG9ydCBwdCBmcm9tICcuL3B0JztcbmltcG9ydCBkZSBmcm9tICcuL2RlJztcbmltcG9ydCBubCBmcm9tICcuL25sJztcbmltcG9ydCBlcyBmcm9tICcuL2VzJztcbmltcG9ydCBpdCBmcm9tICcuL2l0JztcbmltcG9ydCBydSBmcm9tICcuL3J1JztcbmltcG9ydCB1ayBmcm9tICcuL3VrJztcbmltcG9ydCB6aCBmcm9tICcuL3poJztcbmltcG9ydCBrbyBmcm9tICcuL2tvJztcblxuY29uc3Qgbm90Rm91bmREZWZhdWx0ID0gXCJOT1RGT1VORFwiIGFzIGNvbnN0O1xuXG50eXBlIFRyYW5zbGF0b3IgPSAoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbi8vIENhY2hlIGRlcyB0cmFkdWN0ZXVycyBwb3VyIMOpdml0ZXIgZGUgbGVzIHJlY3LDqWVyIMOgIGNoYXF1ZSBhcHBlbFxuLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiB0cmFuc2xhdG9ycyBhcmUgY3JlYXRlZCBvbmNlIGFuZCByZXVzZWRcbmNvbnN0IHRyYW5zbGF0b3JDYWNoZTogUmVjb3JkPHN0cmluZywgVHJhbnNsYXRvcj4gPSB7fTtcblxuLy8gU2hhcGUgc2hhcmVkIGJ5IGV2ZXJ5IGxhbmd1YWdlIGRpY3Q6IHNhbWUga2V5cyBhcyBgZW5gLCBidXQgZWFjaCBsYW5ndWFnZVxuLy8gaGFzIGl0cyBvd24gc3RyaW5nIHZhbHVlcyAobm90IGBlbmAncyBleGFjdCBsaXRlcmFsIHRleHQpIC0tIHVzaW5nXG4vLyBgdHlwZW9mIGVuYCBkaXJlY3RseSBoZXJlIHdvdWxkIGNvbXBhcmUgZXZlcnkgb3RoZXIgbGFuZ3VhZ2UncyB0ZXh0XG4vLyBhZ2FpbnN0IGBlbmAncyBsaXRlcmFsIEVuZ2xpc2ggc3RyaW5ncyBhbmQgYWx3YXlzIGZhaWwuXG50eXBlIExhbmdEaWN0ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgZW5dOiBzdHJpbmcgfTtcblxuLy8gTWFwIGRlcyBtb2R1bGVzIGRlIGxhbmd1ZSBwb3VyIGZhY2lsaXRlciBsJ2FjY8Ooc1xuY29uc3QgbGFuZ3VhZ2VNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBMYW5nRGljdD4gPSB7XG4gIGVuLFxuICBqYSxcbiAgZnIsXG4gIHB0LFxuICBkZSxcbiAgbmwsXG4gIGVzLFxuICBpdCxcbiAgcnUsXG4gIHVrLFxuICAnemguaGFudCc6IHpoLFxuICBrbyxcbn07XG5cbi8qKlxuICogT2J0aWVudCB1biB0cmFkdWN0ZXVyIHBvdXIgdW5lIGxhbmd1ZSBkb25uw6llIChhdmVjIGNhY2hlKVxuICogR2V0cyBhIHRyYW5zbGF0b3IgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgKGNhY2hlZClcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcihsYW5nOiBzdHJpbmcpOiBUcmFuc2xhdG9yIHtcbiAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbbGFuZ10pIHtcbiAgICBjb25zdCBsYW5ndWFnZU1vZHVsZSA9IGxhbmd1YWdlTW9kdWxlc1tsYW5nXTtcbiAgICBpZiAobGFuZ3VhZ2VNb2R1bGUpIHtcbiAgICAgIC8vIHJvZGRlaC1pMThuJ3Mgc2hpcHBlZCB0eXBlcyBkZWNsYXJlIHRoZSAybmQgY2FsbCBhcmd1bWVudCBhc1xuICAgICAgLy8gYG51bWJlciB8IEZvcm1hdHRpbmdDb250ZXh0YCwgYnV0IGl0cyBhY3R1YWwgcnVudGltZSBBUEkgKHVzZWRcbiAgICAgIC8vIHRocm91Z2hvdXQgdGhpcyBmaWxlKSBhbHNvIGFjY2VwdHMgYSBwbGFpbiBzdHJpbmcgZGVmYXVsdCB2YWx1ZSAtLVxuICAgICAgLy8gdGhhdCBvdmVybG9hZCBqdXN0IGlzbid0IHJlZmxlY3RlZCBpbiBpdHMgLmQudHMsIGhlbmNlIHRoZSBjYXN0LlxuICAgICAgdHJhbnNsYXRvckNhY2hlW2xhbmddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGxhbmd1YWdlTW9kdWxlIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuZ2xhaXMgc2kgbGEgbGFuZ3VlIG4nZXN0IHBhcyB0cm91dsOpZVxuICAgICAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbJ2VuJ10pIHtcbiAgICAgICAgdHJhbnNsYXRvckNhY2hlWydlbiddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGVuIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbJ2VuJ107XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbbGFuZ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHQoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IGxhbmdUcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihsYW5nKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSBsYW5nVHJhbnNsYXRvcihrZXksIG5vdEZvdW5kRGVmYXVsdCwgdmFyaWFibGVzKTtcbiAgXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gbm90Rm91bmREZWZhdWx0KSB7XG4gICAgY29uc3QgZW5UcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihcImVuXCIpO1xuICAgIHJldHVybiBlblRyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufSIsImltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYW5kIGNhY2hlcyB0cmFuc2xhdGVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsYW5ndWFnZXMsIGFuZCBidWlsZHNcbiAqIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0uXG4gKlxuICogRXZlcnkgc3VwcG9ydGVkIGxhbmd1YWdlIGNhbiBkZWZpbmUgc2V2ZXJhbCB2YXJpYW50cyBmb3IgdGhlIHNhbWUgY29uY2VwdFxuICogKGUuZy4gRnJlbmNoIFwibmV4dFwiOiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIpLCBhbmQgZXZlcnlcbiAqIGZlYXR1cmUgb2YgdGhlIHBhcnNlciBuZWVkcyB0byBnYXRoZXIgdGhvc2UgdmFyaWFudHMgYWNyb3NzICphbGwqIGFjdGl2ZVxuICogbGFuZ3VhZ2VzIGJlZm9yZSBidWlsZGluZyBhIHJlZ2V4IG91dCBvZiB0aGVtLiBUaGlzIGNsYXNzIGNlbnRyYWxpemVzIHRoYXRcbiAqIFwibG9vayB1cCBhIHRyYW5zbGF0aW9uIGtleSBpbiBldmVyeSBhY3RpdmUgbGFuZ3VhZ2UsIHNwbGl0IG11bHRpLXZhcmlhbnRcbiAqIGVudHJpZXMgb24gJ3wnLCB0cmltLCBkZWR1cGVcIiBwYXR0ZXJuLCB3aGljaCB1c2VkIHRvIGJlIHJlcGVhdGVkIGlubGluZVxuICogcm91Z2hseSBmaWZ0ZWVuIHRpbWVzIHRocm91Z2hvdXQgTkxEUGFyc2VyIChhbmQsIGxlc3MgZXhoYXVzdGl2ZWx5LCBpblxuICogQ29udGV4dEFuYWx5emVyIGFuZCB1dGlscy50cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXM6IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gd2l0aCBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhbmd9OiR7a2V5fWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50cmFuc2xhdGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdChrZXksIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHRyYW5zbGF0ZWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV2ZXJ5IHZhcmlhbnQgb2YgYGtleWAncyB0cmFuc2xhdGlvbiBhY3Jvc3MgYWxsIGFjdGl2ZSBsYW5ndWFnZXMsXG4gICAqIHNwbGl0dGluZyBtdWx0aS12YXJpYW50IGVudHJpZXMgKGUuZy4gXCJhfGJ8Y1wiKSBvbiBcInxcIiwgdHJpbW1pbmcsIGFuZFxuICAgKiBkZS1kdXBsaWNhdGluZy4gRW50cmllcyB0aGF0IGFyZW4ndCBmb3VuZCBmb3IgYSBnaXZlbiBsYW5ndWFnZSBhcmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRyYW5zbGF0aW9uIGtleSAoZS5nLiBcIm5leHRcIiwgXCJtb25kYXlcIiwgXCJpbmRheXNcIilcbiAgICogQHBhcmFtIG9wdGlvbnMubG93ZXJjYXNlIC0gTG93ZXJjYXNlIGVhY2ggdmFyaWFudCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBjb2xsZWN0V29yZHMoa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMudHJhbnNsYXRlKGtleSwgbGFuZyk7XG4gICAgICBpZiAoIXRyYW5zbGF0aW9uIHx8IHRyYW5zbGF0aW9uID09PSBcIk5PVEZPVU5EXCIpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YXJpYW50LnRyaW0oKTtcbiAgICAgICAgLy8gTm8gY3VycmVudCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGVudHJ5IGhhcyBhbiBlbXB0eSBcInx8XCIgc2VnbWVudCBvclxuICAgICAgICAvLyBhIHRyYWlsaW5nL2xlYWRpbmcgXCJ8XCIsIHNvIHRoaXMgZ3VhcmQgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2l0aFxuICAgICAgICAvLyByZWFsIGRhdGEgLS0ga2VwdCBpbiBjYXNlIGEgZnV0dXJlIGRpY3Rpb25hcnkgZW50cnkgaXMgbWFsZm9ybWVkLlxuICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgIHdvcmRzLnB1c2gob3B0aW9ucy5sb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCBhbHRlcm5hdGlvbiAoXCJhfGJ8Y1wiKSBmcm9tIGEgbGlzdCBvZiB3b3JkcywgZXNjYXBpbmcgcmVnZXhcbiAgICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBMb25nZXN0IHdvcmRzIGFyZSBzb3J0ZWQgZmlyc3Q6IG90aGVyd2lzZSBhIHNob3J0ZXIgd29yZCB0aGF0IGlzIGEgcHJlZml4XG4gICAqIG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdFxuICAgKiBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlIG1pcy1jYXB0dXJlZCBieSB3aGF0ZXZlciBjb21lcyBuZXh0XG4gICAqIGluIHRoZSBwYXR0ZXJuLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbih3b3Jkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAubWFwKGVzY2FwZVJlZ2V4KVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZTogY29sbGVjdFdvcmRzKGtleSkgZm9sbG93ZWQgYnkgYnVpbGRBbHRlcm5hdGlvbigpIGluIG9uZSBjYWxsLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbkZvcihrZXk6IHN0cmluZywgb3B0aW9uczogeyBsb3dlcmNhc2U/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRBbHRlcm5hdGlvbih0aGlzLmNvbGxlY3RXb3JkcyhrZXksIG9wdGlvbnMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIEVkaXRvclJhbmdlLCBFZGl0b3JQb3NpdGlvbiwgbm9ybWFsaXplUGF0aCwgVEZpbGUsIE1hcmtkb3duVmlldywgV29ya3NwYWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYWlseU5vdGUsXG4gIGdldEFsbERhaWx5Tm90ZXMsXG4gIGdldERhaWx5Tm90ZSxcbn0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIE1vbWVudCBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFVzaW5nIHRoZSB0eXBlIGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IHR5cGVzIHNpbmNlIG1vbWVudCBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFRoZSBtb21lbnQgcGFja2FnZSBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW4sIGJ1dCB0aGUgTW9tZW50IHR5cGUgaXMgbm90IGV4cG9ydGVkIGZyb20gb2JzaWRpYW4gbW9kdWxlXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmNvbnN0IGRheXNPZldlZWs6IE9taXQ8RGF5T2ZXZWVrLCBcImxvY2FsZS1kZWZhdWx0XCI+W10gPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcjogRWRpdG9yKTogRWRpdG9yUmFuZ2Uge1xuICBjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cbiAgY29uc3QgcG9zID0gZWRpdG9yLnBvc1RvT2Zmc2V0KGN1cnNvcik7XG4gIGNvbnN0IGVkaXRvcldpdGhDTSA9IGVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBzdGF0ZTogeyB3b3JkQXQ6IChwb3M6IG51bWJlcikgPT4geyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSB8IG51bGwgfSB9IH07XG4gIC8vIHdvcmRBdCgpIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW5zaWRlL2FkamFjZW50IHRvIGEgd29yZFxuICAvLyAoZW1wdHkgbGluZSwgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24tb25seSB0ZXh0KSAtLSBmYWxsIGJhY2sgdG8gYVxuICAvLyB6ZXJvLXdpZHRoIHJhbmdlIGF0IHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgY29uc3Qgd29yZCA9IGVkaXRvcldpdGhDTS5jbT8uc3RhdGUud29yZEF0KHBvcyk7XG4gIGlmICghd29yZCkge1xuICAgIHJldHVybiB7IGZyb206IGN1cnNvciwgdG86IGN1cnNvciB9O1xuICB9XG4gIGNvbnN0IHdvcmRTdGFydCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLmZyb20pO1xuICBjb25zdCB3b3JkRW5kID0gZWRpdG9yLm9mZnNldFRvUG9zKHdvcmQudG8pO1xuICByZXR1cm4ge1xuICAgIGZyb206IHdvcmRTdGFydCxcbiAgICB0bzogd29yZEVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkVGV4dChlZGl0b3I6IEVkaXRvcik6IHN0cmluZyB7XG4gIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJpZXMgPSBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3IpO1xuICAgIC8vIFNlbGVjdCB0aGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24gdG8gZW5hYmxlIHRleHQgcmVwbGFjZW1lbnRcbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGRhdGUgcGFyc2luZyBjb21tYW5kcyB0byB3b3JrIGNvcnJlY3RseVxuICAgIGVkaXRvci5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuZnJvbSwgd29yZEJvdW5kYXJpZXMudG8pO1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdEN1cnNvcihcbiAgZWRpdG9yOiBFZGl0b3IsXG4gIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gIG5ld1N0cjogc3RyaW5nLFxuICBvbGRTdHI6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvck9mZnNldCA9IG5ld1N0ci5sZW5ndGggLSBvbGRTdHIubGVuZ3RoO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICBjaDogY3Vyc29yLmNoICsgY3Vyc29yT2Zmc2V0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBsZSBjb2RlIGV4aXN0YW50XG4gKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBEYXRlRm9ybWF0dGVyLmZvcm1hdCgpIGRpcmVjdGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF5T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRydXRoeShmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFtcInlcIiwgXCJ5ZXNcIiwgXCIxXCIsIFwidFwiLCBcInRydWVcIl0uaW5kZXhPZihmbGFnLnRvTG93ZXJDYXNlKCkpID49IDA7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIGZvcm1hdCBNb21lbnQuanMgZXQgcmV0b3VybmUgdW4gcsOpc3VsdGF0IGF2ZWMgcHLDqXZpc3VhbGlzYXRpb25cbiAqIEBwYXJhbSBmb3JtYXQgLSBMZSBmb3JtYXQgTW9tZW50LmpzIMOgIHZhbGlkZXJcbiAqIEByZXR1cm5zIFVuIG9iamV0IGNvbnRlbmFudCB2YWxpZCAoYm9vbMOpZW4pLCBlcnJvciAob3B0aW9ubmVsKSwgcHJldmlldyAob3B0aW9ubmVsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcHJldmlldz86IHN0cmluZyB9IHtcbiAgaWYgKCFmb3JtYXQgfHwgdHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlXCIgfTtcbiAgfVxuXG4gIC8vIExpbWl0ZXIgbGEgbG9uZ3VldXIgZHUgZm9ybWF0IHBvdXIgw6l2aXRlciBsZXMgYXR0YXF1ZXNcbiAgY29uc3QgTUFYX0ZPUk1BVF9MRU5HVEggPSAxMDA7XG4gIGlmIChmb3JtYXQubGVuZ3RoID4gTUFYX0ZPUk1BVF9MRU5HVEgpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBgTGUgZm9ybWF0IG5lIHBldXQgcGFzIGTDqXBhc3NlciAke01BWF9GT1JNQVRfTEVOR1RIfSBjYXJhY3TDqHJlc2AgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVzdERhdGUgPSBtb21lbnQoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0ZXN0RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBcbiAgICAvLyBWw6lyaWZpZXIgcXVlIGxlIGZvcm1hdCBwcm9kdWl0IHF1ZWxxdWUgY2hvc2UgZGUgdmFsaWRlXG4gICAgaWYgKCFmb3JtYXR0ZWQgfHwgZm9ybWF0dGVkID09PSBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFwiRm9ybWF0IGludmFsaWRlIG91IG5vbiByZWNvbm51XCIgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgbmUgY29udGllbnQgcGFzIGRlIGNhcmFjdMOocmVzIGRhbmdlcmV1eFxuICAgIC8vIE1vbWVudC5qcyB1dGlsaXNlIGRlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXgsIG1haXMgb24gdmV1dCDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgLy8gTGVzIGZvcm1hdHMgTW9tZW50LmpzIHZhbGlkZXMgY29udGllbm5lbnQgcHJpbmNpcGFsZW1lbnQgZGVzIGxldHRyZXMsIGNoaWZmcmVzIGV0IGNhcmFjdMOocmVzIGRlIHBvbmN0dWF0aW9uXG4gICAgY29uc3QgZGFuZ2Vyb3VzUGF0dGVybiA9IC9bPD5cIidgXS87XG4gICAgaWYgKGRhbmdlcm91c1BhdHRlcm4udGVzdChmb3JtYXQpKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBjb250aWVudCBkZXMgY2FyYWN0w6hyZXMgbm9uIGF1dG9yaXPDqXNcIiB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcHJldmlldzogZm9ybWF0dGVkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkVycmV1ciBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZHUgZm9ybWF0XCIgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIGV0IHZhbGlkZSB1bmUgZW50csOpZSB1dGlsaXNhdGV1ciBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBpbnB1dCAtIEwnZW50csOpZSDDoCBzYW5pdGl6ZXJcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBMb25ndWV1ciBtYXhpbWFsZSBhdXRvcmlzw6llIChkw6lmYXV0OiAyMDApXG4gKiBAcmV0dXJucyBMJ2VudHLDqWUgc2FuaXRpesOpZSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAyMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyXG4gIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG4gIFxuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJlamV0ZXIgbGVzIGNhcmFjdMOocmVzIGRlIGNvbnRyw7RsZSBldCBsZXMgY2FyYWN0w6hyZXMgc2FucyB1c2FnZSBsw6lnaXRpbWUgZGFucyB1bmVcbiAgLy8gZXhwcmVzc2lvbiBkZSBkYXRlIGVuIGxhbmdhZ2UgbmF0dXJlbCAoZXg6IFwiPFwiLCBcIj5cIiwgXCJgXCIpLiBPbiBuJ3V0aWxpc2UgcGFzIGRlIHdoaXRlbGlzdFxuICAvLyBkZSBzY3JpcHRzIGNhciBsZXMgZGF0ZXMgZW4gbGFuZ2FnZSBuYXR1cmVsIHV0aWxpc2VudCBkZXMgbGV0dHJlcyBkZSB0b3V0ZXMgbGVzIGxhbmd1ZXNcbiAgLy8gc3VwcG9ydMOpZXMgKGxhdGluLCBjeXJpbGxpcXVlLCBqYXBvbmFpcywgY2hpbm9pcy4uLiksIGFpbnNpIHF1ZSBsJ2Fwb3N0cm9waGVcbiAgLy8gKGV4OiBcIkF1am91cmQnaHVpXCIgZW4gZnJhbsOnYWlzLCBcItCfJ9GP0YLQvdC40YbRllwiIGVuIHVrcmFpbmllbikuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIGludGVudGlvbmFsOiB0aGlzIHJhbmdlIGlzIHRoZSBhY3R1YWwgc2FuaXRpemF0aW9uIHRhcmdldCwgbm90IGEgdHlwby5cbiAgY29uc3QgaW52YWxpZENoYXJzUGF0dGVybiA9IC9bPD5gXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXS87XG5cbiAgaWYgKGludmFsaWRDaGFyc1BhdHRlcm4udGVzdCh0cmltbWVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIHBhcmFtw6h0cmUgVVJJIHBvdXIgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICogQHBhcmFtIHBhcmFtIC0gTGUgcGFyYW3DqHRyZSDDoCB2YWxpZGVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMTAwKVxuICogQHJldHVybnMgTGUgcGFyYW3DqHRyZSB2YWxpZMOpIG91IG51bGwgc2kgaW52YWxpZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXJpUGFyYW0ocGFyYW06IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsIG1heExlbmd0aCA9IDEwMCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gc2FuaXRpemVJbnB1dChwYXJhbSwgbWF4TGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF5T2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzT2ZXZWVrLmluZGV4T2YoZGF5T2ZXZWVrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVdlZWtTdGFydCgpOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPiB7XG4gIGNvbnN0IGxvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YSgpIGFzIHsgX3dlZWs/OiB7IGRvdzogbnVtYmVyIH0gfTtcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBsb2NhbGVEYXRhLl93ZWVrPy5kb3cgPz8gMDtcbiAgcmV0dXJuIGRheXNPZldlZWtbc3RhcnRPZldlZWtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsoYXBwOiBBcHAsIHN1YnBhdGg6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmF1bHRXaXRoQ29uZmlnID0gYXBwLnZhdWx0IGFzIHR5cGVvZiBhcHAudmF1bHQgJiB7IGdldENvbmZpZzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH07XG4gIGNvbnN0IHVzZU1hcmtkb3duTGlua3MgPSB2YXVsdFdpdGhDb25maWcuZ2V0Q29uZmlnKFwidXNlTWFya2Rvd25MaW5rc1wiKTtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoc3VicGF0aCk7XG5cbiAgaWYgKHVzZU1hcmtkb3duTGlua3MpIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgWyR7YWxpYXN9XSgke3BhdGgucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbJHtzdWJwYXRofV0oJHtwYXRofSlgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgW1ske3BhdGh9fCR7YWxpYXN9XV1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofV1dYDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRGFpbHlOb3RlKGRhdGU6IE1vbWVudCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG4gIC8vIEJvcnJvd2VkIGZyb20gdGhlIFNsYXRlZCBwbHVnaW46XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90Z3Jvc2luZ2VyL3NsYXRlZC1vYnNpZGlhbi9ibG9iL21haW4vc3JjL3ZhdWx0LnRzI0wxN1xuICBjb25zdCBkZXNpcmVkTm90ZSA9IGdldERhaWx5Tm90ZShkYXRlLCBnZXRBbGxEYWlseU5vdGVzKCkpO1xuICBpZiAoZGVzaXJlZE5vdGUpIHtcbiAgICByZXR1cm4gZGVzaXJlZE5vdGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZURhaWx5Tm90ZShkYXRlKTtcbn1cblxuLy8gU291cmNlIGBjaHJvbm9gOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dhbmFzaXQvY2hyb25vL2Jsb2IvNDdmMTFkYTZiNjU2Y2Q1Y2I2MWYyNDZlOGNjYTcwNjk4MzIwOGRlZC9zcmMvdXRpbHMvcGF0dGVybi50cyNMOFxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LCBXYW5hc2l0IFRhbmFraXRydW5ncnVhbmdcbnR5cGUgRGljdGlvbmFyeUxpa2UgPSBzdHJpbmdbXSB8IHsgW3dvcmQ6IHN0cmluZ106IHVua25vd24gfSB8IE1hcDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBUaGUgQXJyYXkvTWFwIGJyYW5jaGVzIGJlbG93IGFyZSB1bnJlYWNoYWJsZSB3aXRoIHRoaXMgZmlsZSdzIG9ubHkgY2FsbGVyXG4vLyAobWF0Y2hBbnlQYXR0ZXJuKCkgaXMgb25seSBldmVyIGludm9rZWQgd2l0aCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSwgYVxuLy8gcGxhaW4gb2JqZWN0KSAtLSBrZXB0IGJlY2F1c2UgdGhleSdyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbSBjaHJvbm8tbm9kZSdzXG4vLyBtb3JlIGdlbmVyaWNhbGx5LXVzZWQgb3JpZ2luYWwsIG5vdCBiZWNhdXNlIHRoZXkncmUgY3VycmVudGx5IGV4ZXJjaXNlZC5cbmZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgfSBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAga2V5cyA9IEFycmF5LmZyb20oZGljdGlvbmFyeS5rZXlzKCkpO1xuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlMaWtlKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAuam9pbihcInxcIilcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cbiAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuXG5jb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWTogeyBbd29yZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZpcnN0OiAxLFxuICBzZWNvbmQ6IDIsXG4gIHRoaXJkOiAzLFxuICBmb3VydGg6IDQsXG4gIGZpZnRoOiA1LFxuICBzaXh0aDogNixcbiAgc2V2ZW50aDogNyxcbiAgZWlnaHRoOiA4LFxuICBuaW50aDogOSxcbiAgdGVudGg6IDEwLFxuICBlbGV2ZW50aDogMTEsXG4gIHR3ZWxmdGg6IDEyLFxuICB0aGlydGVlbnRoOiAxMyxcbiAgZm91cnRlZW50aDogMTQsXG4gIGZpZnRlZW50aDogMTUsXG4gIHNpeHRlZW50aDogMTYsXG4gIHNldmVudGVlbnRoOiAxNyxcbiAgZWlnaHRlZW50aDogMTgsXG4gIG5pbmV0ZWVudGg6IDE5LFxuICB0d2VudGlldGg6IDIwLFxuICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgXCJ0d2VudHktZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICBcInR3ZW50eSB0aGlyZFwiOiAyMyxcbiAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHktZm91cnRoXCI6IDI0LFxuICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5IHNpeHRoXCI6IDI2LFxuICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHktc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gIFwidHdlbnR5IG5pbnRoXCI6IDI5LFxuICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgdGhpcnRpZXRoOiAzMCxcbiAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gIFwidGhpcnR5LWZpcnN0XCI6IDMxLFxufTtcblxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oXG4gIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZXG4pfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGh8w6htZXzDqG1lfGVyfGV8ZXJ8ZXxcXFxcLik/KWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG9yZGluYWwgc3VmZml4ZXM6IHN0LCBuZCwgcmQsIHRoLCDDqG1lLCBlciwgZSwgYW5kIHRyYWlsaW5nIGRvdFxuICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGh8w6htZXxlcnxlfFxcLikkL2ksIFwiXCIpO1xuICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cblxuLyoqXG4gKiBEw6l0ZXJtaW5lIHNpIHVuZSBleHByZXNzaW9uIHRlbXBvcmVsbGUgcmVsYXRpdmUgY291cnRlIChtaW51dGVzL2hldXJlcykgZGV2cmFpdCBvbWV0dHJlIGxhIGRhdGVcbiAqIGNhciBlbGxlIHJlc3RlIGRhbnMgbGEgbcOqbWUgam91cm7DqWUgKGF1am91cmQnaHVpKVxuICogQHBhcmFtIHRleHQgLSBMZSB0ZXh0ZSBkZSBsJ2V4cHJlc3Npb24gdGVtcG9yZWxsZSAoZXg6IFwiZGFucyAxNSBtaW5cIiwgXCJpbiAyIGhvdXJzXCIsIFwiMzDliIbpkJjlvoxcIilcbiAqIEBwYXJhbSBsYW5ndWFnZXMgLSBMZXMgbGFuZ3VlcyBzdXBwb3J0w6llcyBwb3VyIGTDqXRlY3RlciBsZXMgcGF0dGVybnNcbiAqIEByZXR1cm5zIHRydWUgc2kgYydlc3QgdW5lIGV4cHJlc3Npb24gcmVsYXRpdmUgY291cnRlIHF1aSByZXN0ZSBhdWpvdXJkJ2h1aVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHRleHQ6IHN0cmluZywgbGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlclRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBjb25zdCB0YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuXG4gIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJpblwiKTtcbiAgY29uc3QgbWludXRlUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJtaW51dGVcIik7XG4gIGNvbnN0IGhvdXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImhvdXJcIik7XG4gIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCIpIG1hcmsgXCJsYXRlclwiIGluc3RlYWQgb2ZcbiAgLy8gcHJlZml4aW5nIHdpdGggXCJpblwiOyBzZWUgdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIC8gcGFyc2VyLnRzIGZvciB3aHkgdGhpc1xuICAvLyBpcyBhIHNlcGFyYXRlIGtleSBmcm9tIHRoZSBkYXkvaG91ci9taW51dGUgd29yZCBsaXN0cy5cbiAgY29uc3QgbGF0ZXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImxhdGVyXCIpO1xuXG4gIGNvbnN0IHNob3J0UmVsYXRpdmVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyBtaW51dGUvaG91ciB0b2dldGhlclxuICAvLyB3aXRoIGluL2xhdGVyLCBzbyB0aGUgbmVzdGVkIGBpZiAobWludXRlUGF0dGVybilgL2BpZiAoaG91clBhdHRlcm4pYFxuICAvLyBjaGVja3MgYmVsb3cgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgdGhlaXIgZW5jbG9zaW5nIGBpZmAgaXMgdHJ1ZVxuICAvLyAtLSBubyBjb21iaW5hdGlvbiBvZiByZWFsIChvciB1bmtub3duKSBsYW5ndWFnZSBjb2RlcyBwcm9kdWNlcyBcImluXCIgb3JcbiAgLy8gXCJsYXRlclwiIHdpdGhvdXQgYWxzbyBwcm9kdWNpbmcgXCJtaW51dGVcIiBhbmQgXCJob3VyXCIuIEtlcHQgYXMgYSBndWFyZCBpblxuICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG5cbiAgLy8gUHJlZml4IHN0eWxlOiBcImluIFggbWludXRlc1wiL1wiZGFucyBYIG1pblwiLy4uLlxuICBpZiAoaW5QYXR0ZXJuKSB7XG4gICAgaWYgKG1pbnV0ZVBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF4oPzoke2luUGF0dGVybn0pXFxcXHMrXFxcXGQrXFxcXHMrKD86JHttaW51dGVQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7aG91clBhdHRlcm59KWAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1ZmZpeCBzdHlsZTogXCJYIG1pbnV0ZXNcIiArIFwibGF0ZXJcIiBtYXJrZXIsIGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCJcbiAgaWYgKGxhdGVyUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHttaW51dGVQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgICBpZiAoaG91clBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF5cXFxcZCtcXFxccyooPzoke2hvdXJQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydFJlbGF0aXZlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChsb3dlclRleHQpKTtcbn1cblxuLyoqXG4gKiBPYnRpZW50IGwnw6lkaXRldXIgYWN0aWYgZGUgbWFuacOocmUgZmxleGlibGUsIGNvbXBhdGlibGUgYXZlYyBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2luc1xuICogRXNzYWllIHBsdXNpZXVycyBtw6l0aG9kZXMgcG91ciB0cm91dmVyIGwnw6lkaXRldXIgYWN0aWZcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBMJ2luc3RhbmNlIFdvcmtzcGFjZSBkJ09ic2lkaWFuXG4gKiBAcmV0dXJucyBMJ8OpZGl0ZXVyIGFjdGlmIG91IG51bGwgc2kgYXVjdW4gbidlc3QgdHJvdXbDqVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZTogV29ya3NwYWNlKTogRWRpdG9yIHwgbnVsbCB7XG4gIC8vIE3DqXRob2RlIDE6IFV0aWxpc2VyIGFjdGl2ZUVkaXRvciBzaSBkaXNwb25pYmxlIChPYnNpZGlhbiByw6ljZW50KVxuICBjb25zdCB3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yID0gd29ya3NwYWNlIGFzIHR5cGVvZiB3b3Jrc3BhY2UgJiB7IGFjdGl2ZUVkaXRvcj86IHsgZWRpdG9yPzogRWRpdG9yIH0gfTtcbiAgaWYgKHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yPy5lZGl0b3IpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvci5hY3RpdmVFZGl0b3IuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMjogVXRpbGlzZXIgZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpIChtw6l0aG9kZSBzdGFuZGFyZClcbiAgY29uc3QgYWN0aXZlVmlldyA9IHdvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGlmIChhY3RpdmVWaWV3Py5lZGl0b3IpIHtcbiAgICByZXR1cm4gYWN0aXZlVmlldy5lZGl0b3I7XG4gIH1cblxuICAvLyBNw6l0aG9kZSAzOiBDaGVyY2hlciBkYW5zIHRvdXMgbGVzIGxlYWZzIHBvdXIgdHJvdXZlciB1biDDqWRpdGV1ciBhY3RpZlxuICAvLyBVdGlsZSBwb3VyIFF1aWNrQWRkIGV0IGF1dHJlcyBwbHVnaW5zIHF1aSBjcsOpZW50IGRlcyDDqWRpdGV1cnMgcGVyc29ubmFsaXPDqXNcbiAgY29uc3QgYWN0aXZlTGVhZiA9IHdvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoYWN0aXZlTGVhZikge1xuICAgIGNvbnN0IHZpZXcgPSBhY3RpdmVMZWFmLnZpZXc7XG4gICAgLy8gVsOpcmlmaWVyIHNpIGxhIHZ1ZSBhIHVuIMOpZGl0ZXVyXG4gICAgY29uc3Qgdmlld1dpdGhFZGl0b3IgPSB2aWV3IGFzIHR5cGVvZiB2aWV3ICYgeyBlZGl0b3I/OiBFZGl0b3IgfTtcbiAgICBpZiAodmlld1dpdGhFZGl0b3IuZWRpdG9yKSB7XG4gICAgICByZXR1cm4gdmlld1dpdGhFZGl0b3IuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRob2RlcyA0IGV0IDU6IFBhcmNvdXJpciB0b3VzIGxlcyBsZWFmcyBtYXJrZG93biwgZW4gcHLDqWbDqXJhbnQgY2VsdWkgcXVpXG4gIC8vIGEgbGUgZm9jdXMsIHNpbm9uIGxlIHByZW1pZXIgw6lkaXRldXIgZGlzcG9uaWJsZSBlbiBkZXJuaWVyIHJlY291cnMuXG4gIGxldCBmaXJzdEF2YWlsYWJsZUVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgbGVhZiBvZiB3b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFwibWFya2Rvd25cIikpIHtcbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9ICh2aWV3LmVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBoYXNGb2N1cz86ICgpID0+IGJvb2xlYW4gfSB9KS5jbTtcbiAgICAgIGlmIChlZGl0b3JFbD8uaGFzRm9jdXM/LigpKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGZpcnN0QXZhaWxhYmxlRWRpdG9yID0gZmlyc3RBdmFpbGFibGVFZGl0b3IgPz8gdmlldy5lZGl0b3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpcnN0QXZhaWxhYmxlRWRpdG9yO1xufVxuXG4vLyBFeHRyYWN0cyBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhIGNhdWdodCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuIFBsYWluXG4vLyBgU3RyaW5nKGUpYCBpcyB1bnNhZmUgZm9yIGFyYml0cmFyeSB1bmtub3duIHZhbHVlcyAoYSB0aHJvd24gcGxhaW4gb2JqZWN0XG4vLyB3b3VsZCBzdHJpbmdpZnkgdG8gdGhlIHVzZWxlc3MgXCJbb2JqZWN0IE9iamVjdF1cIiksIGJ1dCBibGFua2V0XG4vLyBgSlNPTi5zdHJpbmdpZnkoZSlgIGlzbid0IHJpZ2h0IGVpdGhlciAtLSBpdCB3b3VsZCB3cmFwIHRocm93biBzdHJpbmdzIGluXG4vLyBsaXRlcmFsIHF1b3RlcywgY2hhbmdpbmcgd2hhdCBhbHJlYWR5LXRocm93bi1zdHJpbmcgY2FsbCBzaXRlcyBsb2cuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgaWYgKHR5cGVvZiBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgLy8gVHdvLWNsaWNrIGNvbmZpcm1hdGlvbiBmb3IgXCJDbGVhciBhbGxcIjogZmlyc3QgY2xpY2sgYXJtcyBpdCwgc2Vjb25kXG4gIC8vIGNsaWNrIChvbiB0aGUgc2FtZSByZW5kZXIpIGFjdHVhbGx5IGNsZWFycyAtLSBhdm9pZHMgd2lwaW5nIHRoZSB3aG9sZVxuICAvLyBoaXN0b3J5IGZyb20gYSBzaW5nbGUgYWNjaWRlbnRhbCBjbGljaywgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBhXG4gIC8vIHNlcGFyYXRlIGNvbmZpcm1hdGlvbiBtb2RhbCBvciBhIHRpbWVvdXQgdG8gcmVzZXQgdGhlIGFybWluZyBzdGF0ZS5cbiAgcHJpdmF0ZSBjbGVhckFsbEFybWVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaGVkIGJlZm9yZSB0b3VjaGluZyB0aGUgRE9NIHNvIHRoZSBtb2RhbCBkb2Vzbid0IGZsYXNoIGFuXG4gICAgLy8gZW1wdHkvaGVhZGVyLW9ubHkgc3RhdGUgd2hpbGUgdGhlIChhc3luYykgaGlzdG9yeSBsb2FkIGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTtcblxuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1oaXN0b3J5LW1hbmFnZXItbW9kYWxcIik7XG5cbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWFuYWdlIHN1Z2dlc3Rpb24gaGlzdG9yeVwiIH0pO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJObyBoaXN0b3J5IHlldC4gU3VnZ2VzdGlvbnMgeW91IHNlbGVjdCBmcm9tIHRoZSBhdXRvc3VnZ2VzdCBwb3B1cCB3aWxsIGFwcGVhciBoZXJlLlwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgIC5zZXROYW1lKFwiQ2xlYXIgYWxsIGhpc3RvcnlcIilcbiAgICAgIC5zZXREZXNjKHRoaXMuY2xlYXJBbGxBcm1lZFxuICAgICAgICA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybSAtLSB0aGlzIGNhbm5vdCBiZSB1bmRvbmUuXCJcbiAgICAgICAgOiBgUmVtb3ZlIGFsbCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzLmApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jbGVhckFsbEFybWVkID8gXCJDbGljayBhZ2FpbiB0byBjb25maXJtXCIgOiBcIkNsZWFyIGFsbFwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgIGJ1dHRvbi5zZXRXYXJuaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5jbGVhckFsbEFybWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuY2xlYXJIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgbGFzdFVzZWRUZXh0ID0gbW9tZW50KGVudHJ5Lmxhc3RVc2VkKS5mcm9tTm93KCk7XG4gICAgICBjb25zdCB0aW1lc1RleHQgPSBlbnRyeS5jb3VudCA9PT0gMSA/IFwiMSB0aW1lXCIgOiBgJHtlbnRyeS5jb3VudH0gdGltZXNgO1xuXG4gICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKGVudHJ5LmRpc3BsYXkpXG4gICAgICAgIC5zZXREZXNjKGBVc2VkICR7dGltZXNUZXh0fSDCtyBsYXN0IHVzZWQgJHtsYXN0VXNlZFRleHR9YClcbiAgICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlbW92ZSB0aGlzIGVudHJ5XCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgc2luZ2xlIGVudHJ5IGlzIGEgZGlmZmVyZW50IGFjdGlvbiBmcm9tIFwiQ2xlYXJcbiAgICAgICAgICAgICAgLy8gYWxsXCIgLS0gZG9uJ3QgbGVhdmUgdGhhdCBidXR0b24gYXJtZWQgZnJvbSBhbiBlYXJsaWVyIGNsaWNrLFxuICAgICAgICAgICAgICAvLyB3aGVyZSBhIGxhdGVyLCB1bnJlbGF0ZWQgXCJDbGVhciBhbGxcIiBjbGljayB3b3VsZCB0aGVuIHdpcGVcbiAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyB3aXRob3V0IHRoZSB1c2VyIHJlLWNvbmZpcm1pbmcgdGhhdCBzcGVjaWZpYyBpbnRlbnQuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZW1vdmVFbnRyeShlbnRyeS5rZXkpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcbmltcG9ydCBIaXN0b3J5TWFuYWdlck1vZGFsIGZyb20gXCIuL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWxcIjtcblxuLyoqXG4gKiBEYXkgb2YgdGhlIHdlZWsgdHlwZSBmb3Igd2VlayBzdGFydCBwcmVmZXJlbmNlLlxuICogQ2FuIGJlIGEgc3BlY2lmaWMgZGF5IG9yIFwibG9jYWxlLWRlZmF1bHRcIiB0byB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gKi9cbmV4cG9ydCB0eXBlIERheU9mV2VlayA9XG4gIHwgXCJzdW5kYXlcIlxuICB8IFwibW9uZGF5XCJcbiAgfCBcInR1ZXNkYXlcIlxuICB8IFwid2VkbmVzZGF5XCJcbiAgfCBcInRodXJzZGF5XCJcbiAgfCBcImZyaWRheVwiXG4gIHwgXCJzYXR1cmRheVwiXG4gIHwgXCJsb2NhbGUtZGVmYXVsdFwiO1xuXG4vKipcbiAqIFBsdWdpbiBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBDb250YWlucyBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTmF0dXJhbCBMYW5ndWFnZSBEYXRlcyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEU2V0dGluZ3Mge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IHN0cmluZztcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHRpbWVGb3JtYXQ6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogRGF5T2ZXZWVrO1xuICBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuXG4gIGVuZ2xpc2g6IGJvb2xlYW47XG4gIGphcGFuZXNlOiBib29sZWFuO1xuICBmcmVuY2g6IGJvb2xlYW47XG4gIGdlcm1hbjogYm9vbGVhbjtcbiAgcG9ydHVndWVzZTogYm9vbGVhbjtcbiAgZHV0Y2g6IGJvb2xlYW47XG4gIHNwYW5pc2g6IGJvb2xlYW47XG4gIGl0YWxpYW46IGJvb2xlYW47XG4gIHJ1c3NpYW46IGJvb2xlYW47XG4gIHVrcmFpbmlhbjogYm9vbGVhbjtcbiAgY2hpbmVzZTogYm9vbGVhbjtcbiAga29yZWFuOiBib29sZWFuO1xuXG4gIG1vZGFsVG9nZ2xlVGltZTogYm9vbGVhbjtcbiAgbW9kYWxUb2dnbGVMaW5rOiBib29sZWFuO1xuICBtb2RhbE1vbWVudEZvcm1hdDogc3RyaW5nO1xuXG4gIC8vIFNtYXJ0IHN1Z2dlc3Rpb25zXG4gIGVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG4gIGVuYWJsZUhpc3RvcnlTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zOiBib29sZWFuO1xuXG4gIC8vIFNtYXJ0IGRhdGUgZm9ybWF0dGluZ1xuICBvbWl0RGF0ZUZvclNob3J0UmVsYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBOTERTZXR0aW5ncyA9IHtcbiAgYXV0b3N1Z2dlc3RUb2dnbGVMaW5rOiB0cnVlLFxuICBhdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlOiBcIkBcIixcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IHRydWUsXG5cbiAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgdGltZUZvcm1hdDogXCJISDptbVwiLFxuICBzZXBhcmF0b3I6IFwiIFwiLFxuICB3ZWVrU3RhcnQ6IFwibG9jYWxlLWRlZmF1bHRcIixcbiAgbGFuZ3VhZ2VzOiBbXCJlblwiXSxcblxuICBlbmdsaXNoOiB0cnVlLCAgLy8gU3luY2hyb25pemVkIHdpdGggbGFuZ3VhZ2VzOiBbXCJlblwiXVxuICBqYXBhbmVzZTogZmFsc2UsXG4gIGZyZW5jaDogZmFsc2UsXG4gIGdlcm1hbjogZmFsc2UsXG4gIHBvcnR1Z3Vlc2U6IGZhbHNlLFxuICBkdXRjaDogZmFsc2UsXG4gIHNwYW5pc2g6IGZhbHNlLFxuICBpdGFsaWFuOiBmYWxzZSxcbiAgcnVzc2lhbjogZmFsc2UsXG4gIHVrcmFpbmlhbjogZmFsc2UsXG4gIGNoaW5lc2U6IGZhbHNlLFxuICBrb3JlYW46IGZhbHNlLFxuXG4gIG1vZGFsVG9nZ2xlVGltZTogZmFsc2UsXG4gIG1vZGFsVG9nZ2xlTGluazogZmFsc2UsXG4gIG1vZGFsTW9tZW50Rm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcblxuICAvLyBTbWFydCBzdWdnZXN0aW9uc1xuICBlbmFibGVTbWFydFN1Z2dlc3Rpb25zOiB0cnVlLFxuICBlbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnM6IHRydWUsXG4gIGVuYWJsZUNvbnRleHRTdWdnZXN0aW9uczogdHJ1ZSxcblxuICAvLyBTbWFydCBkYXRlIGZvcm1hdHRpbmdcbiAgb21pdERhdGVGb3JTaG9ydFJlbGF0aXZlOiB0cnVlLFxufTtcblxuY29uc3Qgd2Vla2RheXMgPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBjbGFzcyBOTERTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuICAgIGNvbnN0IGxvY2FsaXplZFdlZWtkYXlzID0gbW9tZW50LndlZWtkYXlzKCk7XG4gICAgY29uc3QgbG9jYWxlV2Vla1N0YXJ0ID0gZ2V0TG9jYWxlV2Vla1N0YXJ0KCk7XG5cbiAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTmF0dXJhbCBsYW5ndWFnZSBkYXRlc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIlBhcnNlciBzZXR0aW5nc1wiKTtcblxuICAgIGNvbnN0IGRhdGVGb3JtYXRTZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXG4gICAgICAuc2V0RGVzYyhcIk91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlc1wiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodmFsdWUgfHwgXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQgPSB2YWx1ZSB8fCBcIllZWVktTU0tRERcIjtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxhIGRlc2NyaXB0aW9uIGF2ZWMgbGEgcHLDqXZpc3VhbGlzYXRpb24uXG4gICAgICAgICAgICAgIC8vIHZhbGlkYXRlTW9tZW50Rm9ybWF0KCkncyBjb250cmFjdCBndWFyYW50ZWVzIHByZXZpZXcgaXMgc2V0XG4gICAgICAgICAgICAgIC8vIHdoZW5ldmVyIHZhbGlkIGlzIHRydWUsIHNvIHRoZSBcIjogJydcIiBmYWxsYmFjayBiZWxvdyBpc1xuICAgICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSB3aXRoIHJlYWwgZGF0YS5cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWZmaWNoZXIgbCdlcnJldXIgZGFucyBsYSBkZXNjcmlwdGlvbi4gRXZlcnkgaW52YWxpZC1mb3JtYXRcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZyb20gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSBhbHdheXMgc2V0cyBlcnJvciwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIFwiRm9ybWF0IGludmFsaWRlXCIgZmFsbGJhY2sgYmVsb3cgaXMgdW5yZWFjaGFibGUgd2l0aCByZWFsIGRhdGEuXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMgKFByZXZpZXc6ICR7aW5pdGlhbFZhbGlkYXRpb24ucHJldmlld30pYCk7XG4gICAgfVxuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIldlZWsgc3RhcnRzIG9uXCIpXG4gICAgICAuc2V0RGVzYyhcIldoaWNoIGRheSB0byBjb25zaWRlciBhcyB0aGUgc3RhcnQgb2YgdGhlIHdlZWtcIilcbiAgICAgIC5hZGREcm9wZG93bigoZHJvcGRvd24pID0+IHtcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibG9jYWxlLWRlZmF1bHRcIiwgYExvY2FsZSBkZWZhdWx0ICgke1N0cmluZyhsb2NhbGVXZWVrU3RhcnQpfSlgKTtcbiAgICAgICAgbG9jYWxpemVkV2Vla2RheXMuZm9yRWFjaCgoZGF5LCBpKSA9PiB7XG4gICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKHdlZWtkYXlzW2ldLCBkYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgZHJvcGRvd24uc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkcm9wZG93bi5vbkNoYW5nZShhc3luYyAodmFsdWU6IERheU9mV2VlaykgPT4ge1xuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLndlZWtTdGFydCA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTGFuZ3VhZ2Ugc2V0dGluZ3NcIik7XG5cbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJFbmdsaXNoXCIsIFwiZW5nbGlzaFwiLCBcImVuXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkphcGFuZXNlXCIsIFwiamFwYW5lc2VcIiwgXCJqYVwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJGcmVuY2hcIiwgXCJmcmVuY2hcIiwgXCJmclwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJHZXJtYW5cIiwgXCJnZXJtYW5cIiwgXCJkZVwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiUG9ydHVndWVzZVwiLCBcInBvcnR1Z3Vlc2VcIiwgXCJwdFwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiRHV0Y2hcIiwgXCJkdXRjaFwiLCBcIm5sXCIsIFwidW5kZXIgZGV2ZWxvcG1lbnRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiU3BhbmlzaFwiLCBcInNwYW5pc2hcIiwgXCJlc1wiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJJdGFsaWFuXCIsIFwiaXRhbGlhblwiLCBcIml0XCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlJ1c3NpYW5cIiwgXCJydXNzaWFuXCIsIFwicnVcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiVWtyYWluaWFuXCIsIFwidWtyYWluaWFuXCIsIFwidWtcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiQ2hpbmVzZSAoVHJhZGl0aW9uYWwpXCIsIFwiY2hpbmVzZVwiLCBcInpoLmhhbnRcIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIktvcmVhblwiLCBcImtvcmVhblwiLCBcImtvXCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkhvdGtleSBmb3JtYXR0aW5nIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgdGltZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiVGltZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZVwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiSEg6bW1cIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0ID0gdmFsdWUgfHwgXCJISDptbVwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbiAoc2VlXG4gICAgICAgICAgICAgIC8vIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlOiB0aGUgXCI6ICcnXCIgZmFsbGJhY2sgaGVyZSBpc1xuICAgICAgICAgICAgICAvLyBzaW1pbGFybHkgdW5yZWFjaGFibGUgZ2l2ZW4gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0KS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSR7dmFsaWRhdGVkLnByZXZpZXcgPyBgIChQcmV2aWV3OiAke3ZhbGlkYXRlZC5wcmV2aWV3fSlgIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb24gKHVucmVhY2hhYmxlIGZhbGxiYWNrLFxuICAgICAgICAgICAgICAvLyBzYW1lIHJlYXNvbmluZyBhcyB0aGUgZGF0ZS1mb3JtYXQgc2V0dGluZyBhYm92ZSkuXG4gICAgICAgICAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgLSDimqDvuI8gJHt2YWxpZGF0ZWQuZXJyb3IgfHwgXCJGb3JtYXQgaW52YWxpZGVcIn1gKTtcbiAgICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVGltZVZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lIChQcmV2aWV3OiAke2luaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiU2VwYXJhdG9yXCIpXG4gICAgICAuc2V0RGVzYyhcIlNlcGFyYXRvciBiZXR3ZWVuIGRhdGUgYW5kIHRpbWUgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJvdGhcIilcbiAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiU2VwYXJhdG9yIGlzIGVtcHR5XCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvcilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiRGF0ZSBhdXRvc3VnZ2VzdFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgZGF0ZSBhdXRvc3VnZ2VzdFwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIGBJbnB1dCBkYXRlcyB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UuIE9wZW4gdGhlIHN1Z2dlc3QgbWVudSB3aXRoICR7dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZX1gXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiQWRkIGRhdGVzIGFzIGxpbms/XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJJZiBlbmFibGVkLCBkYXRlcyBjcmVhdGVkIHZpYSBhdXRvc3VnZ2VzdCB3aWxsIGJlIHdyYXBwZWQgaW4gW1t3aWtpbGlua3NdXVwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmspXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VEZXNjID0gXCJDaGFyYWN0ZXIocykgdGhhdCB3aWxsIGNhdXNlIHRoZSBkYXRlIGF1dG9zdWdnZXN0IHRvIG9wZW5cIjtcbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlU2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUcmlnZ2VyIHBocmFzZVwiKVxuICAgICAgLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKERFRkFVTFRfU0VUVElOR1MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSlcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKHRyaWdnZXJQaHJhc2VEZXNjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFuIGVtcHR5IHRyaWdnZXIgcGhyYXNlIG1ha2VzIG9uVHJpZ2dlcigpJ3NcbiAgICAgICAgICAgICAgLy8gcXVlcnkuc3RhcnRzV2l0aCh0cmlnZ2VyUGhyYXNlKSBhbHdheXMgdHJ1ZSwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIGF1dG9zdWdnZXN0IHBvcHVwIHdvdWxkIGZpcmUgb24gdmlydHVhbGx5IGV2ZXJ5IGtleXN0cm9rZS5cbiAgICAgICAgICAgICAgLy8gUmVmdXNlIHRvIHNhdmUgaXQsIG1hdGNoaW5nIHRoZSBEYXRlL1RpbWUgZm9ybWF0IGZpZWxkcyBhYm92ZS5cbiAgICAgICAgICAgICAgdHJpZ2dlclBocmFzZVNldHRpbmcuc2V0RGVzYyhgJHt0cmlnZ2VyUGhyYXNlRGVzY30gLSDimqDvuI8gVHJpZ2dlciBwaHJhc2UgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJTbWFydCBzdWdnZXN0aW9uc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgc21hcnQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkVuYWJsZSBpbnRlbGxpZ2VudCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIHVzYWdlIGhpc3RvcnkgYW5kIGRvY3VtZW50IGNvbnRleHRcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlU21hcnRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJIaXN0b3J5LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJMZWFybiBmcm9tIHlvdXIgZnJlcXVlbnRseSB1c2VkIGRhdGUgcGF0dGVybnMgYW5kIHByaW9yaXRpemUgdGhlbSBpbiBzdWdnZXN0aW9uc1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJDb250ZXh0LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJTdWdnZXN0IGRhdGVzIGJhc2VkIG9uIGRhdGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJNYW5hZ2UgaGlzdG9yeVwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiVmlldyB5b3VyIHN1Z2dlc3Rpb24gaGlzdG9yeSBhbmQgcmVtb3ZlIGluZGl2aWR1YWwgZW50cmllcywgb3IgY2xlYXIgaXQgZW50aXJlbHlcIlxuICAgICAgKVxuICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PlxuICAgICAgICBidXR0b25cbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgbmV3IEhpc3RvcnlNYW5hZ2VyTW9kYWwodGhpcy5hcHAsIHRoaXMucGx1Z2luKS5vcGVuKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGZvcm1hdHRpbmdcIik7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiT21pdCBkYXRlIGZvciBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiV2hlbiBlbmFibGVkLCBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9ucyBmb3IgdG9kYXkgKGUuZy4sICdpbiAxNSBtaW4nLCAnZGFucyAyIGhldXJlcycpIHdpbGwgZGlzcGxheSBvbmx5IHRoZSB0aW1lIChlLmcuLCAnMTQ6MzAnKSBpbnN0ZWFkIG9mICdbWzIwMjQtMDEtMTVdXSAxNDozMCdcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgdGV4dDogc3RyaW5nLCBzZXR0aW5nS2V5OiBrZXlvZiBOTERTZXR0aW5ncywgY29kZTogc3RyaW5nLCBub3RlPzogc3RyaW5nKSA6IFNldHRpbmcge1xuICAgIG5vdGUgPSBub3RlID8gYCAoJHtub3RlfSlgIDogXCJcIjtcbiAgICByZXR1cm4gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZSh0ZXh0KVxuICAgICAgLnNldERlc2MoYFdoZXRoZXIgdG8gcGFyc2UgJHt0ZXh0fSBvciBub3RgICsgbm90ZSlcbiAgICAgIC5hZGRUb2dnbGUobCA9PlxuICAgICAgICBsXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldIGFzIGJvb2xlYW4pXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2KSA9PiB7XG4gICAgICAgICAgICAodGhpcy5wbHVnaW4uc2V0dGluZ3Nbc2V0dGluZ0tleV0gYXMgYm9vbGVhbikgPSB2O1xuICAgICAgICAgICAgdGhpcy5lZGl0TGFuZ3VhZ2VzKGNvZGUsIHYpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZXNldFBhcnNlcigpO1xuICAgICAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGl0TGFuZ3VhZ2VzKGNvZGU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMucHVzaChjb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuaW5kZXhPZihjb2RlKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGdlbmVyYXRlTWFya2Rvd25MaW5rLCBnZXRMb2NhbGVXZWVrU3RhcnQsIHZhbGlkYXRlTW9tZW50Rm9ybWF0LCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgeyBERUZBVUxUX1NFVFRJTkdTIH0gZnJvbSBcIi4uL3NldHRpbmdzXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi4vbGFuZy9oZWxwZXJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4uL3dpbmRvdy1tb21lbnRcIjtcblxudHlwZSBNb21lbnQgPSBpbXBvcnQoXCJtb21lbnRcIikuTW9tZW50O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlUGlja2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgc2VsZWN0ZWREYXRlOiBNb21lbnQ7XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBNb21lbnQ7XG4gIHByaXZhdGUgY2FsZW5kYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWlja0J1dHRvbnNFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aWV3RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGF0ZUlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBwcml2YXRlIHRoZW1lT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZERhdGVGbjogKChkYXRlOiBNb21lbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbW9tZW50KCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBtb21lbnQoKTtcbiAgICAvLyBEw6l0ZWN0ZXIgbGUgbW9kZSBzb21icmVcbiAgICB0aGlzLmlzRGFya01vZGUgPSBhY3RpdmVEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIik7XG4gIH1cblxuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhdGUtcGlja2VyLW1vZGFsXCIpO1xuXG4gICAgLy8gQWpvdXRlciBsZXMgc3R5bGVzIHBvdXIgbGUgbW9kZSBzb21icmVcbiAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICBjb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgIH1cblxuICAgIGxldCBtb21lbnRGb3JtYXQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICBsZXQgaW5zZXJ0QXNMaW5rID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rO1xuICAgIGxldCBkYXRlSW5wdXQgPSBcIlwiO1xuXG4gICAgY29uc3QgZ2V0RGF0ZVN0ciA9ICgpID0+IHtcbiAgICAgIGxldCBjbGVhbkRhdGVJbnB1dCA9IGRhdGVJbnB1dDtcbiAgICAgIGxldCBzaG91bGRJbmNsdWRlQWxpYXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGRhdGVJbnB1dC5lbmRzV2l0aChcInxcIikpIHtcbiAgICAgICAgc2hvdWxkSW5jbHVkZUFsaWFzID0gdHJ1ZTtcbiAgICAgICAgY2xlYW5EYXRlSW5wdXQgPSBkYXRlSW5wdXQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICAvLyBVdGlsaXNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llIGRhbnMgbGUgY2FsZW5kcmllciBzaSBkaXNwb25pYmxlXG4gICAgICBjb25zdCBkYXRlVG9QYXJzZSA9IGNsZWFuRGF0ZUlucHV0IHx8IHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKGRhdGVUb1BhcnNlKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICAgIGNvbnN0IGZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgY29uc3QgZm9ybWF0VG9Vc2UgPSBmb3JtYXRWYWxpZGF0aW9uLnZhbGlkID8gbW9tZW50Rm9ybWF0IDogREVGQVVMVF9TRVRUSU5HUy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICAgIFxuICAgICAgbGV0IHBhcnNlZERhdGVTdHJpbmcgPSBwYXJzZWREYXRlLm1vbWVudC5pc1ZhbGlkKClcbiAgICAgICAgPyBwYXJzZWREYXRlLm1vbWVudC5mb3JtYXQoZm9ybWF0VG9Vc2UpXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgaWYgKGluc2VydEFzTGluaykge1xuICAgICAgICBwYXJzZWREYXRlU3RyaW5nID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgcGFyc2VkRGF0ZVN0cmluZyxcbiAgICAgICAgICBzaG91bGRJbmNsdWRlQWxpYXMgPyBjbGVhbkRhdGVJbnB1dCA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkRGF0ZVN0cmluZztcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlUHJldmlldyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXZpZXdFbCkge1xuICAgICAgICB0aGlzLnByZXZpZXdFbC5zZXRUZXh0KGdldERhdGVTdHIoKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHN5bmNJbnB1dCBjb250cm9scyB3aGV0aGVyIHRoZSByYXcgdGV4dCBmaWVsZCBnZXRzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAvLyB0aGUgZm9ybWF0dGVkIGRhdGUuIENhbGVuZGFyIGNsaWNrcy9xdWljayBidXR0b25zL2tleWJvYXJkIG5hdiB3YW50XG4gICAgLy8gdGhhdCAoaXQncyBob3cgdGhlIGZpZWxkIHJlZmxlY3RzIHRoZSBzZWxlY3Rpb24pLCBidXQgdGhlIGZpZWxkJ3Mgb3duXG4gICAgLy8gb25DaGFuZ2UgaGFuZGxlciBtdXN0IE5PVCBzeW5jIGl0c2VsZiB3aGlsZSB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmdcbiAgICAvLyBpbnRvIGl0IC0tIGdldERhdGVTdHIoKS91cGRhdGVQcmV2aWV3KCkgYWxyZWFkeSBzaG93IGEgbGl2ZSBwcmV2aWV3XG4gICAgLy8gb2YgdGhlIHBhcnNlZCByZXN1bHQgc2VwYXJhdGVseSwgd2l0aG91dCB0b3VjaGluZyB3aGF0J3MgYmVpbmcgdHlwZWQuXG4gICAgY29uc3QgdXBkYXRlU2VsZWN0ZWREYXRlID0gKGRhdGU6IE1vbWVudCwgc3luY0lucHV0ID0gdHJ1ZSkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICBpZiAoc3luY0lucHV0ICYmIHRoaXMuZGF0ZUlucHV0RWwpIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRFbC52YWx1ZSA9IGRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZVByZXZpZXcoKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICB9O1xuXG4gICAgLy8gU3RvY2tlciBsYSBmb25jdGlvbiBwb3VyIHF1J2VsbGUgc29pdCBhY2Nlc3NpYmxlIGRlcHVpcyByZW5kZXJDYWxlbmRhclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4gPSB1cGRhdGVTZWxlY3RlZERhdGU7XG5cbiAgICAvLyBDb250YWluZXIgcHJpbmNpcGFsXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdihcIm5sZC1kYXRlLXBpY2tlci1jb250YWluZXJcIik7XG5cbiAgICAvLyBTZWN0aW9uIGRlcyBib3V0b25zIHJhcGlkZXNcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1xdWljay1idXR0b25zXCIpO1xuICAgIHRoaXMucmVuZGVyUXVpY2tCdXR0b25zKHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG5cbiAgICAvLyBTZWN0aW9uIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBjYWxlbmRhclNlY3Rpb24gPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLXNlY3Rpb25cIik7XG4gICAgXG4gICAgLy8gTmF2aWdhdGlvbiBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgbmF2RWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLW5hdlwiKTtcbiAgICBjb25zdCBwcmV2TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC5XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgcHLDqWPDqWRlbnRcIiB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgbW9udGhZZWFyRWwgPSBuYXZFbC5jcmVhdGVEaXYoXCJubGQtbW9udGgteWVhclwiKTtcbiAgICBcbiAgICBjb25zdCBuZXh0TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC6XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgc3VpdmFudFwiIH1cbiAgICB9KTtcblxuICAgIHByZXZNb250aEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICBuZXh0TW9udGhCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIC8vIFPDqWxlY3RldXIgZCdhbm7DqWUgKGRyb3Bkb3duKVxuICAgIGNvbnN0IHllYXJTZWxlY3QgPSBuYXZFbC5jcmVhdGVFbChcInNlbGVjdFwiLCB7IGNsczogXCJubGQteWVhci1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IHRoaXMuY3VycmVudE1vbnRoLnllYXIoKTtcbiAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSAxMDsgeWVhciA8PSBjdXJyZW50WWVhciArIDEwOyB5ZWFyKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHllYXJTZWxlY3QuY3JlYXRlRWwoXCJvcHRpb25cIiwgeyB0ZXh0OiBTdHJpbmcoeWVhciksIHZhbHVlOiBTdHJpbmcoeWVhcikgfSk7XG4gICAgICBpZiAoeWVhciA9PT0gY3VycmVudFllYXIpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgeWVhclNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLnllYXIocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgLy8gU8OpbGVjdGV1ciBkZSBtb2lzIChkcm9wZG93bilcbiAgICBjb25zdCBtb250aFNlbGVjdCA9IG5hdkVsLmNyZWF0ZUVsKFwic2VsZWN0XCIsIHsgY2xzOiBcIm5sZC1tb250aC1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gbW9tZW50Lm1vbnRocygpO1xuICAgIG1vbnRoTmFtZXMuZm9yRWFjaCgobW9udGgsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBtb250aFNlbGVjdC5jcmVhdGVFbChcIm9wdGlvblwiLCB7IHRleHQ6IG1vbnRoLCB2YWx1ZTogU3RyaW5nKGluZGV4KSB9KTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5jdXJyZW50TW9udGgubW9udGgoKSkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1vbnRoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgdGhpcy5jdXJyZW50TW9udGgubW9udGgocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcblxuICAgIC8vIENhbGVuZHJpZXJcbiAgICB0aGlzLmNhbGVuZGFyRWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyXCIpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcblxuICAgIC8vIFNlY3Rpb24gZGUgc2Fpc2llIG1hbnVlbGxlXG4gICAgY29uc3QgaW5wdXRTZWN0aW9uID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1pbnB1dC1zZWN0aW9uXCIpO1xuICAgIGNvbnN0IGRhdGVJbnB1dEVsID0gbmV3IFNldHRpbmcoaW5wdXRTZWN0aW9uKVxuICAgICAgLnNldE5hbWUoXCJEYXRlXCIpXG4gICAgICAuc2V0RGVzYyhcIlwiKVxuICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICB0ZXh0RWwuc2V0UGxhY2Vob2xkZXIoXCJUb2RheVwiKTtcbiAgICAgICAgdGV4dEVsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEVsID0gdGV4dEVsLmlucHV0RWw7XG5cbiAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRhdGVJbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUocGFyc2VkLm1vbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRleHRFbC5pbnB1dEVsLmZvY3VzKCksIDEwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucHJldmlld0VsID0gZGF0ZUlucHV0RWwuZGVzY0VsO1xuICAgIHVwZGF0ZVByZXZpZXcoKTtcblxuICAgIC8vIE9wdGlvbnMgZGUgZm9ybWF0XG4gICAgY29uc3QgZm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGlucHV0U2VjdGlvbilcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KChtb21lbnRFbCkgPT4ge1xuICAgICAgICBtb21lbnRFbC5zZXRQbGFjZWhvbGRlcihcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgIG1vbWVudEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgbW9tZW50Rm9ybWF0ID0gdmFsdWUudHJpbSgpIHx8IFwiWVlZWS1NTS1ERCBISDptbVwiO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQgPSBtb21lbnRGb3JtYXQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvblxuICAgICAgICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkFkZCBhcyBsaW5rP1wiKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlRWwpID0+IHtcbiAgICAgICAgdG9nZ2xlRWwuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBc0xpbmsgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbFRvZ2dsZUxpbmsgPSBpbnNlcnRBc0xpbms7XG4gICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBCb3V0b25zIGQnYWN0aW9uXG4gICAgaW5wdXRTZWN0aW9uLmNyZWF0ZURpdihcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIiwgKGJ1dHRvbkNvbnRhaW5lckVsKSA9PiB7XG4gICAgICBidXR0b25Db250YWluZXJFbFxuICAgICAgICAuY3JlYXRlRWwoXCJidXR0b25cIiwgeyBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSwgdGV4dDogXCJOZXZlciBtaW5kXCIgfSlcbiAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgY2xzOiBcIm1vZC1jdGFcIixcbiAgICAgICAgdGV4dDogXCJJbnNlcnQgZGF0ZVwiLFxuICAgICAgfSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnREYXRlKGdldERhdGVTdHIoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJhY2NvdXJjaXMgY2xhdmllclxuICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXIocHJldk1vbnRoQnRuLCBuZXh0TW9udGhCdG4sIHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5jb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZEhhbmRsZXIpO1xuXG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIHRow6htZVxuICAgIHRoaXMuc2V0dXBUaGVtZU9ic2VydmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclF1aWNrQnV0dG9ucyh1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucXVpY2tCdXR0b25zRWwpIHJldHVybjtcblxuICAgIHRoaXMucXVpY2tCdXR0b25zRWwuZW1wdHkoKTtcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdih7IGNsczogXCJubGQtcXVpY2stYnV0dG9ucy1sYWJlbFwiLCB0ZXh0OiBcIlF1aWNrIHNlbGVjdDpcIiB9KTtcblxuICAgIGNvbnN0IHByaW1hcnlMYW5nID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8IFwiZW5cIjtcbiAgICBcbiAgICAvLyBGb25jdGlvbiBoZWxwZXIgcG91ciBvYnRlbmlyIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBkJ3VuZSB0cmFkdWN0aW9uXG4gICAgY29uc3QgZ2V0Rmlyc3RWYXJpYW50ID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdChrZXksIHByaW1hcnlMYW5nKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbiA9PT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgICAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBzaSBwbHVzaWV1cnMgKHPDqXBhcsOpZXMgcGFyIHwpXG4gICAgICByZXR1cm4gdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpWzBdLnRyaW0oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcXVpY2tPcHRpb25zID0gW1xuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwidG9tb3Jyb3dcIiksIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwieWVzdGVyZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJ3ZWVrXCIpfWAsIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcIndlZWtcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwibW9udGhcIil9YCwgXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwibW9udGhcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwieWVhclwiKX1gLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ5ZWFyXCIpIFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IHRoaXMucXVpY2tCdXR0b25zRWwuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnMtZ3JpZFwiKTtcblxuICAgIHF1aWNrT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvbnNDb250YWluZXIuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBjbHM6IFwibmxkLXF1aWNrLWJ0blwiLFxuICAgICAgICB0ZXh0OiBvcHRpb24ubGFiZWwsXG4gICAgICB9KTtcblxuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZShvcHRpb24ubW9tZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBvcHRpb24ubW9tZW50LmNsb25lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJFbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWxlbmRhckVsLmVtcHR5KCk7XG5cbiAgICAvLyBFbi10w6p0ZXMgZGVzIGpvdXJzIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQgPT09IFwibG9jYWxlLWRlZmF1bHRcIlxuICAgICAgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKVxuICAgICAgOiB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQ7XG4gICAgXG4gICAgY29uc3Qgd2Vla1N0YXJ0SW5kZXggPSB3ZWVrU3RhcnQgPT09IFwic3VuZGF5XCIgPyAwIDogMTtcbiAgICBjb25zdCB3ZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5c1Nob3J0KCk7XG4gICAgY29uc3Qgb3JkZXJlZFdlZWtkYXlzID0gW1xuICAgICAgLi4ud2Vla2RheXMuc2xpY2Uod2Vla1N0YXJ0SW5kZXgpLFxuICAgICAgLi4ud2Vla2RheXMuc2xpY2UoMCwgd2Vla1N0YXJ0SW5kZXgpLFxuICAgIF07XG5cbiAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLmNhbGVuZGFyRWwuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWhlYWRlclwiKTtcbiAgICBvcmRlcmVkV2Vla2RheXMuZm9yRWFjaCgoZGF5KSA9PiB7XG4gICAgICBjb25zdCBkYXlIZWFkZXIgPSBoZWFkZXJSb3cuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheS1oZWFkZXJcIik7XG4gICAgICBkYXlIZWFkZXIuc2V0VGV4dChkYXkpO1xuICAgIH0pO1xuXG4gICAgLy8gR3JpbGxlIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBncmlkID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1ncmlkXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5jdXJyZW50TW9udGguY2xvbmUoKS5zdGFydE9mKFwibW9udGhcIik7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuZW5kT2YoXCJtb250aFwiKTtcbiAgICBcbiAgICAvLyBDYWxjdWxlciBsZSBkw6lidXQgZGUgbGEgc2VtYWluZSBzZWxvbiBsZXMgcHLDqWbDqXJlbmNlc1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0T2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IHN0YXJ0RGF0ZS5kYXkoKTtcbiAgICBjb25zdCBkaWZmID0gZGF5T2ZXZWVrIC0gd2Vla1N0YXJ0SW5kZXg7XG4gICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICBzdGFydERhdGUuc3VidHJhY3QoNyArIGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGEgZmluIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCBlbmREYXRlID0gZW5kT2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERheU9mV2VlayA9IGVuZERhdGUuZGF5KCk7XG4gICAgY29uc3QgZW5kRGlmZiA9ICg2ICsgd2Vla1N0YXJ0SW5kZXggLSBlbmREYXlPZldlZWspICUgNztcbiAgICBpZiAoZW5kRGlmZiA+IDApIHtcbiAgICAgIGVuZERhdGUuYWRkKGVuZERpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG5cbiAgICB3aGlsZSAoY3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgIC8vIENhcHR1cmVyIGxhIGRhdGUgYWN0dWVsbGUgZGFucyB1bmUgdmFyaWFibGUgbG9jYWxlIHBvdXIgw6l2aXRlciBsZXMgcHJvYmzDqG1lcyBkZSBjbG9zdXJlXG4gICAgICBjb25zdCBkYXRlRm9yVGhpc0RheSA9IGN1cnJlbnREYXRlLmNsb25lKCk7XG4gICAgICBjb25zdCBkYXlFbCA9IGdyaWQuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheVwiKTtcbiAgICAgIGNvbnN0IGRheU51bWJlciA9IGRhdGVGb3JUaGlzRGF5LmRhdGUoKTtcblxuICAgICAgLy8gU3R5bGUgc2Vsb24gbGUgdHlwZSBkZSBqb3VyXG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRvZGF5LCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC10b2RheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5zZWxlY3RlZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLXNlbGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5jdXJyZW50TW9udGgsIFwibW9udGhcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtb3RoZXItbW9udGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRheU51bWJlckVsID0gZGF5RWwuY3JlYXRlRGl2KFwibmxkLWRheS1udW1iZXJcIik7XG4gICAgICBkYXlOdW1iZXJFbC5zZXRUZXh0KFN0cmluZyhkYXlOdW1iZXIpKTtcblxuICAgICAgLy8gw4l2w6luZW1lbnQgZGUgY2xpY1xuICAgICAgZGF5RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKGRhdGVGb3JUaGlzRGF5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGN1cnJlbnREYXRlLmFkZCgxLCBcImRheVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbW9udGhZZWFyRWwuZW1wdHkoKTtcbiAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJNTU1NXCIpO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJZWVlZXCIpO1xuICAgIGNvbnN0IG1vbnRoU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBtb250aFNwYW4uc2V0VGV4dChtb250aE5hbWUpO1xuICAgIGNvbnN0IHNwYWNlU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBzcGFjZVNwYW4uc2V0VGV4dChcIiBcIik7XG4gICAgY29uc3QgeWVhclNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgeWVhclNwYW4uc2V0VGV4dCh5ZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKFxuICAgIHByZXZNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgbmV4dE1vbnRoQnRuOiBIVE1MRWxlbWVudCxcbiAgICB1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWRcbiAgKTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gw4l2aXRlciBsZXMgcmFjY291cmNpcyBzaSBvbiBlc3QgZGFucyB1biBpbnB1dFxuICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHByZXZNb250aEJ0bi5jbGljaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBuZXh0TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUobW9tZW50KCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRoZW1lT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGNsYXNzZSBwb3VyIGTDqXRlY3RlciBsZSBjaGFuZ2VtZW50IGRlIHRow6htZVxuICAgIHRoaXMudGhlbWVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0RhcmtNb2RlID0gdGhpcy5pc0RhcmtNb2RlO1xuICAgICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuXG4gICAgICBpZiAod2FzRGFya01vZGUgIT09IHRoaXMuaXNEYXJrTW9kZSAmJiB0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUNsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVtZU9ic2VydmVyLm9ic2VydmUoYWN0aXZlRG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydERhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGFjdGl2ZUVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKGRhdGVTdHIpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcblxuICAgIC8vIE5ldHRveWVyIGxlcyBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5rZXlib2FyZEhhbmRsZXIpIHtcbiAgICAgIGNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV0dG95ZXIgbCdvYnNlcnZlciBkZSB0aMOobWVcbiAgICBpZiAodGhpcy50aGVtZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy50aGVtZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgTWVyaWRpZW07XG4oZnVuY3Rpb24gKE1lcmlkaWVtKSB7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJBTVwiXSA9IDBdID0gXCJBTVwiO1xuICAgIE1lcmlkaWVtW01lcmlkaWVtW1wiUE1cIl0gPSAxXSA9IFwiUE1cIjtcbn0pKE1lcmlkaWVtIHx8IChNZXJpZGllbSA9IHt9KSk7XG5leHBvcnQgdmFyIFdlZWtkYXk7XG4oZnVuY3Rpb24gKFdlZWtkYXkpIHtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTVU5EQVlcIl0gPSAwXSA9IFwiU1VOREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiTU9OREFZXCJdID0gMV0gPSBcIk1PTkRBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRVRVNEQVlcIl0gPSAyXSA9IFwiVFVFU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIldFRE5FU0RBWVwiXSA9IDNdID0gXCJXRURORVNEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJUSFVSU0RBWVwiXSA9IDRdID0gXCJUSFVSU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIkZSSURBWVwiXSA9IDVdID0gXCJGUklEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTQVRVUkRBWVwiXSA9IDZdID0gXCJTQVRVUkRBWVwiO1xufSkoV2Vla2RheSB8fCAoV2Vla2RheSA9IHt9KSk7XG5leHBvcnQgdmFyIE1vbnRoO1xuKGZ1bmN0aW9uIChNb250aCkge1xuICAgIE1vbnRoW01vbnRoW1wiSkFOVUFSWVwiXSA9IDFdID0gXCJKQU5VQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJGRUJSVUFSWVwiXSA9IDJdID0gXCJGRUJSVUFSWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiTUFSQ0hcIl0gPSAzXSA9IFwiTUFSQ0hcIjtcbiAgICBNb250aFtNb250aFtcIkFQUklMXCJdID0gNF0gPSBcIkFQUklMXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVlcIl0gPSA1XSA9IFwiTUFZXCI7XG4gICAgTW9udGhbTW9udGhbXCJKVU5FXCJdID0gNl0gPSBcIkpVTkVcIjtcbiAgICBNb250aFtNb250aFtcIkpVTFlcIl0gPSA3XSA9IFwiSlVMWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVVHVVNUXCJdID0gOF0gPSBcIkFVR1VTVFwiO1xuICAgIE1vbnRoW01vbnRoW1wiU0VQVEVNQkVSXCJdID0gOV0gPSBcIlNFUFRFTUJFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiT0NUT0JFUlwiXSA9IDEwXSA9IFwiT0NUT0JFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiTk9WRU1CRVJcIl0gPSAxMV0gPSBcIk5PVkVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJERUNFTUJFUlwiXSA9IDEyXSA9IFwiREVDRU1CRVJcIjtcbn0pKE1vbnRoIHx8IChNb250aCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibW9udGhcIiwgdGFyZ2V0LmdldE1vbnRoKCkgKyAxKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCB0YXJnZXQuZ2V0SG91cnMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0YXJnZXQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5pbXBseShcInllYXJcIiwgdGFyZ2V0LmdldEZ1bGxZZWFyKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGFyZ2V0LmdldE1pbnV0ZXMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgdGFyZ2V0LmdldEhvdXJzKCkgPCAxMiA/IE1lcmlkaWVtLkFNIDogTWVyaWRpZW0uUE0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZXMuanMubWFwIiwiaW1wb3J0IHsgV2Vla2RheSwgTW9udGggfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFRJTUVaT05FX0FCQlJfTUFQID0ge1xuICAgIEFDRFQ6IDYzMCxcbiAgICBBQ1NUOiA1NzAsXG4gICAgQURUOiAtMTgwLFxuICAgIEFFRFQ6IDY2MCxcbiAgICBBRVNUOiA2MDAsXG4gICAgQUZUOiAyNzAsXG4gICAgQUtEVDogLTQ4MCxcbiAgICBBS1NUOiAtNTQwLFxuICAgIEFMTVQ6IDM2MCxcbiAgICBBTVNUOiAtMTgwLFxuICAgIEFNVDogLTI0MCxcbiAgICBBTkFTVDogNzIwLFxuICAgIEFOQVQ6IDcyMCxcbiAgICBBUVRUOiAzMDAsXG4gICAgQVJUOiAtMTgwLFxuICAgIEFTVDogLTI0MCxcbiAgICBBV0RUOiA1NDAsXG4gICAgQVdTVDogNDgwLFxuICAgIEFaT1NUOiAwLFxuICAgIEFaT1Q6IC02MCxcbiAgICBBWlNUOiAzMDAsXG4gICAgQVpUOiAyNDAsXG4gICAgQk5UOiA0ODAsXG4gICAgQk9UOiAtMjQwLFxuICAgIEJSU1Q6IC0xMjAsXG4gICAgQlJUOiAtMTgwLFxuICAgIEJTVDogNjAsXG4gICAgQlRUOiAzNjAsXG4gICAgQ0FTVDogNDgwLFxuICAgIENBVDogMTIwLFxuICAgIENDVDogMzkwLFxuICAgIENEVDogLTMwMCxcbiAgICBDRVNUOiAxMjAsXG4gICAgQ0VUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAyICogNjAsXG4gICAgICAgIHRpbWV6b25lT2Zmc2V0Tm9uRHN0OiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIE1vbnRoLk9DVE9CRVIsIFdlZWtkYXkuU1VOREFZLCAzKSxcbiAgICB9LFxuICAgIENIQURUOiA4MjUsXG4gICAgQ0hBU1Q6IDc2NSxcbiAgICBDS1Q6IC02MDAsXG4gICAgQ0xTVDogLTE4MCxcbiAgICBDTFQ6IC0yNDAsXG4gICAgQ09UOiAtMzAwLFxuICAgIENTVDogLTM2MCxcbiAgICBDVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTUgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC02ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIENWVDogLTYwLFxuICAgIENYVDogNDIwLFxuICAgIENoU1Q6IDYwMCxcbiAgICBEQVZUOiA0MjAsXG4gICAgRUFTU1Q6IC0zMDAsXG4gICAgRUFTVDogLTM2MCxcbiAgICBFQVQ6IDE4MCxcbiAgICBFQ1Q6IC0zMDAsXG4gICAgRURUOiAtMjQwLFxuICAgIEVFU1Q6IDE4MCxcbiAgICBFRVQ6IDEyMCxcbiAgICBFR1NUOiAwLFxuICAgIEVHVDogLTYwLFxuICAgIEVTVDogLTMwMCxcbiAgICBFVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTQgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC01ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIEZKU1Q6IDc4MCxcbiAgICBGSlQ6IDcyMCxcbiAgICBGS1NUOiAtMTgwLFxuICAgIEZLVDogLTI0MCxcbiAgICBGTlQ6IC0xMjAsXG4gICAgR0FMVDogLTM2MCxcbiAgICBHQU1UOiAtNTQwLFxuICAgIEdFVDogMjQwLFxuICAgIEdGVDogLTE4MCxcbiAgICBHSUxUOiA3MjAsXG4gICAgR01UOiAwLFxuICAgIEdTVDogMjQwLFxuICAgIEdZVDogLTI0MCxcbiAgICBIQUE6IC0xODAsXG4gICAgSEFDOiAtMzAwLFxuICAgIEhBRFQ6IC01NDAsXG4gICAgSEFFOiAtMjQwLFxuICAgIEhBUDogLTQyMCxcbiAgICBIQVI6IC0zNjAsXG4gICAgSEFTVDogLTYwMCxcbiAgICBIQVQ6IC05MCxcbiAgICBIQVk6IC00ODAsXG4gICAgSEtUOiA0ODAsXG4gICAgSExWOiAtMjEwLFxuICAgIEhOQTogLTI0MCxcbiAgICBITkM6IC0zNjAsXG4gICAgSE5FOiAtMzAwLFxuICAgIEhOUDogLTQ4MCxcbiAgICBITlI6IC00MjAsXG4gICAgSE5UOiAtMTUwLFxuICAgIEhOWTogLTU0MCxcbiAgICBIT1ZUOiA0MjAsXG4gICAgSUNUOiA0MjAsXG4gICAgSURUOiAxODAsXG4gICAgSU9UOiAzNjAsXG4gICAgSVJEVDogMjcwLFxuICAgIElSS1NUOiA1NDAsXG4gICAgSVJLVDogNTQwLFxuICAgIElSU1Q6IDIxMCxcbiAgICBJU1Q6IDMzMCxcbiAgICBKU1Q6IDU0MCxcbiAgICBLR1Q6IDM2MCxcbiAgICBLUkFTVDogNDgwLFxuICAgIEtSQVQ6IDQ4MCxcbiAgICBLU1Q6IDU0MCxcbiAgICBLVVlUOiAyNDAsXG4gICAgTEhEVDogNjYwLFxuICAgIExIU1Q6IDYzMCxcbiAgICBMSU5UOiA4NDAsXG4gICAgTUFHU1Q6IDcyMCxcbiAgICBNQUdUOiA3MjAsXG4gICAgTUFSVDogLTUxMCxcbiAgICBNQVdUOiAzMDAsXG4gICAgTURUOiAtMzYwLFxuICAgIE1FU1o6IDEyMCxcbiAgICBNRVo6IDYwLFxuICAgIE1IVDogNzIwLFxuICAgIE1NVDogMzkwLFxuICAgIE1TRDogMjQwLFxuICAgIE1TSzogMTgwLFxuICAgIE1TVDogLTQyMCxcbiAgICBNVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTYgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC03ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIE1VVDogMjQwLFxuICAgIE1WVDogMzAwLFxuICAgIE1ZVDogNDgwLFxuICAgIE5DVDogNjYwLFxuICAgIE5EVDogLTkwLFxuICAgIE5GVDogNjkwLFxuICAgIE5PVlNUOiA0MjAsXG4gICAgTk9WVDogMzYwLFxuICAgIE5QVDogMzQ1LFxuICAgIE5TVDogLTE1MCxcbiAgICBOVVQ6IC02NjAsXG4gICAgTlpEVDogNzgwLFxuICAgIE5aU1Q6IDcyMCxcbiAgICBPTVNTVDogNDIwLFxuICAgIE9NU1Q6IDQyMCxcbiAgICBQRFQ6IC00MjAsXG4gICAgUEVUOiAtMzAwLFxuICAgIFBFVFNUOiA3MjAsXG4gICAgUEVUVDogNzIwLFxuICAgIFBHVDogNjAwLFxuICAgIFBIT1Q6IDc4MCxcbiAgICBQSFQ6IDQ4MCxcbiAgICBQS1Q6IDMwMCxcbiAgICBQTURUOiAtMTIwLFxuICAgIFBNU1Q6IC0xODAsXG4gICAgUE9OVDogNjYwLFxuICAgIFBTVDogLTQ4MCxcbiAgICBQVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTcgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC04ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIFBXVDogNTQwLFxuICAgIFBZU1Q6IC0xODAsXG4gICAgUFlUOiAtMjQwLFxuICAgIFJFVDogMjQwLFxuICAgIFNBTVQ6IDI0MCxcbiAgICBTQVNUOiAxMjAsXG4gICAgU0JUOiA2NjAsXG4gICAgU0NUOiAyNDAsXG4gICAgU0dUOiA0ODAsXG4gICAgU1JUOiAtMTgwLFxuICAgIFNTVDogLTY2MCxcbiAgICBUQUhUOiAtNjAwLFxuICAgIFRGVDogMzAwLFxuICAgIFRKVDogMzAwLFxuICAgIFRLVDogNzgwLFxuICAgIFRMVDogNTQwLFxuICAgIFRNVDogMzAwLFxuICAgIFRWVDogNzIwLFxuICAgIFVMQVQ6IDQ4MCxcbiAgICBVVEM6IDAsXG4gICAgVVlTVDogLTEyMCxcbiAgICBVWVQ6IC0xODAsXG4gICAgVVpUOiAzMDAsXG4gICAgVkVUOiAtMjEwLFxuICAgIFZMQVNUOiA2NjAsXG4gICAgVkxBVDogNjYwLFxuICAgIFZVVDogNjYwLFxuICAgIFdBU1Q6IDEyMCxcbiAgICBXQVQ6IDYwLFxuICAgIFdFU1Q6IDYwLFxuICAgIFdFU1o6IDYwLFxuICAgIFdFVDogMCxcbiAgICBXRVo6IDAsXG4gICAgV0ZUOiA3MjAsXG4gICAgV0dTVDogLTEyMCxcbiAgICBXR1Q6IC0xODAsXG4gICAgV0lCOiA0MjAsXG4gICAgV0lUOiA1NDAsXG4gICAgV0lUQTogNDgwLFxuICAgIFdTVDogNzgwLFxuICAgIFdUOiAwLFxuICAgIFlBS1NUOiA2MDAsXG4gICAgWUFLVDogNjAwLFxuICAgIFlBUFQ6IDYwMCxcbiAgICBZRUtTVDogMzYwLFxuICAgIFlFS1Q6IDM2MCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgbW9udGgsIHdlZWtkYXksIG4sIGhvdXIgPSAwKSB7XG4gICAgbGV0IGRheU9mTW9udGggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgZGF5T2ZNb250aCsrO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT09IHdlZWtkYXkpXG4gICAgICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgsIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgaG91ciA9IDApIHtcbiAgICBjb25zdCBvbmVJbmRleGVkV2Vla2RheSA9IHdlZWtkYXkgPT09IDAgPyA3IDogd2Vla2RheTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxICsgMSwgMSwgMTIpO1xuICAgIGNvbnN0IGZpcnN0V2Vla2RheU5leHRNb250aCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgPyA3IDogZGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZGF5RGlmZjtcbiAgICBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoID09PSBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDc7XG4gICAgZWxzZSBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoIDwgb25lSW5kZXhlZFdlZWtkYXkpXG4gICAgICAgIGRheURpZmYgPSA3ICsgZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZWxzZVxuICAgICAgICBkYXlEaWZmID0gZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5RGlmZik7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZS5nZXREYXRlKCksIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGltZXpvbmVPZmZzZXQodGltZXpvbmVJbnB1dCwgZGF0ZSwgdGltZXpvbmVPdmVycmlkZXMgPSB7fSkge1xuICAgIGlmICh0aW1lem9uZUlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZXpvbmVJbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGltZXpvbmVJbnB1dDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFRpbWV6b25lID0gdGltZXpvbmVPdmVycmlkZXNbdGltZXpvbmVJbnB1dF0gPz8gVElNRVpPTkVfQUJCUl9NQVBbdGltZXpvbmVJbnB1dF07XG4gICAgaWYgKG1hdGNoZWRUaW1lem9uZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1hdGNoZWRUaW1lem9uZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmU7XG4gICAgfVxuICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdFN0YXJ0KGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYgIShkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdEVuZChkYXRlLmdldEZ1bGxZZWFyKCkpKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0Tm9uRHN0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXpvbmUuanMubWFwIiwiZXhwb3J0IGNvbnN0IEVtcHR5RHVyYXRpb24gPSB7XG4gICAgZGF5OiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gYWRkRHVyYXRpb24ocmVmLCBkdXJhdGlvbikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmKTtcbiAgICBpZiAoZHVyYXRpb25bXCJ5XCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wieWVhclwiXSA9IGR1cmF0aW9uW1wieVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wieVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibW9cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wibW9cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1vXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJNXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibW9udGhcIl0gPSBkdXJhdGlvbltcIk1cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIk1cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIndcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ3ZWVrXCJdID0gZHVyYXRpb25bXCJ3XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ3XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJkXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiZGF5XCJdID0gZHVyYXRpb25bXCJkXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJkXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJoXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiaG91clwiXSA9IGR1cmF0aW9uW1wiaFwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiaFwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibVwiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbnV0ZVwiXSA9IGR1cmF0aW9uW1wibVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wic1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcInNlY29uZFwiXSA9IGR1cmF0aW9uW1wic1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wic1wiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibXNcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtaWxsaXNlY29uZFwiXSA9IGR1cmF0aW9uW1wibXNcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1zXCJdO1xuICAgIH1cbiAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wieWVhclwiXSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wieWVhclwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IGR1cmF0aW9uPy5tb250aCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubW9udGggKz0gcmVtYWluaW5nRnJhY3Rpb24gKiAxMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJxdWFydGVyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wicXVhcnRlclwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IgKiAzKTtcbiAgICB9XG4gICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJtb250aFwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibW9udGhcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IGR1cmF0aW9uPy53ZWVrID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrICs9IHJlbWFpbmluZ0ZyYWN0aW9uICogNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJ3ZWVrXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wid2Vla1wiXSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGZsb29yICogNyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ3ZWVrXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IGR1cmF0aW9uPy5kYXkgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wiZGF5XCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wiZGF5XCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBkdXJhdGlvbj8uaG91ciA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogMjQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJob3VyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJob3VyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IGR1cmF0aW9uPy5taW51dGUgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbnV0ZVwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbnV0ZVwiXSk7XG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIm1pbnV0ZVwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBkdXJhdGlvbj8uc2Vjb25kID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDYwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJzZWNvbmRcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgPSBkdXJhdGlvbj8ubWlsbGlzZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAxMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIGZsb29yKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgcmV2ZXJzZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkdXJhdGlvbikge1xuICAgICAgICByZXZlcnNlZFtrZXldID0gLWR1cmF0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXZlcnNlZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4vdGltZXpvbmUuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uLCBFbXB0eUR1cmF0aW9uIH0gZnJvbSBcIi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VXaXRoVGltZXpvbmUge1xuICAgIGluc3RhbnQ7XG4gICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgY29uc3RydWN0b3IoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW50ID0gaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVPZmZzZXQgPz8gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb21EYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoZGF0ZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQsIHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbnQgPSBpbnB1dD8uaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IHRvVGltZXpvbmVPZmZzZXQoaW5wdXQ/LnRpbWV6b25lLCBpbnN0YW50LCB0aW1lem9uZU92ZXJyaWRlcyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVmZXJlbmNlV2l0aFRpbWV6b25lKGluc3RhbnQsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICB9XG4gICAgZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5pbnN0YW50KTtcbiAgICAgICAgaWYgKHRoaXMudGltZXpvbmVPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIHRoaXMuZ2V0U3lzdGVtVGltZXpvbmVBZGp1c3RtZW50TWludXRlKHRoaXMuaW5zdGFudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBnZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgb3ZlcnJpZGVUaW1lem9uZU9mZnNldCkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWV6b25lT2Zmc2V0ID0gb3ZlcnJpZGVUaW1lem9uZU9mZnNldCA/PyB0aGlzLnRpbWV6b25lT2Zmc2V0ID8/IGN1cnJlbnRUaW1lem9uZU9mZnNldDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lem9uZU9mZnNldCAtIHRhcmdldFRpbWV6b25lT2Zmc2V0O1xuICAgIH1cbiAgICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZXpvbmVPZmZzZXQgPz8gLXRoaXMuaW5zdGFudC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAga25vd25WYWx1ZXM7XG4gICAgaW1wbGllZFZhbHVlcztcbiAgICByZWZlcmVuY2U7XG4gICAgX3RhZ3MgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGlmIChrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMua25vd25WYWx1ZXNba2V5XSA9IGtub3duQ29tcG9uZW50c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSwgZHVyYXRpb24gPSBFbXB0eUR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBkYXRlID0gYWRkRHVyYXRpb24ocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLCBkdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlXCIpO1xuICAgICAgICBpZiAoXCJob3VyXCIgaW4gZHVyYXRpb24gfHwgXCJtaW51dGVcIiBpbiBkdXJhdGlvbiB8fCBcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWlsbGlzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlQW5kVGltZVwiKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJUaW1lKGNvbXBvbmVudHMsIGRhdGUpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHJlZmVyZW5jZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGdldChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQ2VydGFpbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzO1xuICAgIH1cbiAgICBnZXRDZXJ0YWluQ29tcG9uZW50cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMua25vd25WYWx1ZXMpO1xuICAgIH1cbiAgICBpbXBseShjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzc2lnbihjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGREdXJhdGlvbkFzSW1wbGllZChkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVdpdGhvdXRUaW1lem9uZUFkanVzdG1lbnQoKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGN1cnJlbnREYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIGlmIChcImRheVwiIGluIGR1cmF0aW9uIHx8IFwid2Vla1wiIGluIGR1cmF0aW9uIHx8IFwibW9udGhcIiBpbiBkdXJhdGlvbiB8fCBcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoW1wiZGF5XCIsIFwid2Vla2RheVwiLCBcIm1vbnRoXCIsIFwieWVhclwiXSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbY29tcG9uZW50c107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzID0ge307XG4gICAgICAgIGNvbXBvbmVudC5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5rbm93blZhbHVlc1trZXldID0gdGhpcy5rbm93blZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW1wbGllZFZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXNba2V5XSA9IHRoaXMuaW1wbGllZFZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGlzT25seURhdGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0NlcnRhaW4oXCJob3VyXCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1pbnV0ZVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJzZWNvbmRcIik7XG4gICAgfVxuICAgIGlzT25seVRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKSk7XG4gICAgfVxuICAgIGlzT25seVdlZWtkYXlDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIndlZWtkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwiZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBpc0RhdGVXaXRoVW5rbm93blllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInllYXJcIik7XG4gICAgfVxuICAgIGlzVmFsaWREYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0aGlzLmdldChcInllYXJcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuZ2V0KFwibW9udGhcIikgLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuZ2V0KFwiZGF5XCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJob3VyXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRIb3VycygpICE9IHRoaXMuZ2V0KFwiaG91clwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KFwibWludXRlXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRNaW51dGVzKCkgIT0gdGhpcy5nZXQoXCJtaW51dGVcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ0NvbXBvbmVudHMge1xuICAgICAgICAgICAgdGFnczogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuX3RhZ3MpLnNvcnQoKSl9LCBcbiAgICAgICAgICAgIGtub3duVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMua25vd25WYWx1ZXMpfSwgXG4gICAgICAgICAgICBpbXBsaWVkVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW1wbGllZFZhbHVlcyl9fSwgXG4gICAgICAgICAgICByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UpfV1gO1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZUFkanVzdG1lbnQgPSB0aGlzLnJlZmVyZW5jZS5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgdGhpcy5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lQWRqdXN0bWVudCAqIDYwMDAwKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuX3RhZ3MpO1xuICAgIH1cbiAgICBkYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ2V0KFwieWVhclwiKSwgdGhpcy5nZXQoXCJtb250aFwiKSAtIDEsIHRoaXMuZ2V0KFwiZGF5XCIpLCB0aGlzLmdldChcImhvdXJcIiksIHRoaXMuZ2V0KFwibWludXRlXCIpLCB0aGlzLmdldChcInNlY29uZFwiKSwgdGhpcy5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5nZXQoXCJ5ZWFyXCIpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdSZXN1bHQge1xuICAgIHJlZkRhdGU7XG4gICAgaW5kZXg7XG4gICAgdGV4dDtcbiAgICByZWZlcmVuY2U7XG4gICAgc3RhcnQ7XG4gICAgZW5kO1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMucmVmRGF0ZSA9IHJlZmVyZW5jZS5pbnN0YW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgdGhpcy5pbmRleCwgdGhpcy50ZXh0KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5zdGFydCA/IHRoaXMuc3RhcnQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0aGlzLmVuZCA/IHRoaXMuZW5kLmNsb25lKCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kYXRlKCk7XG4gICAgfVxuICAgIGFkZFRhZyh0YWcpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWcodGFnKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWcodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMuc3RhcnQuYWRkVGFncyh0YWdzKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0YWdzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFRhZ3MgPSBuZXcgU2V0KHRoaXMuc3RhcnQudGFncygpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0aGlzLmVuZC50YWdzKCkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkVGFncztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHRoaXMudGFncygpKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiBgW1BhcnNpbmdSZXN1bHQge2luZGV4OiAke3RoaXMuaW5kZXh9LCB0ZXh0OiAnJHt0aGlzLnRleHR9JywgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX0gLi4ufV1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3VsdHMuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKHByZWZpeCwgc2luZ2xlVGltZXVuaXRQYXR0ZXJuLCBjb25uZWN0b3JQYXR0ZXJuID0gXCJcXFxcc3swLDV9LD9cXFxcc3swLDV9XCIpIHtcbiAgICBjb25zdCBzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmUgPSBzaW5nbGVUaW1ldW5pdFBhdHRlcm4ucmVwbGFjZSgvXFwoKD8hXFw/KS9nLCBcIig/OlwiKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSg/OiR7Y29ubmVjdG9yUGF0dGVybn0ke3NpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZX0pezAsMTB9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeSkge1xuICAgIGxldCBrZXlzO1xuICAgIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBrZXlzID0gQXJyYXkuZnJvbShkaWN0aW9uYXJ5LmtleXMoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgIC5qb2luKFwifFwiKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJpbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcikge1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kWWVhckNsb3Nlc3RUb1JlZihyZWZEYXRlLCBkYXksIG1vbnRoKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICBkYXRlLnNldE1vbnRoKG1vbnRoIC0gMSk7XG4gICAgZGF0ZS5zZXREYXRlKGRheSk7XG4gICAgY29uc3QgbmV4dFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAxIH0pO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gYWRkRHVyYXRpb24oZGF0ZSwgeyBcInllYXJcIjogLTEgfSk7XG4gICAgaWYgKE1hdGguYWJzKG5leHRZZWFyLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSA8IE1hdGguYWJzKGRhdGUuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGUgPSBuZXh0WWVhcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMobGFzdFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IGxhc3RZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eWVhcnMuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBzdW5kYXk6IDAsXG4gICAgc3VuOiAwLFxuICAgIFwic3VuLlwiOiAwLFxuICAgIG1vbmRheTogMSxcbiAgICBtb246IDEsXG4gICAgXCJtb24uXCI6IDEsXG4gICAgdHVlc2RheTogMixcbiAgICB0dWU6IDIsXG4gICAgXCJ0dWUuXCI6IDIsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHdlZDogMyxcbiAgICBcIndlZC5cIjogMyxcbiAgICB0aHVyc2RheTogNCxcbiAgICB0aHVyczogNCxcbiAgICBcInRodXJzLlwiOiA0LFxuICAgIHRodXI6IDQsXG4gICAgXCJ0aHVyLlwiOiA0LFxuICAgIHRodTogNCxcbiAgICBcInRodS5cIjogNCxcbiAgICBmcmlkYXk6IDUsXG4gICAgZnJpOiA1LFxuICAgIFwiZnJpLlwiOiA1LFxuICAgIHNhdHVyZGF5OiA2LFxuICAgIHNhdDogNixcbiAgICBcInNhdC5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyeTogMSxcbiAgICBmZWJydWFyeTogMixcbiAgICBtYXJjaDogMyxcbiAgICBhcHJpbDogNCxcbiAgICBtYXk6IDUsXG4gICAganVuZTogNixcbiAgICBqdWx5OiA3LFxuICAgIGF1Z3VzdDogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgb2N0b2JlcjogMTAsXG4gICAgbm92ZW1iZXI6IDExLFxuICAgIGRlY2VtYmVyOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9jdDogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIG5vdjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBvbmU6IDEsXG4gICAgdHdvOiAyLFxuICAgIHRocmVlOiAzLFxuICAgIGZvdXI6IDQsXG4gICAgZml2ZTogNSxcbiAgICBzaXg6IDYsXG4gICAgc2V2ZW46IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgbmluZTogOSxcbiAgICB0ZW46IDEwLFxuICAgIGVsZXZlbjogMTEsXG4gICAgdHdlbHZlOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZmlyc3Q6IDEsXG4gICAgc2Vjb25kOiAyLFxuICAgIHRoaXJkOiAzLFxuICAgIGZvdXJ0aDogNCxcbiAgICBmaWZ0aDogNSxcbiAgICBzaXh0aDogNixcbiAgICBzZXZlbnRoOiA3LFxuICAgIGVpZ2h0aDogOCxcbiAgICBuaW50aDogOSxcbiAgICB0ZW50aDogMTAsXG4gICAgZWxldmVudGg6IDExLFxuICAgIHR3ZWxmdGg6IDEyLFxuICAgIHRoaXJ0ZWVudGg6IDEzLFxuICAgIGZvdXJ0ZWVudGg6IDE0LFxuICAgIGZpZnRlZW50aDogMTUsXG4gICAgc2l4dGVlbnRoOiAxNixcbiAgICBzZXZlbnRlZW50aDogMTcsXG4gICAgZWlnaHRlZW50aDogMTgsXG4gICAgbmluZXRlZW50aDogMTksXG4gICAgdHdlbnRpZXRoOiAyMCxcbiAgICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eS1maXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICAgIFwidHdlbnR5IHRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eS1mb3VydGhcIjogMjQsXG4gICAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHkgc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgICBcInR3ZW50eS1zZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gICAgXCJ0d2VudHkgbmludGhcIjogMjksXG4gICAgXCJ0d2VudHktbmludGhcIjogMjksXG4gICAgXCJ0aGlydGlldGhcIjogMzAsXG4gICAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gICAgXCJ0aGlydHktZmlyc3RcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIgPSB7XG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdlZWtzOiBcIndlZWtcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHM6IFwic2Vjb25kXCIsXG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG06IFwibWludXRlXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGQ6IFwiZGF5XCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgdzogXCJ3ZWVrXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vOiBcIm1vbnRoXCIsXG4gICAgbW9uOiBcIm1vbnRoXCIsXG4gICAgbW9zOiBcIm1vbnRoXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBxdHI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5OiBcInllYXJcIixcbiAgICB5cjogXCJ5ZWFyXCIsXG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIC4uLlRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGYoPzpcXFxcc3swLDJ9YW4/KT98YW4/XFxcXGIoPzpcXFxcc3swLDJ9ZmV3KT98ZmV3fHNldmVyYWx8dGhlfGE/XFxcXHN7MCwyfWNvdXBsZVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiYVwiIHx8IG51bSA9PT0gXCJhblwiIHx8IG51bSA9PSBcInRoZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2Zldy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGYvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2NvdXBsZS8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3NldmVyYWwvKSkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRoKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRoKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzezAsMn0oPzpCRXxBRHxCQ3xCQ0V8Q0UpfFsxLTldWzAtOV17M318WzUtOV1bMC05XXwyWzAtNV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIpfSlgO1xuY29uc3QgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOID0gYFxcXFxzezAsNX0sPyg/OlxcXFxzKmFuZCk/XFxcXHN7MCw1fWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYWdtZW50cykubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eW2EtekEtWl0rJC8pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJQYXR0ZXJuKGNvbnRleHQpICE9PSBjdXJyZW50SW5uZXJQYXR0ZXJuO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChcXFxcV3xeKWA7XG4gICAgfVxuICAgIGNhY2hlZElubmVyUGF0dGVybiA9IG51bGw7XG4gICAgY2FjaGVkUGF0dGVybiA9IG51bGw7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZElubmVyUGF0dGVybikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCB0aGlzLmNhY2hlZElubmVyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuID0gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7dGhpcy5wYXR0ZXJuTGVmdEJvdW5kYXJ5KCl9JHt0aGlzLmNhY2hlZElubmVyUGF0dGVybi5zb3VyY2V9YCwgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4uZmxhZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG1hdGNoWzFdID8/IFwiXCI7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBoZWFkZXIubGVuZ3RoO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF0Y2hbaSAtIDFdID0gbWF0Y2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OndpdGhpbnxpbnxmb3IpXFxcXHMqKT9gICtcbiAgICBgKD86KD86YWJvdXR8YXJvdW5kfHJvdWdobHl8YXBwcm94aW1hdGVseXxqdXN0KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1QgPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlID8gUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA6IFBBVFRFUk5fV0lUSF9QUkVGSVg7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15mb3JcXHMqdGhlXFxzKlxcdysvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86dG98XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGwpP1xcXFxzezAsM31gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBgKD86LXwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVxcXFx3KSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKD8hXFxcXHMqKD86YW18cG0pKVxcXFxzKmAgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86dG98XFxcXC0pXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98XFxcXHMqLFxcXFxzKnxcXFxccyspYCArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIGNvbnN0cnVjdG9yKHNob3VsZFNraXBZZWFyTGlrZURhdGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlID0gc2hvdWxkU2tpcFllYXJMaWtlRGF0ZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSAmJiAhbWF0Y2hbWUVBUl9HUk9VUF0gJiYgbWF0Y2hbREFURV9HUk9VUF0ubWF0Y2goL14yWzAtNV0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dFxuICAgICAgICAgICAgLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlclwiKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgKD86LHwtfG9mKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hZGRUYWcoXCJwYXJzZXIvRU5Nb250aE5hbWVQYXJzZXJcIik7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pWy1cXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyID0gc3RyaWN0TW9udGhEYXRlT3JkZXI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGxldCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRheSA+PSAxICYmIGRheSA8PSAxMikge1xuICAgICAgICAgICAgICAgIFttb250aCwgZGF5XSA9IFtkYXksIG1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5mdW5jdGlvbiBwcmltYXJ5VGltZVBhdHRlcm4obGVmdEJvdW5kYXJ5LCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2xlZnRCb3VuZGFyeX1gICtcbiAgICAgICAgYCR7cHJpbWFyeVByZWZpeH1gICtcbiAgICAgICAgYChcXFxcZHsxLDR9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnw6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzo6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsyfSlgICtcbiAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtwcmltYXJ5U3VmZml4fWAsIGZsYWdzKTtcbn1cbmZ1bmN0aW9uIGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7Zm9sbG93aW5nUGhhc2V9KWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufFxcXFw6fFxcXFzvvJopYCArXG4gICAgICAgIGAoXFxcXGR7MSwyfSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtmb2xsb3dpbmdTdWZmaXh9YCwgXCJpXCIpO1xufVxuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IE1JTExJX1NFQ09ORF9HUk9VUCA9IDU7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBcImlcIjtcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHxcXFxcYilgO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/IS8pKD89XFxcXFd8JClgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VGltZVBhdHRlcm5UaHJvdWdoQ2FjaGUoKTtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBzdGFydENvbXBvbmVudHMgPSB0aGlzLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxkezR9LykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSA0O1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQsIHN0YXJ0Q29tcG9uZW50cyk7XG4gICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQYXR0ZXJuID0gdGhpcy5nZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdNYXRjaCA9IGZvbGxvd2luZ1BhdHRlcm4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHRleHQubWF0Y2goL15cXGR7Myw0fS8pICYmIGZvbGxvd2luZ01hdGNoKSB7XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyLDR9JC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyfVxcV1xcZHsyfS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2xsb3dpbmdNYXRjaCB8fFxuICAgICAgICAgICAgZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHszLDR9JC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIGZvbGxvd2luZ01hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gZm9sbG93aW5nTWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRSZXR1cm5XaXRoRm9sbG93aW5nUGF0dGVybihyZXN1bHQpO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCBzdHJpY3QgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbSE9VUl9HUk9VUF0ubGVuZ3RoID09IDQgJiYgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBudWxsICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSB8fCBtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXS5sZW5ndGggPT0gMSAmJiAhbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZCA9IHBhcnNlSW50KG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0uc3Vic3RyaW5nKDAsIDMpKTtcbiAgICAgICAgICAgIGlmIChtaWxsaXNlY29uZCA+PSAxMDAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBtaWxsaXNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRzLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gTWVyaWRpZW0uQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiAxMjtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgLSAxMiA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPD0gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQkLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZFxcZFxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXFxkW2FwQVBdJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRpbmdXaXRoTnVtYmVycyA9IHJlc3VsdC50ZXh0Lm1hdGNoKC9bXlxcZDouXShcXGRbXFxkLl0rKSQvKTtcbiAgICAgICAgaWYgKGVuZGluZ1dpdGhOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrLVxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspXFxzKi1cXHMqKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzFdO1xuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzJdO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlcnMuaW5jbHVkZXMoXCIuXCIpICYmICFlbmRpbmdOdW1iZXJzLm1hdGNoKC9cXGQoXFwuXFxkezJ9KSskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlclZhbCA9IHBhcnNlSW50KGVuZGluZ051bWJlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChzdGFydGluZ051bWJlcnMpO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlclZhbCA+IDI0IHx8IHN0YXJ0aW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYWNoZWRQcmltYXJ5UHJlZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5U3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBudWxsO1xuICAgIGdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVByZWZpeCA9IHRoaXMucHJpbWFyeVByZWZpeCgpO1xuICAgICAgICBjb25zdCBwcmltYXJ5U3VmZml4ID0gdGhpcy5wcmltYXJ5U3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPT09IHByaW1hcnlQcmVmaXggJiYgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID09PSBwcmltYXJ5U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBwcmltYXJ5VGltZVBhdHRlcm4odGhpcy5wcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpLCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCB0aGlzLnBhdHRlcm5GbGFncygpKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5UHJlZml4ID0gcHJpbWFyeVByZWZpeDtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID0gcHJpbWFyeVN1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUHJpbWFyeVRpbWVQYXR0ZXJuO1xuICAgIH1cbiAgICBjYWNoZWRGb2xsb3dpbmdQaGFzZSA9IG51bGw7XG4gICAgY2FjaGVkRm9sbG93aW5nU3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gbnVsbDtcbiAgICBnZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nUGhhc2UgPSB0aGlzLmZvbGxvd2luZ1BoYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1N1ZmZpeCA9IHRoaXMuZm9sbG93aW5nU3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZEZvbGxvd2luZ1BoYXNlID09PSBmb2xsb3dpbmdQaGFzZSAmJiB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9PT0gZm9sbG93aW5nU3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbiA9IGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPSBmb2xsb3dpbmdQaGFzZTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBmb2xsb3dpbmdTdWZmaXg7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHx0b3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmF0fGZyb20pXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/Om9cXFxcVypjbG9ja3xhdFxcXFxzKm5pZ2h0fGluXFxcXHMqdGhlXFxcXHMqKD86bW9ybmluZ3xhZnRlcm5vb24pKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJuaWdodFwiKSkge1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDYgJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwiYWZ0ZXJub29uXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibW9ybmluZ1wiKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdDb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAoZm9sbG93aW5nQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9sbG93aW5nQ29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvRU5UaW1lRXhwcmVzc2lvblBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sbG93aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0oPzphZ298YmVmb3JlfGVhcmxpZXIpKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX0oPzpsYXRlcnxhZnRlcnxmcm9tIG5vd3xoZW5jZWZvcnRofGZvcndhcmR8b3V0KWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSlcXFxcc3swLDV9KGxhdGVyfGFmdGVyfGZyb20gbm93KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICBpZiAoIXRpbWVVbml0cykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChyKSA9PiB0aGlzLmlzVmFsaWQoY29udGV4dCwgcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgY3VyUmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgbGV0IG5leHRSZXN1bHQgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRSZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dEJldHdlZW4gPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGN1clJlc3VsdC5pbmRleCArIGN1clJlc3VsdC50ZXh0Lmxlbmd0aCwgbmV4dFJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFJlc3VsdCA9IHRoaXMubWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBsZWZ0LCByaWdodCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbWVyZ2VkICR7bGVmdH0gYW5kICR7cmlnaHR9IGludG8gJHttZXJnZWRSZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbWVyZ2VkUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJzdHJhY3RSZWZpbmVycy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAhY3VycmVudFJlc3VsdC5lbmQgJiYgIW5leHRSZXN1bHQuZW5kICYmIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbDtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBmcm9tUmVzdWx0LCB0b1Jlc3VsdCkge1xuICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmICF0b1Jlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoa2V5LCB0b1Jlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1Jlc3VsdC5zdGFydC5pc0NlcnRhaW4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShrZXksIGZyb21SZXN1bHQuc3RhcnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHRvUmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgbGV0IGZyb21EYXRlID0gZnJvbVJlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBsZXQgdG9EYXRlID0gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHRvRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgdG9EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGZyb21EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGZyb21EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgeWVhcjogMSB9KTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgeWVhcjogLTEgfSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZnJvbURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBbdG9SZXN1bHQsIGZyb21SZXN1bHRdID0gW2Zyb21SZXN1bHQsIHRvUmVzdWx0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGZyb21SZXN1bHQuc3RhcnQ7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0b1Jlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gTWF0aC5taW4oZnJvbVJlc3VsdC5pbmRleCwgdG9SZXN1bHQuaW5kZXgpO1xuICAgICAgICBpZiAoZnJvbVJlc3VsdC5pbmRleCA8IHRvUmVzdWx0LmluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCA9IGZyb21SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgdG9SZXN1bHQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gdG9SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgZnJvbVJlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvfC184oCTfHVudGlsfHRocm91Z2h8dGlsbClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVSZXN1bHQoZGF0ZVJlc3VsdCwgdGltZVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRhdGVSZXN1bHQuY2xvbmUoKTtcbiAgICBjb25zdCBiZWdpbkRhdGUgPSBkYXRlUmVzdWx0LnN0YXJ0O1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IHRpbWVSZXN1bHQuc3RhcnQ7XG4gICAgcmVzdWx0LnN0YXJ0ID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChiZWdpbkRhdGUsIGJlZ2luVGltZSk7XG4gICAgaWYgKGRhdGVSZXN1bHQuZW5kICE9IG51bGwgfHwgdGltZVJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCA/IGRhdGVSZXN1bHQuc3RhcnQgOiBkYXRlUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHRpbWVSZXN1bHQuZW5kID09IG51bGwgPyB0aW1lUmVzdWx0LnN0YXJ0IDogdGltZVJlc3VsdC5lbmQ7XG4gICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChlbmREYXRlLCBlbmRUaW1lKTtcbiAgICAgICAgaWYgKGRhdGVSZXN1bHQuZW5kID09IG51bGwgJiYgZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUoZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREYXRlVGltZS5pc0NlcnRhaW4oXCJkYXlcIikpIHtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShlbmREYXRlVGltZSwgbmV4dERheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gZW5kRGF0ZVRpbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChkYXRlQ29tcG9uZW50LCB0aW1lQ29tcG9uZW50KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb21wb25lbnQgPSBkYXRlQ29tcG9uZW50LmNsb25lKCk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwiaG91clwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbnV0ZVwiKSk7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInNlY29uZFwiKSkge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwic2Vjb25kXCIpKTtcbiAgICAgICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1pbGxpc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgIH1cbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lQ29tcG9uZW50LmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSA9IGRhdGVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJlxuICAgICAgICAoZGF0ZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSB8fFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRlQ29tcG9uZW50LnRhZ3MoKSkuc29tZSgodCkgPT4gdC5zdGFydHNXaXRoKFwiY2FzdWFsUmVmZXJlbmNlL1wiKSkpO1xuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpICE9IG51bGwgJiYgIWRhdGVIYXNNZWFuaW5nZnVsTWVyaWRpZW0pIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICB9XG4gICAgaWYgKGRhdGVUaW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpID09IE1lcmlkaWVtLlBNICYmIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgPCAxMikge1xuICAgICAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKGRhdGVDb21wb25lbnQudGFncygpKTtcbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKHRpbWVDb21wb25lbnQudGFncygpKTtcbiAgICByZXR1cm4gZGF0ZVRpbWVDb21wb25lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnaW5nQ2FsY3VsYXRpb24uanMubWFwIiwiaW1wb3J0IHsgTWVyZ2luZ1JlZmluZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRlVGltZVJlc3VsdCB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAoKChjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBuZXh0UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkgfHxcbiAgICAgICAgICAgIChuZXh0UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkpICYmXG4gICAgICAgICAgICB0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpICE9IG51bGwpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc09ubHlEYXRlKClcbiAgICAgICAgICAgID8gbWVyZ2VEYXRlVGltZVJlc3VsdChjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KVxuICAgICAgICAgICAgOiBtZXJnZURhdGVUaW1lUmVzdWx0KG5leHRSZXN1bHQsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICByZXN1bHQuaW5kZXggPSBjdXJyZW50UmVzdWx0LmluZGV4O1xuICAgICAgICByZXN1bHQudGV4dCA9IGN1cnJlbnRSZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgbmV4dFJlc3VsdC50ZXh0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGF0fGFmdGVyfGJlZm9yZXxvbnxvZnwsfC18XFxcXC584oiZfDopP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4uLy4uL3RpbWV6b25lLmpzXCI7XG5jb25zdCBUSU1FWk9ORV9OQU1FX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKiw/XFxcXHMqXFxcXCg/KFtBLVpdezIsNH0pXFxcXCk/KD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIge1xuICAgIHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudGltZXpvbmVPdmVycmlkZXMgPSB0aW1lem9uZU92ZXJyaWRlcztcbiAgICB9XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPdmVycmlkZXMgPSBjb250ZXh0Lm9wdGlvbi50aW1lem9uZXMgPz8ge307XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFRJTUVaT05FX05BTUVfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZXpvbmVBYmJyID0gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSByZXN1bHQuc3RhcnQuZGF0ZSgpID8/IHJlc3VsdC5yZWZEYXRlID8/IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCB0ek92ZXJyaWRlcyA9IHsgLi4udGhpcy50aW1lem9uZU92ZXJyaWRlcywgLi4udGltZXpvbmVPdmVycmlkZXMgfTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUFiYnIsIHJlZkRhdGUsIHR6T3ZlcnJpZGVzKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRUaW1lem9uZU9mZnNldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke3RpbWV6b25lQWJicn0nIGludG86ICR7ZXh0cmFjdGVkVGltZXpvbmVPZmZzZXR9IGZvcjogJHtyZXN1bHQuc3RhcnR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IHJlc3VsdC5zdGFydC5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZXpvbmVPZmZzZXQgIT09IG51bGwgJiYgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgIT0gY3VycmVudFRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lem9uZUFiYnIgIT0gbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcy5tYXAiLCJjb25zdCBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86XFxcXCg/KD86R01UfFVUQylcXFxccz8pPyhbKy1dKShcXFxcZHsxLDJ9KSg/Ojo/KFxcXFxkezJ9KSk/XFxcXCk/XCIsIFwiaVwiKTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9TSUdOX0dST1VQID0gMTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUCA9IDI7XG5jb25zdCBUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfT0ZGU0VUX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIHRpbWV6b25lOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgY29uc3QgbWludXRlT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX01JTlVURV9PRkZTRVRfR1JPVVBdIHx8IFwiMFwiKTtcbiAgICAgICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA+IDE0ICogNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVBdID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0ID0gLXRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGFwUmVtb3ZhbFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgcHJldlJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXggPj0gcHJldlJlc3VsdC5pbmRleCArIHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgICAgICAgICBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGtlcHQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lmxlbmd0aCA+IHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBwcmV2UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2VwdCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVtb3ZlICR7cmVtb3ZlZH0gYnkgJHtrZXB0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2UmVzdWx0ID0ga2VwdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXBSZW1vdmFsUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkocmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZkRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgZGF5c1RvV2Vla2RheSA9IGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIGxldCBjb21wb25lbnRzID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSk7XG4gICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuYWRkRHVyYXRpb25Bc0ltcGxpZWQoeyBkYXk6IGRheXNUb1dlZWtkYXkgfSk7XG4gICAgY29tcG9uZW50cy5hc3NpZ24oXCJ3ZWVrZGF5XCIsIHdlZWtkYXkpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSA/IDcgOiB3ZWVrZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSArIHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IHJlZldlZWtkYXkgJiYgd2Vla2RheSAhPSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KSArIDc7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KSB7XG4gICAgY29uc3QgYmFja3dhcmQgPSBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgY29uc3QgZm9yd2FyZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgIHJldHVybiBmb3J3YXJkIDwgLWJhY2t3YXJkID8gZm9yd2FyZCA6IGJhY2t3YXJkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZm9yd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGZvcndhcmRDb3VudCA8IDApIHtcbiAgICAgICAgZm9yd2FyZENvdW50ICs9IDc7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgYmFja3dhcmRDb3VudCA9IHdlZWtkYXkgLSByZWZXZWVrZGF5O1xuICAgIGlmIChiYWNrd2FyZENvdW50ID49IDApIHtcbiAgICAgICAgYmFja3dhcmRDb3VudCAtPSA3O1xuICAgIH1cbiAgICByZXR1cm4gYmFja3dhcmRDb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlZWtkYXlzLmpzLm1hcCIsImltcG9ydCAqIGFzIGRhdGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IGdldERheXNGb3J3YXJkVG9XZWVrZGF5IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkRGF0ZVJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmICghY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmRGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlUaW1lKCkgJiYgY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmRm9sbG93aW5nRGF5ID0gbmV3IERhdGUocmVmRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LnN0YXJ0LCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB0aW1lIGZyb20gdGhlIHJlZiBkYXRlICgke3JlZkRhdGV9KSB0byB0aGUgZm9sbG93aW5nIGRheSAoJHtyZWZGb2xsb3dpbmdEYXl9KWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmIHJlc3VsdC5lbmQuaXNPbmx5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgcmVmRm9sbG93aW5nRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5kYXRlKCkgPiByZXN1bHQuZW5kLmRhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgcmVmRGF0ZSA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5c1RvQWRkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgcmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpIHx8IDc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIGZvcndhcmRlZFdlZWtkYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gd2Vla2RheSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMyAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB5ZWFyICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc0NlcnRhaW4oXCJ5ZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCByZXN1bHQuZW5kLmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IG1vbnRoICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcndhcmREYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQucmVwbGFjZShcIiBcIiwgXCJcIikubWF0Y2goL15cXGQqKFxcLlxcZCopPyQvKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdCAnJHtyZXN1bHQudGV4dH0nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuc3RhcnR9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgIXJlc3VsdC5lbmQuaXNWYWxpZERhdGUoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGludmFsaWQgcmVzdWx0OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoU3RyaWN0KSBSZW1vdmluZyB3ZWVrZGF5IG9ubHkgY29tcG9uZW50OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmxpa2VseUZvcm1hdEZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV17NH0pXFxcXC0oWzAtOV17MSwyfSlcXFxcLShbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlRcIiArXG4gICAgXCIoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiOihbMC05XXsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNH0pKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIihcIiArXG4gICAgXCJafChbKy1dXFxcXGR7Mn0pOj8oXFxcXGR7Mn0pP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAyO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgSE9VUl9OVU1CRVJfR1JPVVAgPSA0O1xuY29uc3QgTUlOVVRFX05VTUJFUl9HUk9VUCA9IDU7XG5jb25zdCBTRUNPTkRfTlVNQkVSX0dST1VQID0gNjtcbmNvbnN0IE1JTExJU0VDT05EX05VTUJFUl9HUk9VUCA9IDc7XG5jb25zdCBUWkRfR1JPVVAgPSA4O1xuY29uc3QgVFpEX0hPVVJfT0ZGU0VUX0dST1VQID0gOTtcbmNvbnN0IFRaRF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMTA7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJU09Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIFwieWVhclwiOiBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJtb250aFwiOiBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgICAgIFwiZGF5XCI6IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbSE9VUl9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBwYXJzZUludChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIHBhcnNlSW50KG1hdGNoW01JTlVURV9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW1NFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBwYXJzZUludChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUWkRfTUlOVVRFX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvSVNPRm9ybWF0UGFyc2VyXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlTT0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBuZXh0UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXdSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgY3VycmVudFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgIWN1cnJlbnRSZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIik7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgJiYgdGV4dEJldHdlZW4ubWF0Y2goL14sP1xccyokLykgIT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIuanNcIjtcbmltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBGb3J3YXJkRGF0ZVJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgY29uZmlndXJhdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElTT0Zvcm1hdFBhcnNlcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMucHVzaChuZXcgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBGb3J3YXJkRGF0ZVJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBVbmxpa2VseUZvcm1hdEZpbHRlcihzdHJpY3RNb2RlKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9ucy5qcy5tYXAiLCJpbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgYXNzaWduU2ltaWxhclRpbWUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbm93KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm93XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9kYXkocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmRlbGV0ZShcIm1lcmlkaWVtXCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9kYXlcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXkocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIDEpLmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9tb3Jyb3cocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbW9ycm93XCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIG51bURheSkge1xuICAgIHJldHVybiB0aGVEYXlBZnRlcihyZWZlcmVuY2UsIC1udW1EYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgbkRheXMpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIG5EYXlzKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXdEYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b25pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjIpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b25pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdE5pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgNikge1xuICAgICAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXlFdmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBsZXQgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgdGFyZ2V0RGF0ZSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UveWVzdGVyZGF5XCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pZG5pZ2h0KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEhvdXJzKCkgPiAyKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogMSB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbW9ybmluZyhyZWZlcmVuY2UsIGltcGx5SG91ciA9IDYpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVybm9vbihyZWZlcmVuY2UsIGltcGx5SG91ciA9IDE1KSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vb24ocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAxMik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhc3VhbFJlZmVyZW5jZXMuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG5vd3x0b2RheXx0b25pZ2h0fHRvbW9ycm93fG92ZXJtb3Jyb3d8dG1yfHRtcnd8eWVzdGVyZGF5fGxhc3RcXHMqbmlnaHQpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3dcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9kYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5ZXN0ZXJkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9tb3Jyb3dcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJ3XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9uaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib3Zlcm1vcnJvd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYXN0XFxzKm5pZ2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBwcmV2aW91c0RheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsRGF0ZVBhcnNlclwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyBjYXN1YWxSZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzp0aGlzKT9cXHN7MCwzfShtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0fG1pZG5pZ2h0fG1pZGRheXxub29uKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5hZnRlcm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3JuaW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5tb3JuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub29uXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGF5XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsVGltZVBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgXCIoPzoodGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9fHdlZWtlbmR8d2Vla2RheSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooPzpvZlxcXFxzKik/KHRoaXN8bGFzdHxwYXN0fG5leHQpXFxcXHMqd2Vlayk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCJsYXN0XCIgfHwgbW9kaWZpZXJXb3JkID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcIm5leHRcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla2RheV93b3JkID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHdlZWtkYXk7XG4gICAgICAgIGlmIChXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW3dlZWtkYXlfd29yZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2VuZFwiKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LlNVTkRBWSA6IFdlZWtkYXkuU0FUVVJEQVk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2RheVwiKSB7XG4gICAgICAgICAgICBjb25zdCByZWZXZWVrZGF5ID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSB8fCByZWZXZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LkZSSURBWSA6IFdlZWtkYXkuTU9OREFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHJlZldlZWtkYXkgLSAxO1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IHdlZWtkYXkgLSAxIDogd2Vla2RheSArIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9ICh3ZWVrZGF5ICUgNSkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyXFxcXHMqdGhpcylcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcIm5leHRcIiB8fCBtb2RpZmllci5zdGFydHNXaXRoKFwiYWZ0ZXJcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodW5pdFdvcmQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoW15cXFxcZF18XilcIiArXG4gICAgXCIoWzAtM117MCwxfVswLTldezF9KVtcXFxcL1xcXFwuXFxcXC1dKFswLTNdezAsMX1bMC05XXsxfSlcIiArXG4gICAgXCIoPzpbXFxcXC9cXFxcLlxcXFwtXShbMC05XXs0fXxbMC05XXsyfSkpP1wiICtcbiAgICBcIihcXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBPUEVOSU5HX0dST1VQID0gMTtcbmNvbnN0IEVORElOR19HUk9VUCA9IDU7XG5jb25zdCBGSVJTVF9OVU1CRVJTX0dST1VQID0gMjtcbmNvbnN0IFNFQ09ORF9OVU1CRVJTX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBncm91cE51bWJlck1vbnRoO1xuICAgIGdyb3VwTnVtYmVyRGF5O1xuICAgIGNvbnN0cnVjdG9yKGxpdHRsZUVuZGlhbikge1xuICAgICAgICB0aGlzLmdyb3VwTnVtYmVyTW9udGggPSBsaXR0bGVFbmRpYW4gPyBTRUNPTkRfTlVNQkVSU19HUk9VUCA6IEZJUlNUX05VTUJFUlNfR1JPVVA7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJEYXkgPSBsaXR0bGVFbmRpYW4gPyBGSVJTVF9OVU1CRVJTX0dST1VQIDogU0VDT05EX05VTUJFUlNfR1JPVVA7XG4gICAgfVxuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtPUEVOSU5HX0dST1VQXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4RW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBtYXRjaFtFTkRJTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRleHRCZWZvcmUubWF0Y2goXCJcXFxcZC8/JFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhFbmQgPCBjb250ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubWF0Y2goXCJeLz9cXFxcZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZFxcLlxcZCQvKSB8fCB0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkezEsMn1cXC5cXGR7MSwyfVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW1lFQVJfR1JPVVBdICYmIHRleHQuaW5kZXhPZihcIi9cIikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbdGhpcy5ncm91cE51bWJlck1vbnRoXSk7XG4gICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyRGF5XSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyICYmIG1vbnRoIDw9IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgIFtkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZFRhZyhcInBhcnNlci9TbGFzaERhdGVGb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBJc1Bvc2l0aXZlRm9sbG93aW5nUmVmZXJlbmNlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXlsrLV0vaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eLS9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCgvXlxccyokL2kpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkgfHwgSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG5leHRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShjdXJyZW50UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChjdXJyZW50UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGJlZm9yZXxmcm9tKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGFmdGVyfHNpbmNlKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24oY3VycmVudFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgZHVyYXRpb24pO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQobmV4dFJlc3VsdC5yZWZlcmVuY2UsIGN1cnJlbnRSZXN1bHQuaW5kZXgsIGAke2N1cnJlbnRSZXN1bHQudGV4dH0ke3RleHRCZXR3ZWVufSR7bmV4dFJlc3VsdC50ZXh0fWAsIGNvbXBvbmVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX1NVRkZJWF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXlxcXFxzKigke1lFQVJfUEFUVEVSTn0pYCwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBZRUFSX1NVRkZJWF9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0udHJpbSgpLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgeWVhcjogJyR7bWF0Y2hbMF19JyBpbnRvIDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dCA9PT0gY29udGV4dC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKSA9PT0gXCJtYXlcIikge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgcmVzdWx0LmluZGV4KS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRleHRCZWZvcmUubWF0Y2goL1xcYihpbikkL2kpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwidGhlIHNlY29uZFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEFmdGVyID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5ZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuLi8uLi9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanNcIjtcbmltcG9ydCBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL3JlZmluZXJzL0VOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORGVmYXVsdENvbmZpZ3VyYXRpb24ge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5Nb250aE5hbWVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICAgICAgfSwgc3RyaWN0TW9kZSk7XG4gICAgICAgIG9wdGlvbnMucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlllYXJNb250aERheVBhcnNlcihzdHJpY3RNb2RlKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy5wdXNoKG5ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IFJlZmVyZW5jZVdpdGhUaW1lem9uZSwgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBDaHJvbm8ge1xuICAgIHBhcnNlcnM7XG4gICAgcmVmaW5lcnM7XG4gICAgZGVmYXVsdENvbmZpZyA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB0aGlzLmRlZmF1bHRDb25maWcuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLnBhcnNlcnMgPSBbLi4uY29uZmlndXJhdGlvbi5wYXJzZXJzXTtcbiAgICAgICAgdGhpcy5yZWZpbmVycyA9IFsuLi5jb25maWd1cmF0aW9uLnJlZmluZXJzXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hyb25vKHtcbiAgICAgICAgICAgIHBhcnNlcnM6IFsuLi50aGlzLnBhcnNlcnNdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFsuLi50aGlzLnJlZmluZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlRGF0ZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID4gMCA/IHJlc3VsdHNbMF0uc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgICB9XG4gICAgcGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZXJzLmZvckVhY2goKHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0cyA9IENocm9uby5leGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcik7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocGFyc2VkUmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAocmVmaW5lcikge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZmluZXIucmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBleGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXJzZXIucGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dDtcbiAgICAgICAgbGV0IG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBvcmlnaW5hbFRleHQubGVuZ3RoIC0gcmVtYWluaW5nVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLmV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0LnN0YXJ0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEluZGV4ID0gcGFyc2VkUmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlZFJlc3VsdC50ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiBjb25zb2xlLmxvZyhgJHtwYXJzZXIuY29uc3RydWN0b3IubmFtZX0gZXh0cmFjdGVkIChhdCBpbmRleD0ke3BhcnNlZEluZGV4fSkgJyR7cGFyc2VkVGV4dH0nYCkpO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlZFJlc3VsdCk7XG4gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhwYXJzZWRJbmRleCArIHBhcnNlZFRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgdGV4dDtcbiAgICBvcHRpb247XG4gICAgcmVmZXJlbmNlO1xuICAgIHJlZkRhdGU7XG4gICAgY29uc3RydWN0b3IodGV4dCwgcmVmRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uID8/IHt9O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tSW5wdXQocmVmRGF0ZSwgdGhpcy5vcHRpb24udGltZXpvbmVzKTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gdGhpcy5yZWZlcmVuY2UuaW5zdGFudDtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoY29tcG9uZW50cykge1xuICAgICAgICBpZiAoY29tcG9uZW50cyBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlLCBjb21wb25lbnRzKTtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dE9yRW5kSW5kZXgsIHN0YXJ0Q29tcG9uZW50cywgZW5kQ29tcG9uZW50cykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIHRleHRPckVuZEluZGV4ID09PSBcInN0cmluZ1wiID8gdGV4dE9yRW5kSW5kZXggOiB0aGlzLnRleHQuc3Vic3RyaW5nKGluZGV4LCB0ZXh0T3JFbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhzdGFydENvbXBvbmVudHMpIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tcG9uZW50cyA/IHRoaXMuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoZW5kQ29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQodGhpcy5yZWZlcmVuY2UsIGluZGV4LCB0ZXh0LCBzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgZGVidWcoYmxvY2spIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRlYnVnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm9wdGlvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNocm9uby5qcy5tYXAiLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oZmFsc2UpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic29ubnRhZ1wiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm1vbnRhZ1wiOiAxLFxuICAgIFwibW9cIjogMSxcbiAgICBcImRpZW5zdGFnXCI6IDIsXG4gICAgXCJkaVwiOiAyLFxuICAgIFwibWl0dHdvY2hcIjogMyxcbiAgICBcIm1pXCI6IDMsXG4gICAgXCJkb25uZXJzdGFnXCI6IDQsXG4gICAgXCJkb1wiOiA0LFxuICAgIFwiZnJlaXRhZ1wiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcInNhbXN0YWdcIjogNixcbiAgICBcInNhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW51YXJcIjogMSxcbiAgICBcImrDpG5uZXJcIjogMSxcbiAgICBcImphbm5lclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyXCI6IDIsXG4gICAgXCJmZWJlclwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtw6RyelwiOiAzLFxuICAgIFwibWFlcnpcIjogMyxcbiAgICBcIm3DpHJcIjogMyxcbiAgICBcIm3DpHIuXCI6IDMsXG4gICAgXCJtcnpcIjogMyxcbiAgICBcIm1yei5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdFwiOiA4LFxuICAgIFwiYXVnXCI6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgXCJzZXB0ZW1iZXJcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGV6ZW1iZXJcIjogMTIsXG4gICAgXCJkZXpcIjogMTIsXG4gICAgXCJkZXouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVpbnNcIjogMSxcbiAgICBcImVpbmVcIjogMSxcbiAgICBcImVpbmVtXCI6IDEsXG4gICAgXCJlaW5lblwiOiAxLFxuICAgIFwiZWluZXJcIjogMSxcbiAgICBcInp3ZWlcIjogMixcbiAgICBcImRyZWlcIjogMyxcbiAgICBcInZpZXJcIjogNCxcbiAgICBcImbDvG5mXCI6IDUsXG4gICAgXCJmdWVuZlwiOiA1LFxuICAgIFwic2VjaHNcIjogNixcbiAgICBcInNpZWJlblwiOiA3LFxuICAgIFwiYWNodFwiOiA4LFxuICAgIFwibmV1blwiOiA5LFxuICAgIFwiemVoblwiOiAxMCxcbiAgICBcImVsZlwiOiAxMSxcbiAgICBcInp3w7ZsZlwiOiAxMixcbiAgICBcInp3b2VsZlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VrOiBcInNlY29uZFwiLFxuICAgIHNla3VuZGU6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIHN0ZDogXCJob3VyXCIsXG4gICAgc3R1bmRlOiBcImhvdXJcIixcbiAgICBzdHVuZGVuOiBcImhvdXJcIixcbiAgICB0YWc6IFwiZGF5XCIsXG4gICAgdGFnZTogXCJkYXlcIixcbiAgICB0YWdlbjogXCJkYXlcIixcbiAgICB3b2NoZTogXCJ3ZWVrXCIsXG4gICAgd29jaGVuOiBcIndlZWtcIixcbiAgICBtb25hdDogXCJtb250aFwiLFxuICAgIG1vbmF0ZTogXCJtb250aFwiLFxuICAgIG1vbmF0ZW46IFwibW9udGhcIixcbiAgICBtb25hdHM6IFwibW9udGhcIixcbiAgICBxdWFydGFsOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsczogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGU6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxlbjogXCJxdWFydGVyXCIsXG4gICAgYTogXCJ5ZWFyXCIsXG4gICAgajogXCJ5ZWFyXCIsXG4gICAganI6IFwieWVhclwiLFxuICAgIGphaHI6IFwieWVhclwiLFxuICAgIGphaHJlOiBcInllYXJcIixcbiAgICBqYWhyZW46IFwieWVhclwiLFxuICAgIGphaHJlczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGI/fGhhbGJlP3xlaW5pZ2VuP3x3ZW5pZ2VuP3xtZWhyZXJlbj8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJlaW5cIiB8fCBudW0gPT09IFwiZWluZXJcIiB8fCBudW0gPT09IFwiZWluZW1cIiB8fCBudW0gPT09IFwiZWluZW5cIiB8fCBudW0gPT09IFwiZWluZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3dlbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9oYWxiLykgfHwgbnVtLm1hdGNoKC9oYWxiZW4vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2VpbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZWhyZXJlbi8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMC05XXsxLDR9KD86XFxcXHMqW3ZuXVxcXFwuP1xcXFxzKig/OkMoPzpocik/fCg/OnVcXFxcLj98ZFxcXFwuPyg/OlxcXFxzKmdcXFxcLj8pPyk/XFxcXHMqWilcXFxcLj98XFxcXHMqKD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuKT8pXFxcXHMqWlxcXFwuPyk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvbi9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvei9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86YVttbl1cXFxccyo/KT9cIiArXG4gICAgXCIoPzooZGllc2VbbW5dfGxldHp0ZVttbl18big/OsOkfGFlKWNoc3RlW21uXSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihkaWVzZXxsZXR6dGV8big/OsOkfGFlKWNoc3RlKVxcXFxzKndvY2hlKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1NVRkZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9sZXR6dGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2Noc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9kaWVzZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OnVtfHZvbilcXFxccyopP1wiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKD86XFxcXHMrdW0pP3xcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzKT8pP1wiICtcbiAgICBcIig/OlxcXFxzKlVocik/XCIgK1xuICAgIFwiKD86XFxcXHMqKG1vcmdlbnN8dm9ybWl0dGFnc3xuYWNobWl0dGFnc3xhYmVuZHN8bmFjaHRzfGFtXFxcXHMrKD86TW9yZ2VufFZvcm1pdHRhZ3xOYWNobWl0dGFnfEFiZW5kKXxpblxcXFxzK2RlclxcXFxzK05hY2h0KSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCkpO1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGR7NH0kLykpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydCkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIHNlY29uZE1hdGNoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50KGV4dHJhY3RpbmdDb21wb25lbnRzLCBtYXRjaCkge1xuICAgICAgICBsZXQgaG91ciA9IDA7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9tb3JnZW58dm9ybWl0dGFnLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9uYWNobWl0dGFnfGFiZW5kLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2h0LykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKGJpcyg/OlxccyooPzphbXx6dW0pKT98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHx1bXxhbXwsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZGllc2VuKT9cXHMqKG1vcmdlbnx2b3JtaXR0YWd8bWl0dGFncz98bmFjaG1pdHRhZ3xhYmVuZHxuYWNodHxtaXR0ZXJuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcm1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2htaXR0YWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYmVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGVybmFjaHRcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IERFQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChqZXR6dHxoZXV0ZXxtb3JnZW58w7xiZXJtb3JnZW58dWViZXJtb3JnZW58Z2VzdGVybnx2b3JnZXN0ZXJufGxldHp0ZVxcXFxzKm5hY2h0KWAgK1xuICAgIGAoPzpcXFxccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqZXR6dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZXV0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDvGJlcm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcInVlYmVybW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcmdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0yIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUtleXdvcmQubWF0Y2goL2xldHp0ZVxccypuYWNodC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzphbVxcXFxzKj8pP1wiICtcbiAgICBcIig/OmRlblxcXFxzKj8pP1wiICtcbiAgICBgKFswLTldezEsMn0pXFxcXC5gICtcbiAgICBgKD86XFxcXHMqKD86YmlzKD86XFxcXHMqKD86YW18enVtKSk/fFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKSgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86XFxcXHMqKCg/Om7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpP3x2b3J8aW4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihuw6RjaHN0ZXxrb21tZW5kZXxmb2xnZW5kZXxsZXR6dGV8dmVyZ2FuZ2VuZXx2b3JpZ2V8dm9yKD86aGVyfGFuKWdlZ2FuZ2VuZSkoPzpzfG58bXxyKT8pP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMl0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMl0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzRdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC92b3IvLnRlc3QobW9kaWZpZXIpIHx8IC9sZXR6dGUvLnRlc3QobW9kaWZpZXIpIHx8IC92ZXJnYW5nZW4vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86aW58ZsO8cnx3w6RocmVuZClcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgREVUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBERU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgREVNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG1haW50ZW5hbnR8YXVqb3VyZCdodWl8ZGVtYWlufGhpZXJ8Y2V0dGVcXHMqbnVpdHxsYVxccyp2ZWlsbGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibWFpbnRlbmFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXVqb3VyZCdodWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaGllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZGVtYWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9jZXR0ZVxccypudWl0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYVxccyp2ZWlsbGUvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhjZXQ/KT9cXHMqKG1hdGlufHNvaXJ8YXByw6hzLW1pZGl8YXByZW18YSBtaWRpfMOgIG1pbnVpdCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExvd2VyID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHN1ZmZpeExvd2VyKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXByw6hzLW1pZGlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhcHJlbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTQpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic29pclwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0aW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYSBtaWRpXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDoCBtaW51aXRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzpbw6BhXSlcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfFvDoGFdfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8w6B8YXxhdXx2ZXJzfGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijDoHxhfGF1fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkaW1hbmNoZVwiOiAwLFxuICAgIFwiZGltXCI6IDAsXG4gICAgXCJsdW5kaVwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJkaVwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjcmVkaVwiOiAzLFxuICAgIFwibWVyXCI6IDMsXG4gICAgXCJqZXVkaVwiOiA0LFxuICAgIFwiamV1XCI6IDQsXG4gICAgXCJ2ZW5kcmVkaVwiOiA1LFxuICAgIFwidmVuXCI6IDUsXG4gICAgXCJzYW1lZGlcIjogNixcbiAgICBcInNhbVwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudmllclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmw6l2cmllclwiOiAyLFxuICAgIFwiZsOpdlwiOiAyLFxuICAgIFwiZsOpdi5cIjogMixcbiAgICBcImZldnJpZXJcIjogMixcbiAgICBcImZldlwiOiAyLFxuICAgIFwiZmV2LlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhdnJpbFwiOiA0LFxuICAgIFwiYXZyXCI6IDQsXG4gICAgXCJhdnIuXCI6IDQsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcImp1aW5cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVpbGxldFwiOiA3LFxuICAgIFwianVpbFwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhb8O7dFwiOiA4LFxuICAgIFwiYW91dFwiOiA4LFxuICAgIFwic2VwdGVtYnJlXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgXCJvY3RvYnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImTDqWNlbWJyZVwiOiAxMixcbiAgICBcImRlY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1blwiOiAxLFxuICAgIFwiZGV1eFwiOiAyLFxuICAgIFwidHJvaXNcIjogMyxcbiAgICBcInF1YXRyZVwiOiA0LFxuICAgIFwiY2lucVwiOiA1LFxuICAgIFwic2l4XCI6IDYsXG4gICAgXCJzZXB0XCI6IDcsXG4gICAgXCJodWl0XCI6IDgsXG4gICAgXCJuZXVmXCI6IDksXG4gICAgXCJkaXhcIjogMTAsXG4gICAgXCJvbnplXCI6IDExLFxuICAgIFwiZG91emVcIjogMTIsXG4gICAgXCJ0cmVpemVcIjogMTMsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlc1wiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXNcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcImhyc1wiOiBcImhvdXJcIixcbiAgICBcImhldXJlXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVzXCI6IFwiaG91clwiLFxuICAgIFwiam91clwiOiBcImRheVwiLFxuICAgIFwiam91cnNcIjogXCJkYXlcIixcbiAgICBcInNlbWFpbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZW1haW5lc1wiOiBcIndlZWtcIixcbiAgICBcIm1vaXNcIjogXCJtb250aFwiLFxuICAgIFwidHJpbWVzdHJlXCI6IFwicXVhcnRlclwiLFxuICAgIFwidHJpbWVzdHJlc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFuc1wiOiBcInllYXJcIixcbiAgICBcImFubsOpZVwiOiBcInllYXJcIixcbiAgICBcImFubsOpZXNcIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfHVuZT9cXFxcYnxxdWVscXVlcz98ZGVtaS0/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5lXCIgfHwgbnVtID09PSBcInVuXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcXVlbHF1ZXM/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZGVtaS0/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OlswLTldezEsMn0oPzplcik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzplcikkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxccyooPzpBQ3xBRHxwXFxcXC5cXFxccypDKD86aHI/KT9cXFxcLlxcXFxzKm5cXFxcLil8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9BQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoL0FEL2kudGVzdChtYXRjaCkgfHwgL0MvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL1teXFxkXSsvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oig/OmNlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRlcm5pZXJ8cHJvY2hhaW4pXFxcXHMqKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMTtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdWZmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAoc3VmZml4ID09IFwiZGVybmllclwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1ZmZpeCA9PSBcInByb2NoYWluXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cmFjdGluZ0NvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OlxcXFxzKig/OmF1fFxcXFwtfFxcXFzigJN8anVzcXUnYXU/fFxcXFxzKVxcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/Oi18L3xcXFxccyooPzpkZSk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgaWwgeSBhXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZGFuc3xlbnxwb3VyfHBlbmRhbnR8ZGUpXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTlVNQkVSX1BBVFRFUk4sIHBhcnNlTnVtYmVyUGF0dGVybiwgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/Omxlcz98bGF8bCd8ZHV8ZGVzPylcXFxccypgICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IG1hdGNoWzFdID8gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKSA6IDE7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFszXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICB0aW1lVW5pdHNbdW5pdF0gPSBudW07XG4gICAgICAgIGxldCBtb2RpZmllciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvZGVybmlbZcOoXXJlP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcGFzc1vDqWVdZT9zPy8udGVzdChtb2RpZmllcikgfHwgL3ByW8OpZV1jW8OpZV1kZW50cz8vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRlJNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRlJNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLml6VcIjogMCxcbiAgICBcIuaciFwiOiAxLFxuICAgIFwi54GrXCI6IDIsXG4gICAgXCLmsLRcIjogMyxcbiAgICBcIuacqFwiOiA0LFxuICAgIFwi6YeRXCI6IDUsXG4gICAgXCLlnJ9cIjogNixcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9IYW5rYWt1KHRleHQpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDE5L2csIFwiXFx1MDAyN1wiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAxRC9nLCBcIlxcdTAwMjJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTMwMDAvZywgXCJcXHUwMDIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHVGRkU1L2csIFwiXFx1MDBBNVwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdUZGMDFcXHVGRjAzLVxcdUZGMDZcXHVGRjA4XFx1RkYwOVxcdUZGMEMtXFx1RkYxOVxcdUZGMUMtXFx1RkYxRlxcdUZGMjEtXFx1RkYzQlxcdUZGM0RcXHVGRjNGXFx1RkY0MS1cXHVGRjVCXFx1RkY1RFxcdUZGNUVdL2csIGFscGhhTnVtKTtcbn1cbmZ1bmN0aW9uIGFscGhhTnVtKHRva2VuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9rZW4uY2hhckNvZGVBdCgwKSAtIDY1MjQ4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqYVN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86KD86KFvlkIzku4rmnKxdKXwoKOaYreWSjHzlubPmiJB85Luk5ZKMKT8oWzAtOe+8kC3vvJldezEsNH185YWDKSkp5bm0XFxzKik/KFswLTnvvJAt77yZXXsxLDJ9KeaciFxccyooWzAtOe+8kC3vvJldezEsMn0p5pelL2k7XG5jb25zdCBTUEVDSUFMX1lFQVJfR1JPVVAgPSAxO1xuY29uc3QgVFlQSUNBTF9ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEVSQV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNT05USF9HUk9VUCA9IDU7XG5jb25zdCBEQVlfR1JPVVAgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTdGFuZGFyZFBhcnNlciB7XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1NQRUNJQUxfWUVBUl9HUk9VUF0gJiYgbWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXS5tYXRjaChcIuWQjHzku4p85pysXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1RZUElDQUxfWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1UZXh0ID0gbWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgbGV0IHllYXIgPSB5ZWFyTnVtVGV4dCA9PSBcIuWFg1wiID8gMSA6IHBhcnNlSW50KHRvSGFua2FrdSh5ZWFyTnVtVGV4dCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLku6TlkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMjAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLlubPmiJBcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTk4ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLmmK3lkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTkyNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo44GL44KJfO+8jXzjg7x8LXzvvZ58filcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC/ku4rml6V844GN44KH44GGfOacrOaXpXzjgbvjgpPjgZjjgaR85pio5pelfOOBjeOBruOBhnzmmI7ml6V844GC44GX44GffOS7iuWknHzjgZPjgpPjgoR85LuK5aSVfOOBk+OCk+OChuOBhnzku4rmmal844GT44KT44Gw44KTfOS7iuacnXzjgZHjgZUvaTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRUb0thbmppKHRleHQpIHtcbiAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgY2FzZSBcIuOBjeOCh+OBhlwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgbvjgpPjgZjjgaRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuacrOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GN44Gu44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmKjml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBguOBl+OBn1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5piO5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgoRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWknFwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44KG44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rlpJVcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OBsOOCk1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pmpXCI7XG4gICAgICAgIGNhc2UgXCLjgZHjgZVcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuacnVwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBDYXN1YWxEYXRlUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dFRvS2FuamkobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLmmKjml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuaYjuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLmnKzml6VcIjpcbiAgICAgICAgICAgIGNhc2UgXCLku4rml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgPT0gXCLku4rlpJxcIiB8fCB0ZXh0ID09IFwi5LuK5aSVXCIgfHwgdGV4dCA9PSBcIuS7iuaZqVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lm1hdGNoKFwi5LuK5pydXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIigoPzxwcmVmaXg+5YmN44GufOasoeOBrnzku4rpgLEpKT8oPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD865puc5pelfOabnClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKHByZWZpeC5tYXRjaCgv5YmN44GuLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJlZml4Lm1hdGNoKC/mrKHjga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+S7iumAsS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOe+8kC3vvJldezR9W1xcXFwvfFxcXFzvvI9dKT9cIiArIFwiKFswLTHvvJAt77yRXXswLDF9WzAtOe+8kC3vvJldezF9KSg/OltcXFxcL3xcXFxc77yPXShbMC0z77yQLe+8k117MCwxfVswLTnvvJAt77yZXXsxfSkpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW01PTlRIX0dST1VQXSkpO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbREFZX0dST1VQXSkpO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xuICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCBqYVN0cmluZ1RvTnVtYmVyLCB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgig/IemWkyl8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfOWNinxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD8644GL44KJfFxcXFwtfFxcXFzigJN8XFxcXO+8jXxcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUF8xID0gMTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzIgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIG1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kLmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09PSBNZXJpZGllbS5QTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gcmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuZW5kLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hIb3VyLCBtYXRjaE1pbnV0ZSwgbWF0Y2hTZWNvbmQsIG1hdGNoQW1QbSkge1xuICAgIGxldCBob3VyID0gMDtcbiAgICBsZXQgbWVyaWRpZW0gPSAtMTtcbiAgICBsZXQgdGFyZ2V0Q29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICBob3VyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoSG91cikpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICBob3VyID0gamFTdHJpbmdUb051bWJlcihtYXRjaEhvdXIpO1xuICAgIH1cbiAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNaW51dGUpIHtcbiAgICAgICAgbGV0IG1pbnV0ZTtcbiAgICAgICAgaWYgKG1hdGNoTWludXRlID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaE1pbnV0ZSkpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoTWludXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgfVxuICAgIGlmIChtYXRjaFNlY29uZCkge1xuICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoU2Vjb25kKSk7XG4gICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoU2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgfVxuICAgIGlmIChtYXRjaEFtUG0pIHtcbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQU1QTVN0cmluZyA9IG1hdGNoQW1QbTtcbiAgICAgICAgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5YmNXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcImFcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBTVBNU3RyaW5nID09PSBcIuWNiOW+jFwiIHx8IEFNUE1TdHJpbmdbMF0udG9Mb3dlckNhc2UoKSA9PT0gXCJwXCIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICB0YXJnZXRDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjga4pP1xccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBjdXJyZW50UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIG5ld1Jlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG5leHRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIGlmIChuZXdSZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHQuZW5kLmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVzdWx0O1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIikgJiZcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpO1xuICAgICAgICByZXR1cm4gbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ICYmIHRleHRCZXR3ZWVuLm1hdGNoKC9eWyzjgIHjga5dP1xccyokLykgIT09IG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXCh8XFxcXO+8iCkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD86XFxcXCl8XFxcXO+8iSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMubWFwIiwiaW1wb3J0IEpQU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBKUENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBKUENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IEpQU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkb21pbmdvXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcInNlZ3VuZGFcIjogMSxcbiAgICBcInNlZ3VuZGEtZmVpcmFcIjogMSxcbiAgICBcInNlZ1wiOiAxLFxuICAgIFwidGVyw6dhXCI6IDIsXG4gICAgXCJ0ZXLDp2EtZmVpcmFcIjogMixcbiAgICBcInRlclwiOiAyLFxuICAgIFwicXVhcnRhXCI6IDMsXG4gICAgXCJxdWFydGEtZmVpcmFcIjogMyxcbiAgICBcInF1YVwiOiAzLFxuICAgIFwicXVpbnRhXCI6IDQsXG4gICAgXCJxdWludGEtZmVpcmFcIjogNCxcbiAgICBcInF1aVwiOiA0LFxuICAgIFwic2V4dGFcIjogNSxcbiAgICBcInNleHRhLWZlaXJhXCI6IDUsXG4gICAgXCJzZXhcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW5laXJvXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZldmVyZWlyb1wiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXLDp29cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYWJyaWxcIjogNCxcbiAgICBcImFiclwiOiA0LFxuICAgIFwiYWJyLlwiOiA0LFxuICAgIFwibWFpb1wiOiA1LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJtYWkuXCI6IDUsXG4gICAgXCJqdW5ob1wiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxob1wiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwiYWdvLlwiOiA4LFxuICAgIFwic2V0ZW1icm9cIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwib3V0dWJyb1wiOiAxMCxcbiAgICBcIm91dFwiOiAxMCxcbiAgICBcIm91dC5cIjogMTAsXG4gICAgXCJub3ZlbWJyb1wiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJyb1wiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiWzAtOV17MSw0fSg/IVteXFxcXHNdXFxcXGQpKD86XFxcXHMqW2F8ZF1cXFxcLj9cXFxccypjXFxcXC4/fFxcXFxzKmFcXFxcLj9cXFxccypkXFxcXC4/KT9cIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2gubWF0Y2goL15bMC05XXsxLDR9JC8pKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9hXFwuP1xccypjXFwuPy9pKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL2FcXC4/XFxzKmNcXC4/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNzYWRvfHByW2/Ds114aW1vKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGVzdGV8ZXN0YXxwYXNzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YW8/fMOgcz98ZGFzfGRhfGRlfGRvKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/Om8pP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfMOgKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWdvcmF8aG9qZXxhbWFuaGF8YW1hbmjDo3xvbnRlbSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZ29yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG9qZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaMOjXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9udGVtXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hbmhhfG1hbmjDo3x0YXJkZXxtZWlhLW5vaXRlfG1laW8tZGlhfG5vaXRlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpYS1ub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpby1kaWFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBQVFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IFBUQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgUFRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvdHwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihvbXxuYXx2b29yfGluIGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhudXx2YW5kYWFnfG1vcmdlbnxtb3JnZW5kfGdpc3RlcmVuKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm51XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5kYWFnXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9NRU5UX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKGRlemUpP1xccyoobmFtaWRkYWd8YXZvbmR8bWlkZGVybmFjaHR8b2NodGVuZHxtaWRkYWd8J3MgbWlkZGFnc3wncyBhdm9uZHN8J3Mgb2NodGVuZHMpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdID09PSBcImRlemVcIikge1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbTU9NRU5UX0dST1VQXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBuYW1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9hZnRlcm5vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBhdm9uZHMnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG9jaHRlbmRzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgem9uZGFnOiAwLFxuICAgIHpvbjogMCxcbiAgICBcInpvbi5cIjogMCxcbiAgICB6bzogMCxcbiAgICBcInpvLlwiOiAwLFxuICAgIG1hYW5kYWc6IDEsXG4gICAgbWE6IDEsXG4gICAgXCJtYS5cIjogMSxcbiAgICBkaW5zZGFnOiAyLFxuICAgIGRpbjogMixcbiAgICBcImRpbi5cIjogMixcbiAgICBkaTogMixcbiAgICBcImRpLlwiOiAyLFxuICAgIHdvZW5zZGFnOiAzLFxuICAgIHdvZTogMyxcbiAgICBcIndvZS5cIjogMyxcbiAgICB3bzogMyxcbiAgICBcIndvLlwiOiAzLFxuICAgIGRvbmRlcmRhZzogNCxcbiAgICBkb25kOiA0LFxuICAgIFwiZG9uZC5cIjogNCxcbiAgICBkbzogNCxcbiAgICBcImRvLlwiOiA0LFxuICAgIHZyaWpkYWc6IDUsXG4gICAgdnJpajogNSxcbiAgICBcInZyaWouXCI6IDUsXG4gICAgdnI6IDUsXG4gICAgXCJ2ci5cIjogNSxcbiAgICB6YXRlcmRhZzogNixcbiAgICB6YXQ6IDYsXG4gICAgXCJ6YXQuXCI6IDYsXG4gICAgXCJ6YVwiOiA2LFxuICAgIFwiemEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyaTogMSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmVicnVhcmk6IDIsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hYXJ0OiAzLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBtcnQ6IDMsXG4gICAgXCJtcnQuXCI6IDMsXG4gICAgYXByaWw6IDQsXG4gICAgYXByOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIG1laTogNSxcbiAgICBqdW5pOiA2LFxuICAgIGp1bjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBqdWxpOiA3LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWd1c3R1czogOCxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwdGVtYmVyOiA5LFxuICAgIHNlcDogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBzZXB0OiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBva3RvYmVyOiAxMCxcbiAgICBva3Q6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBlZW46IDEsXG4gICAgdHdlZTogMixcbiAgICBkcmllOiAzLFxuICAgIHZpZXI6IDQsXG4gICAgdmlqZjogNSxcbiAgICB6ZXM6IDYsXG4gICAgemV2ZW46IDcsXG4gICAgYWNodDogOCxcbiAgICBuZWdlbjogOSxcbiAgICB0aWVuOiAxMCxcbiAgICBlbGY6IDExLFxuICAgIHR3YWFsZjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlcnN0ZTogMSxcbiAgICB0d2VlZGU6IDIsXG4gICAgZGVyZGU6IDMsXG4gICAgdmllcmRlOiA0LFxuICAgIHZpamZkZTogNSxcbiAgICB6ZXNkZTogNixcbiAgICB6ZXZlbmRlOiA3LFxuICAgIGFjaHRzdGU6IDgsXG4gICAgbmVnZW5kZTogOSxcbiAgICB0aWVuZGU6IDEwLFxuICAgIGVsZmRlOiAxMSxcbiAgICB0d2FhbGZkZTogMTIsXG4gICAgZGVydGllbmRlOiAxMyxcbiAgICB2ZWVydGllbmRlOiAxNCxcbiAgICB2aWpmdGllbmRlOiAxNSxcbiAgICB6ZXN0aWVuZGU6IDE2LFxuICAgIHpldmVudGllbmRlOiAxNyxcbiAgICBhY2h0dGllbmRlOiAxOCxcbiAgICBuZWdlbnRpZW5kZTogMTksXG4gICAgdHdpbnRpZ3N0ZTogMjAsXG4gICAgXCJlZW5lbnR3aW50aWdzdGVcIjogMjEsXG4gICAgXCJ0d2Vlw6tudHdpbnRpZ3N0ZVwiOiAyMixcbiAgICBcImRyaWVlbnR3aW50aWdzdGVcIjogMjMsXG4gICAgXCJ2aWVyZW50d2ludGlnc3RlXCI6IDI0LFxuICAgIFwidmlqZmVudHdpbnRpZ3N0ZVwiOiAyNSxcbiAgICBcInplc2VudHdpbnRpZ3N0ZVwiOiAyNixcbiAgICBcInpldmVuZW50d2ludGlnc3RlXCI6IDI3LFxuICAgIFwiYWNodGVudHdpbnRpZ1wiOiAyOCxcbiAgICBcIm5lZ2VuZW50d2ludGlnXCI6IDI5LFxuICAgIFwiZGVydGlnc3RlXCI6IDMwLFxuICAgIFwiZWVuZW5kZXJ0aWdzdGVcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHNlYzogXCJzZWNvbmRcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dDogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dGplOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIGhyOiBcImhvdXJcIixcbiAgICBocnM6IFwiaG91clwiLFxuICAgIHV1cjogXCJob3VyXCIsXG4gICAgdTogXCJob3VyXCIsXG4gICAgdXJlbjogXCJob3VyXCIsXG4gICAgZGFnOiBcImRheVwiLFxuICAgIGRhZ2VuOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdla2VuOiBcIndlZWtcIixcbiAgICBtYWFuZDogXCJtb250aFwiLFxuICAgIG1hYW5kZW46IFwibW9udGhcIixcbiAgICBqYWFyOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFyZW46IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStbXFxcXC4sXVswLTldK3xoYWx2ZT98aGFsZnxwYWFyKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwicGFhclwiKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiaGFsZlwiIHx8IG51bS5tYXRjaCgvaGFsdmU/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzpzdGV8ZGUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3RlfGRlKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OnZvb3IgQ2hyaXN0dXN8bmEgQ2hyaXN0dXMpfFsxLTJdWzAtOV17M318WzUtOV1bMC05XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvdm9vciBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvdm9vciBDaHJpc3R1cy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvbmEgQ2hyaXN0dXMvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL25hIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmJpbm5lbnxpbilcXFxccyopP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpiaW5uZW58aW58YmlubmVuIGRlfHZvb3IpXFxcXHMqYCArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBgKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi8uLi9ubC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvcFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkZXplfHZvcmlnZXx2b2xnZW5kZSlcXFxccyooPzp3ZWVrXFxcXHMqKT8pP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvcmlnZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvbGdlbmRlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKD86XFxcXHMqXCIgK1xuICAgIFwiKD86dG90fFxcXFwtfFxcXFzigJN8dW50aWx8dGhyb3VnaHx0aWxsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/Oi18L3xcXFxccyooPzpvZik/XFxcXHMqKVwiICtcbiAgICBcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzotfC98LD9cXFxccyopXCIgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Om9tKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8b218XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OnV1cikpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfT0ZfREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZ2lzdGVyZW58bW9yZ2VufHZhbikob2NodGVuZHxtaWRkYWd8bmFtaWRkYWd8YXZvbmR8bmFjaHQpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXRlVGV4dCA9IG1hdGNoW0RBVEVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUZXh0ID0gbWF0Y2hbVElNRV9PRl9EQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgc3dpdGNoIChkYXRlVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImdpc3RlcmVuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5cIjpcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9jaHRlbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGRpdHxkZXplfHZvcmlnfGFmZ2Vsb3BlbnwoPzphYW4pP2tvbWVuZHxvdmVyfFxcXFwrfC0pZT9cXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUFJFRklYX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9VTklUX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbVElNRV9VTklUX1dPUkRfR1JPVVBdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ2b3JpZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImFmZ2Vsb3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8KD86YWFuKT9rb21lbmR8dm9sZ2VuZHxhZmdlbG9wZW58dm9yaWcpZT9cXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwidm9sZ2VuZFwiIHx8IG1vZGlmaWVyID09IFwia29tZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJhYW5rb21lbmRcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwiYWZnZWxvcGVuXCIgfHwgbW9kaWZpZXIgPT0gXCJ2b3JpZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21hYW5kL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvamFhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoPzpnZWxlZGVufHZvb3J8ZWVyZGVyKSg/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcImdlbGVkZW4oPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiKGxhdGVyfG5hfHZhbmFmIG51fHZvb3J0YWFufHZvb3J1aXR8dWl0KVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8dmFuYWYgbnUpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL05MTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxEYXRlVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTENhc3VhbFllYXJNb250aERheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IE5VTUJFUiA9IHtcbiAgICBcIumbtlwiOiAwLFxuICAgIFwi44CHXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LikXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuW5tCk/XCIgK1xuICAgICAgICAgICAgXCIoPzpbXFxcXHN8LHzvvIxdKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17MSwzfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzlj7cpP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85YegKSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrkuKopP1wiICtcbiAgICBcIijnp5IoPzrpkp8pP3zliIbpkp985bCP5pe2fOmSn3zml6V85aSpfOaYn+acn3znpLzmi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86L+HKT/lkI58KD865LmLKT/lhoUpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5YegXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+ekvOaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpLxcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumSn1wiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LiLfOi/mSkoPzrkuKopPyg/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLov5lcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuS7jnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD8654K5fOaXtnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSAwO1xuICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgICAgICBob3VyID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmraNcIiB8fCBzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5pW0XCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEwMCkge1xuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gcmVzdWx0LnRleHQgKyBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09IDE7XG4gICAgICAgICAgICBpZiAoc3RhcnRBdFBNICYmIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID4gaG91cikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZC5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgcmVzdWx0LmVuZC5nZXQoXCJkYXlcIikgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2guZ3JvdXBzLndlZWtkYXk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfT0ZGU0VUW2RheU9mV2Vla107XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmIC0gNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmICsgNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRpZmYpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOiAjOWutnznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIiB8fCB0aW1lMSA9PSBcIuacnVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLmnJ1cIiB8fCB0aW1lMiA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5LiLXCIgfHwgdGltZTIgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLmnJ1cIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIgfHwgdGltZTMgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LitXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWknFwiIHx8IHRpbWUzID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5YWpXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbiAgICBcIuW7v1wiOiAyMCxcbiAgICBcIuWNhVwiOiAzMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArIFwiXXsxLDJ9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrml6V86JmfKT9cIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG1vbnRoKSlcbiAgICAgICAgICAgIG1vbnRoID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGRheSkpXG4gICAgICAgICAgICAgICAgZGF5ID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHllYXIpKVxuICAgICAgICAgICAgICAgIHllYXIgPSB6aFN0cmluZ1RvWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50RGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIHpoU3RyaW5nVG9OdW1iZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSt85Y2KfOW5vikoPzpcXFxccyopXCIgK1xuICAgIFwiKD865YCLKT9cIiArXG4gICAgXCIo56eSKD866ZCYKT985YiG6ZCYfOWwj+aZgnzpkJh85pelfOWkqXzmmJ/mnJ9856au5oucfOaciHzlubQpXCIgK1xuICAgIFwiKD86KD865LmLfOmBjik/5b6MfCg/OuS5iyk/5YWnKVwiLCBcImlcIik7XG5jb25zdCBOVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgVU5JVF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIG51bWJlciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IG1hdGNoW05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBpZiAoc3RyaW5nID09PSBcIuW5vlwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFtVTklUX0dST1VQXTtcbiAgICAgICAgY29uc3QgdW5pdEFiYnIgPSB1bml0WzBdO1xuICAgICAgICBpZiAodW5pdEFiYnIubWF0Y2goL1vml6XlpKnmmJ/npq7mnIjlubRdLykpIHtcbiAgICAgICAgICAgIGlmICh1bml0QWJiciA9PSBcIuaXpVwiIHx8IHVuaXRBYmJyID09IFwi5aSpXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5kYXkgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaYn1wiIHx8IHVuaXRBYmJyID09IFwi56auXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmnIhcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlubRcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLnllYXIgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0QWJiciA9PSBcIuenklwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLliIZcIikge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bCPXCIgfHwgdW5pdEFiYnIgPT0gXCLpkJhcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwic2Vjb25kXCIsIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzxwcmVmaXg+5LiKfOS7inzkuIt86YCZfOWRoikoPzrlgIspPyg/OuaYn+acn3znpq7mi5x86YCxKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLku4pcIiB8fCBwcmVmaXggPT0gXCLpgJlcIiB8fCBwcmVmaXggPT0gXCLlkaJcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OueUsXzlvp586IeqKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/Oum7nnzmmYJ8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD865YiwfOiHs3xcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgREFZX0dST1VQXzEgPSAxO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8xID0gMjtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMiA9IDM7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDQ7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzMgPSA1O1xuY29uc3QgSE9VUl9HUk9VUCA9IDY7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSA3O1xuY29uc3QgU0VDT05EX0dST1VQID0gODtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFwiKClcIjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAwICYmIGNvbnRleHQudGV4dFttYXRjaC5pbmRleCAtIDFdLm1hdGNoKC9cXHcvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgdmFyIHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICB2YXIgemhBTVBNMyA9IHpoQU1QTVN0cmluZzNbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMyA9PSBcIuS4ilwiIHx8IHpoQU1QTTMgPT0gXCLmnJ1cIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmPXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTEgPSB6aEFNUE1TdHJpbmcxWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTEgPT0gXCLmnJ1cIiB8fCB6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHxcXC18XFx+fO+9nnzvvI1844O8KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50V2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBoYW50ID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBOT1dfR1JPVVAgPSAxO1xuY29uc3QgREFZX0dST1VQXzEgPSAyO1xuY29uc3QgVElNRV9HUk9VUF8xID0gMztcbmNvbnN0IFRJTUVfR1JPVVBfMiA9IDQ7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDU7XG5jb25zdCBUSU1FX0dST1VQXzMgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIijnjrDlnKh856uLKD865Yi7fOWNsyl85Y2z5Yi7KXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbVElNRV9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzIgPSBtYXRjaFtUSU1FX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgdGltZTIgPSB0aW1lU3RyaW5nMlswXTtcbiAgICAgICAgICAgIGlmICh0aW1lMiA9PSBcIuaXqVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHwtfH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnMgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0ICogYXMgaGFudCBmcm9tIFwiLi9oYW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBhcyBoYW5zIGZyb20gXCIuL2hhbnMvaW5kZXguanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFudENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnREYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICDQstC+0YHQutGA0LXRgdC10L3RjNC1OiAwLFxuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0Y86IDAsXG4gICAg0LLRgdC6OiAwLFxuICAgIFwi0LLRgdC6LlwiOiAwLFxuICAgINC/0L7QvdC10LTQtdC70YzQvdC40Lo6IDEsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQutCwOiAxLFxuICAgINC/0L06IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgINCy0YLQvtGA0L3QuNC6OiAyLFxuICAgINCy0YLQvtGA0L3QuNC60LA6IDIsXG4gICAg0LLRgjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAg0YHRgNC10LTQsDogMyxcbiAgICDRgdGA0LXQtNGLOiAzLFxuICAgINGB0YDQtdC00YM6IDMsXG4gICAg0YHRgDogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAg0YfQtdGC0LLQtdGA0LM6IDQsXG4gICAg0YfQtdGC0LLQtdGA0LPQsDogNCxcbiAgICDRh9GCOiA0LFxuICAgIFwi0YfRgi5cIjogNCxcbiAgICDQv9GP0YLQvdC40YbQsDogNSxcbiAgICDQv9GP0YLQvdC40YbRgzogNSxcbiAgICDQv9GP0YLQvdC40YbRizogNSxcbiAgICDQv9GCOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICDRgdGD0LHQsdC+0YLQsDogNixcbiAgICDRgdGD0LHQsdC+0YLRgzogNixcbiAgICDRgdGD0LHQsdC+0YLRizogNixcbiAgICDRgdCxOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAg0Y/QvdCy0LDRgNGMOiAxLFxuICAgINGP0L3QstCw0YDRjzogMSxcbiAgICDRj9C90LLQsNGA0LU6IDEsXG4gICAg0YTQtdCy0YDQsNC70Yw6IDIsXG4gICAg0YTQtdCy0YDQsNC70Y86IDIsXG4gICAg0YTQtdCy0YDQsNC70LU6IDIsXG4gICAg0LzQsNGA0YI6IDMsXG4gICAg0LzQsNGA0YLQsDogMyxcbiAgICDQvNCw0YDRgtC1OiAzLFxuICAgINCw0L/RgNC10LvRjDogNCxcbiAgICDQsNC/0YDQtdC70Y86IDQsXG4gICAg0LDQv9GA0LXQu9C1OiA0LFxuICAgINC80LDQuTogNSxcbiAgICDQvNCw0Y86IDUsXG4gICAg0LzQsNC1OiA1LFxuICAgINC40Y7QvdGMOiA2LFxuICAgINC40Y7QvdGPOiA2LFxuICAgINC40Y7QvdC1OiA2LFxuICAgINC40Y7Qu9GMOiA3LFxuICAgINC40Y7Qu9GPOiA3LFxuICAgINC40Y7Qu9C1OiA3LFxuICAgINCw0LLQs9GD0YHRgjogOCxcbiAgICDQsNCy0LPRg9GB0YLQsDogOCxcbiAgICDQsNCy0LPRg9GB0YLQtTogOCxcbiAgICDRgdC10L3RgtGP0LHRgNGMOiA5LFxuICAgINGB0LXQvdGC0Y/QsdGA0Y86IDksXG4gICAg0YHQtdC90YLRj9Cx0YDQtTogOSxcbiAgICDQvtC60YLRj9Cx0YDRjDogMTAsXG4gICAg0L7QutGC0Y/QsdGA0Y86IDEwLFxuICAgINC+0LrRgtGP0LHRgNC1OiAxMCxcbiAgICDQvdC+0Y/QsdGA0Yw6IDExLFxuICAgINC90L7Rj9Cx0YDRjzogMTEsXG4gICAg0L3QvtGP0LHRgNC1OiAxMSxcbiAgICDQtNC10LrQsNCx0YDRjDogMTIsXG4gICAg0LTQtdC60LDQsdGA0Y86IDEyLFxuICAgINC00LXQutCw0LHRgNC1OiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICDRj9C90LI6IDEsXG4gICAgXCLRj9C90LIuXCI6IDEsXG4gICAg0YTQtdCyOiAyLFxuICAgIFwi0YTQtdCyLlwiOiAyLFxuICAgINC80LDRgDogMyxcbiAgICBcItC80LDRgC5cIjogMyxcbiAgICDQsNC/0YA6IDQsXG4gICAgXCLQsNC/0YAuXCI6IDQsXG4gICAg0LDQstCzOiA4LFxuICAgIFwi0LDQstCzLlwiOiA4LFxuICAgINGB0LXQvTogOSxcbiAgICBcItGB0LXQvS5cIjogOSxcbiAgICDQvtC60YI6IDEwLFxuICAgIFwi0L7QutGCLlwiOiAxMCxcbiAgICDQvdC+0Y86IDExLFxuICAgIFwi0L3QvtGPLlwiOiAxMSxcbiAgICDQtNC10Lo6IDEyLFxuICAgIFwi0LTQtdC6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L7QtNC40L06IDEsXG4gICAg0L7QtNC90LA6IDEsXG4gICAg0L7QtNC90L7QuTogMSxcbiAgICDQvtC00L3RgzogMSxcbiAgICDQtNCy0LU6IDIsXG4gICAg0LTQstCwOiAyLFxuICAgINC00LLRg9GFOiAyLFxuICAgINGC0YDQuDogMyxcbiAgICDRgtGA0LXRhTogMyxcbiAgICDRgtGA0ZHRhTogMyxcbiAgICDRh9C10YLRi9GA0LU6IDQsXG4gICAg0YfQtdGC0YvRgNC10YU6IDQsXG4gICAg0YfQtdGC0YvRgNGR0YU6IDQsXG4gICAg0L/Rj9GC0Yw6IDUsXG4gICAg0L/Rj9GC0Lg6IDUsXG4gICAg0YjQtdGB0YLRjDogNixcbiAgICDRiNC10YHRgtC4OiA2LFxuICAgINGB0LXQvNGMOiA3LFxuICAgINGB0LXQvNC4OiA3LFxuICAgINCy0L7RgdC10LzRjDogOCxcbiAgICDQstC+0YHRjNC80Lg6IDgsXG4gICAg0LTQtdCy0Y/RgtGMOiA5LFxuICAgINC00LXQstGP0YLQuDogOSxcbiAgICDQtNC10YHRj9GC0Yw6IDEwLFxuICAgINC00LXRgdGP0YLQuDogMTAsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLRjDogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQuDogMTEsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Yw6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC4OiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L/QtdGA0LLQvtC1OiAxLFxuICAgINC/0LXRgNCy0L7Qs9C+OiAxLFxuICAgINCy0YLQvtGA0L7QtTogMixcbiAgICDQstGC0L7RgNC+0LPQvjogMixcbiAgICDRgtGA0LXRgtGM0LU6IDMsXG4gICAg0YLRgNC10YLRjNC10LPQvjogMyxcbiAgICDRh9C10YLQstC10YDRgtC+0LU6IDQsXG4gICAg0YfQtdGC0LLQtdGA0YLQvtCz0L46IDQsXG4gICAg0L/Rj9GC0L7QtTogNSxcbiAgICDQv9GP0YLQvtCz0L46IDUsXG4gICAg0YjQtdGB0YLQvtC1OiA2LFxuICAgINGI0LXRgdGC0L7Qs9C+OiA2LFxuICAgINGB0LXQtNGM0LzQvtC1OiA3LFxuICAgINGB0LXQtNGM0LzQvtCz0L46IDcsXG4gICAg0LLQvtGB0YzQvNC+0LU6IDgsXG4gICAg0LLQvtGB0YzQvNC+0LPQvjogOCxcbiAgICDQtNC10LLRj9GC0L7QtTogOSxcbiAgICDQtNC10LLRj9GC0L7Qs9C+OiA5LFxuICAgINC00LXRgdGP0YLQvtC1OiAxMCxcbiAgICDQtNC10YHRj9GC0L7Qs9C+OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC+0LU6IDExLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7Qs9C+OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtC1OiAxMixcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtCz0L46IDEyLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LU6IDEzLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LPQvjogMTMsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LU6IDE0LFxuICAgINGH0LXRgtGL0YDQvdCw0LTRhtCw0YLQvtCz0L46IDE0LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE1LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTUsXG4gICAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQvtC1OiAxNixcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LPQvjogMTYsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTcsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxNyxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTgsXG4gICAg0LLQvtGB0LXQvNC90LDQtNGG0LDRgtC+0LPQvjogMTgsXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE5LFxuICAgINC00LXQstGP0YLQvdCw0LTRhtCw0YLQvtCz0L46IDE5LFxuICAgINC00LLQsNC00YbQsNGC0L7QtTogMjAsXG4gICAg0LTQstCw0LTRhtCw0YLQvtCz0L46IDIwLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstGC0L7RgNC+0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgtGA0LXRgtGM0LVcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtdCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGH0LXRgtCy0LXRgNGC0L7QtVwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LPQvlwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YjQtdGB0YLQvtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LVcIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGB0LXQtNGM0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7QtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LTQtdCy0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7QtVwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7Qs9C+XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGLOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutCwOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQtdC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINC80LjQvTogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0LA6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgjogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0Ys6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutC4OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LXQujogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINGH0LDRgTogXCJob3VyXCIsXG4gICAg0YfQsNGB0L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LA6IFwiaG91clwiLFxuICAgINGH0LDRgdGDOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQutCwOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LU6IFwiaG91clwiLFxuICAgINGH0LDRgdC40Lo6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90LXQuTogXCJkYXlcIixcbiAgICDRgdGD0YLQvtC6OiBcImRheVwiLFxuICAgINGB0YPRgtC60Lg6IFwiZGF5XCIsXG4gICAg0L3QtdC00LXQu9GPOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GOOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Yw6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60Lg6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtdC6OiBcIndlZWtcIixcbiAgICDQvNC10YHRj9GGOiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC1OiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC10LI6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LA6IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQtTogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQvtCyOiBcInF1YXJ0ZXJcIixcbiAgICDQs9C+0LQ6IFwieWVhclwiLFxuICAgINCz0L7QtNCwOiBcInllYXJcIixcbiAgICDQs9C+0LTRgzogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00L7QsjogXCJ5ZWFyXCIsXG4gICAg0LvQtdGCOiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC6OiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC60LA6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQvtCyOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt80L/QvtC7fNC90LXRgdC60L7Qu9GM0LrQvnzQv9Cw0YAoPzrRi3zRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0L3QtdGB0LrQvtC70YzQutC+LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QvtC7LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LV80L7QtSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5jb25zdCB5ZWFyID0gXCIoPzpcXFxccysoPzrQs9C+0LTRg3zQs9C+0LTQsHzQs9C+0LR80LN80LMuKSk/XCI7XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfSR7eWVhcn1cXFxccyooPzrQvS7RjS580LTQviDQvS7RjS580L0uINGNLnzQtNC+INC9LiDRjS4pfFsxLTJdWzAtOV17M30ke3llYXJ9fFs1LTldWzAtOV0ke3llYXJ9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC8o0LPQvtC0fNCz0L7QtNCwfNCzfNCzLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0Y0ufNC00L4g0L0uINGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0Y0ufNC9LtGNLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0Y0ufNC9LtGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L7QutC+0LvQvnzQv9GA0LjQvNC10YDQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgUkVHRVhfUEFSVFMuZmxhZ3MpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtCyINGC0LXRh9C10L3QuNC1fNCyINGC0LXRh9C10L3QuNC4KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrRgSk/XFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgXFxcXHN7MCwzfSg/OtC/0L58LXzigJN80LTQvik/XFxcXHN7MCwzfWAgK1xuICAgICAgICAgICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3xcXFxcc3swLDN9KD86b2YpP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgICAgICAgICBgKT9gO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmZsYWdzO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfCg/OlteXFxcXHB7TH1cXFxccHtOfV9dKSlgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIGBcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx80LTQvnzQuHzQv9C+fFxcXFw/KVxcXFxzKmA7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86KD860LJ80YEpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRg9GC0YDQsHzQstC10YfQtdGA0LB80L/QvtGB0LvQtSDQv9C+0LvRg9C00L3RjykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C10YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L7RgdC70LUg0L/QvtC70YPQtNC90Y9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90L3QsNC30LDQtCg/PSg/OlxcXFxXfCQpKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo0Lgg0LTQvnzQuCDQv9C+fNC00L580L/QvnwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeXFxcXHMqKFR80LJ8LHwtKT9cXFxccyokYCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBfNGB0L4pP1xcXFxzKijRgdC10LPQvtC00L3Rj3zQstGH0LXRgNCwfNC30LDQstGC0YDQsHzQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7Qt9Cw0L/QvtC30LDQstGH0LXRgNCwfNC/0L7Qt9Cw0LLRh9C10YDQsClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcItGB0LXQs9C+0LTQvdGPXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRgdC10LnRh9Cw0YF80L/RgNC+0YjQu9GL0LxcXFxccyrQstC10YfQtdGA0L7QvHzQv9GA0L7RiNC70L7QuVxcXFxzKtC90L7Rh9GM0Y580YHQu9C10LTRg9GO0YnQtdC5XFxcXHMq0L3QvtGH0YzRjnzRgdC10LPQvtC00L3Rj1xcXFxzKtC90L7Rh9GM0Y580Y3RgtC+0LlcXFxccyrQvdC+0YfRjNGOfNC90L7Rh9GM0Y580Y3RgtC40Lwg0YPRgtGA0L7QvHzRg9GC0YDQvtC8fNGD0YLRgNCwfNCyXFxcXHMq0L/QvtC70LTQtdC90Yx80LLQtdGH0LXRgNC+0Lx80LLQtdGH0LXRgNCwfNCyXFxcXHMq0L/QvtC70L3QvtGH0YwpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0YHQtdC50YfQsNGBXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0L7QvFwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItGD0YLRgNC+0LxcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C00LXQvdGMLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvQvtC5XFxzKtC90L7Rh9GM0Y4vKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/Qv9GA0L7RiNC70YvQvFxccyrQstC10YfQtdGA0L7QvC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RgdC70LXQtNGD0Y7RidC10LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QslxccyrQv9C+0LvQvdC+0YfRjC8pIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC90L7Rh9GM0Y5cIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD86KNGN0YLRg3zRjdGC0L7RgnzQv9GA0L7RiNC70YvQuXzQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnRg9GOfNGB0LvQtdC00YPRjtGJ0LXQs9C+KVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMq0L3QsFxcXFxzKijRjdGC0L7QuXzQv9GA0L7RiNC70L7QuXzRgdC70LXQtNGD0Y7RidC10LkpXFxcXHMq0L3QtdC00LXQu9C1KT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvRi9C5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GD0Y5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LjQuVwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidGD0Y5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LXQs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0Y3RgtC+0YJcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0YNcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNCyINC/0YDQvtGI0LvQvtC8fNC90LAg0L/RgNC+0YjQu9C+0Ll80L3QsCDRgdC70LXQtNGD0Y7RidC10Ll80LIg0YHQu9C10LTRg9GO0YnQtdC8fNC90LAg0Y3RgtC+0Ll80LIg0Y3RgtC+0LwpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDRgdC70LXQtNGD0Y7RidC10LlcIiB8fCBtb2RpZmllciA9PSBcItCyINGB0LvQtdC00YPRjtGJ0LXQvFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQsiDQv9GA0L7RiNC70L7QvFwiIHx8IG1vZGlmaWVyID09IFwi0L3QsCDQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGN0YLQuHzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0LV80YHQu9C10LTRg9GO0YnQuNC1fNC/0L7RgdC70LV80YHQv9GD0YHRgtGPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC00L3QuNC1XCI6XG4gICAgICAgICAgICBjYXNlIFwi0L/RgNC+0YjQu9GL0LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKHRydWUpLFxuICAgICAgICAgICAgbmV3IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZXNcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVzXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1pw6lyY29sZXNcIjogMyxcbiAgICBcIm1pZXJjb2xlc1wiOiAzLFxuICAgIFwibWnDqVwiOiAzLFxuICAgIFwibWllXCI6IDMsXG4gICAgXCJqdWV2ZXNcIjogNCxcbiAgICBcImp1ZVwiOiA0LFxuICAgIFwidmllcm5lc1wiOiA1LFxuICAgIFwidmllXCI6IDUsXG4gICAgXCJzw6FiYWRvXCI6IDYsXG4gICAgXCJzYWJhZG9cIjogNixcbiAgICBcInPDoWJcIjogNixcbiAgICBcInNhYlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5lcm9cIjogMSxcbiAgICBcImVuZVwiOiAxLFxuICAgIFwiZW5lLlwiOiAxLFxuICAgIFwiZmVicmVyb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJ6b1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYXlvXCI6IDUsXG4gICAgXCJtYXlcIjogNSxcbiAgICBcIm1heS5cIjogNSxcbiAgICBcImp1bmlvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXB0aWVtYnJlXCI6IDksXG4gICAgXCJzZXRpZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwib2N0dWJyZVwiOiAxMCxcbiAgICBcIm9jdFwiOiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgXCJub3ZpZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljaWVtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImRvc1wiOiAyLFxuICAgIFwidHJlc1wiOiAzLFxuICAgIFwiY3VhdHJvXCI6IDQsXG4gICAgXCJjaW5jb1wiOiA1LFxuICAgIFwic2Vpc1wiOiA2LFxuICAgIFwic2lldGVcIjogNyxcbiAgICBcIm9jaG9cIjogOCxcbiAgICBcIm51ZXZlXCI6IDksXG4gICAgXCJkaWV6XCI6IDEwLFxuICAgIFwib25jZVwiOiAxMSxcbiAgICBcImRvY2VcIjogMTIsXG4gICAgXCJ0cmVjZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9cIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9zXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0b1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYVwiOiBcImhvdXJcIixcbiAgICBcImhvcmFzXCI6IFwiaG91clwiLFxuICAgIFwiZMOtYVwiOiBcImRheVwiLFxuICAgIFwiZMOtYXNcIjogXCJkYXlcIixcbiAgICBcInNlbWFuYVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFuYXNcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNcIjogXCJtb250aFwiLFxuICAgIFwibWVzZXNcIjogXCJtb250aFwiLFxuICAgIFwiY3VhcnRvXCI6IFwicXVhcnRlclwiLFxuICAgIFwiY3VhcnRvc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImHDsW9cIjogXCJ5ZWFyXCIsXG4gICAgXCJhw7Fvc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW4/fHVubz98dW5hP3xhbGd1bm9zP3x1bm9zP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIiB8fCBudW0gPT09IFwidW5vXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxndW5vcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC91bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21lZGlhPy8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc2Fkb3xwclvDs29deGltbylcXFxccypzZW1hbmEpP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG5vcm0gPSBwcmVmaXggfHwgcG9zdGZpeCB8fCBcIlwiO1xuICAgICAgICBub3JtID0gbm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobm9ybSA9PSBcInBhc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXNsYXN8ZGVzbGFzfGxhcz98YWw/fGRlfGRlbClcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfGEoPzpsKT98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86LHxkZXxhc2xhc3xhKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU0Nhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWhvcmF8aG95fG1hw7FhbmF8YXllcikoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhaG9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG95XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1hw7FhbmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKD86ZXN0YVxccyopPyhtYcOxYW5hfHRhcmRlfG1lZGlhbm9jaGV8bWVkaW9kaWF8bWVkaW9kw61hfG5vY2hlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2NoZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpYW5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpb2RpYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZMOtYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmVufHBvcnxkdXJhbnRlfGRlfGRlbnRybyBkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FU01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVTQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRVNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcItC90LXQtNGW0LvRj1wiOiAwLFxuICAgIFwi0L3QtdC00ZbQu9GWXCI6IDAsXG4gICAgXCLQvdC10LTRltC70Y5cIjogMCxcbiAgICBcItC90LRcIjogMCxcbiAgICBcItC90LQuXCI6IDAsXG4gICAgXCLQv9C+0L3QtdC00ZbQu9C+0LpcIjogMSxcbiAgICBcItC/0L7QvdC10LTRltC70LrQsFwiOiAxLFxuICAgIFwi0L/QvVwiOiAxLFxuICAgIFwi0L/QvS5cIjogMSxcbiAgICBcItCy0ZbQstGC0L7RgNC+0LpcIjogMixcbiAgICBcItCy0ZbQstGC0L7RgNC60LBcIjogMixcbiAgICBcItCy0YJcIjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAgXCLRgdC10YDQtdC00LBcIjogMyxcbiAgICBcItGB0LXRgNC10LTQuFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNGDXCI6IDMsXG4gICAgXCLRgdGAXCI6IDMsXG4gICAgXCLRgdGALlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGAXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9CwXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9GDXCI6IDQsXG4gICAgXCLRh9GCXCI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGPXCI6IDUsXG4gICAgXCLQvyfRj9GC0L3QuNGG0ZZcIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRjlwiOiA1LFxuICAgIFwi0L/RglwiOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICBcItGB0YPQsdC+0YLQsFwiOiA2LFxuICAgIFwi0YHRg9Cx0L7RgtC4XCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0YNcIjogNixcbiAgICBcItGB0LFcIjogNixcbiAgICBcItGB0LEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0YHRltGH0LXQvdGMXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGPXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGWXCI6IDEsXG4gICAgXCLQu9GO0YLQuNC5XCI6IDIsXG4gICAgXCLQu9GO0YLQvtCz0L5cIjogMixcbiAgICBcItC70Y7RgtC+0LzRg1wiOiAyLFxuICAgIFwi0LHQtdGA0LXQt9C10L3RjFwiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90Y9cIjogMyxcbiAgICBcItCx0LXRgNC10LfQvdGWXCI6IDMsXG4gICAgXCLQutCy0ZbRgtC10L3RjFwiOiA0LFxuICAgIFwi0LrQstGW0YLQvdGPXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90ZZcIjogNCxcbiAgICBcItGC0YDQsNCy0LXQvdGMXCI6IDUsXG4gICAgXCLRgtGA0LDQstC90Y9cIjogNSxcbiAgICBcItGC0YDQsNCy0L3RllwiOiA1LFxuICAgIFwi0YfQtdGA0LLQtdC90YxcIjogNixcbiAgICBcItGH0LXRgNCy0L3Rj1wiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGWXCI6IDYsXG4gICAgXCLQu9C40L/QtdC90YxcIjogNyxcbiAgICBcItC70LjQv9C90Y9cIjogNyxcbiAgICBcItC70LjQv9C90ZZcIjogNyxcbiAgICBcItGB0LXRgNC/0LXQvdGMXCI6IDgsXG4gICAgXCLRgdC10YDQv9C90Y9cIjogOCxcbiAgICBcItGB0LXRgNC/0L3RllwiOiA4LFxuICAgIFwi0LLQtdGA0LXRgdC10L3RjFwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90Y9cIjogOSxcbiAgICBcItCy0LXRgNC10YHQvdGWXCI6IDksXG4gICAgXCLQttC+0LLRgtC10L3RjFwiOiAxMCxcbiAgICBcItC20L7QstGC0L3Rj1wiOiAxMCxcbiAgICBcItC20L7QstGC0L3RllwiOiAxMCxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LRcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00LBcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00YNcIjogMTEsXG4gICAgXCLQs9GA0YPQtNC10L3RjFwiOiAxMixcbiAgICBcItCz0YDRg9C00L3Rj1wiOiAxMixcbiAgICBcItCz0YDRg9C00L3RllwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcItGB0ZbRh1wiOiAxLFxuICAgIFwi0YHRltGHLlwiOiAxLFxuICAgIFwi0LvRjtGCXCI6IDIsXG4gICAgXCLQu9GO0YIuXCI6IDIsXG4gICAgXCLQsdC10YBcIjogMyxcbiAgICBcItCx0LXRgC5cIjogMyxcbiAgICBcItC60LLRltGCXCI6IDQsXG4gICAgXCLQutCy0ZbRgi5cIjogNCxcbiAgICBcItGC0YDQsNCyXCI6IDUsXG4gICAgXCLRgtGA0LDQsi5cIjogNSxcbiAgICBcItGH0LXRgNCyXCI6IDYsXG4gICAgXCLRh9C10YDQsi5cIjogNixcbiAgICBcItC70LjQv1wiOiA3LFxuICAgIFwi0LvQuNC/LlwiOiA3LFxuICAgIFwi0YHQtdGA0L9cIjogOCxcbiAgICBcItGB0LXRgNC/LlwiOiA4LFxuICAgIFwi0YHQtdGAXCI6IDgsXG4gICAgXCJj0LXRgC5cIjogOCxcbiAgICBcItCy0LXRgFwiOiA5LFxuICAgIFwi0LLQtdGALlwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgVwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgS5cIjogOSxcbiAgICBcItC20L7QstGCXCI6IDEwLFxuICAgIFwi0LbQvtCy0YIuXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/XCI6IDExLFxuICAgIFwi0LvQuNGB0YLQvtC/LlwiOiAxMSxcbiAgICBcItCz0YDRg9C0XCI6IDEyLFxuICAgIFwi0LPRgNGD0LQuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC+0LTQuNC9XCI6IDEsXG4gICAgXCLQvtC00L3QsFwiOiAxLFxuICAgIFwi0L7QtNC90L7Rl1wiOiAxLFxuICAgIFwi0L7QtNC90YNcIjogMSxcbiAgICBcItC00LLRllwiOiAyLFxuICAgIFwi0LTQstCwXCI6IDIsXG4gICAgXCLQtNCy0L7RhVwiOiAyLFxuICAgIFwi0YLRgNC4XCI6IDMsXG4gICAgXCLRgtGA0YzQvtGFXCI6IDMsXG4gICAgXCLRh9C+0YLQuNGA0LhcIjogNCxcbiAgICBcItGH0L7RgtC40YDRjNC+0YVcIjogNCxcbiAgICBcItC/J9GP0YLRjFwiOiA1LFxuICAgIFwi0L8n0Y/RgtC4XCI6IDUsXG4gICAgXCLRiNGW0YHRgtGMXCI6IDYsXG4gICAgXCLRiNC10YHRgtC4XCI6IDYsXG4gICAgXCLRgdGW0LxcIjogNyxcbiAgICBcItGB0LXQvNC4XCI6IDcsXG4gICAgXCLQstGW0YHRltC8XCI6IDgsXG4gICAgXCLQstC+0YHRjNC80LhcIjogOCxcbiAgICBcItC00LXQsifRj9GC0YxcIjogOSxcbiAgICBcItC00LXQsifRj9GC0LhcIjogOSxcbiAgICBcItC00LXRgdGP0YLRjFwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQuFwiOiAxMCxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtGMXCI6IDExLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LhcIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLRjFwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC4XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC/0LXRgNGI0LVcIjogMSxcbiAgICBcItC/0LXRgNGI0L7Qs9C+XCI6IDEsXG4gICAgXCLQtNGA0YPQs9C1XCI6IDIsXG4gICAgXCLQtNGA0YPQs9C+0LPQvlwiOiAyLFxuICAgIFwi0YLRgNC10YLRlFwiOiAzLFxuICAgIFwi0YLRgNC10YLRjNC+0LPQvlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQtVwiOiA0LFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogNCxcbiAgICBcItC/J9GP0YLQtVwiOiA1LFxuICAgIFwi0L8n0Y/RgtC+0LPQvlwiOiA1LFxuICAgIFwi0YjQvtGB0YLQtVwiOiA2LFxuICAgIFwi0YjQvtGB0YLQvtCz0L5cIjogNixcbiAgICBcItGB0YzQvtC80LVcIjogNyxcbiAgICBcItGB0YzQvtC80L7Qs9C+XCI6IDcsXG4gICAgXCLQstC+0YHRjNC80LVcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQvtCz0L5cIjogOCxcbiAgICBcItC00LXQsifRj9GC0LVcIjogOSxcbiAgICBcItC00LXQsifRj9GC0L7Qs9C+XCI6IDksXG4gICAgXCLQtNC10YHRj9GC0LVcIjogMTAsXG4gICAgXCLQtNC10YHRj9GC0L7Qs9C+XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LVcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLQtVwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMixcbiAgICBcItGC0YDQuNC90LDQtNGG0Y/RgtC1XCI6IDEzLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEzLFxuICAgIFwi0YfQvtGC0LjRgNC90LDQtNGG0Y/RgtC1XCI6IDE0LFxuICAgIFwi0YfQvtGC0LjQvdGA0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE0LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC1XCI6IDE1LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNSxcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0LVcIjogMTYsXG4gICAgXCLRiNGW0YHRgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNixcbiAgICBcItGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE3LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE3LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE4LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOCxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0LVcIjogMTksXG4gICAgXCLQtNC10LIn0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOSxcbiAgICBcItC00LLQsNC00YbRj9GC0LVcIjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtC+0LPQvlwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGUXCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGM0L7Qs9C+XCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L8n0Y/RgtC1XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINCy0L7RgdGM0LzQtVwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC+0LPQvlwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQvtCz0L5cIjogMjksXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtGP0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQvtC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINGF0LI6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LA6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LrQuDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINCz0L7QtDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdCwOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC9OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90Lg6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3RgzogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QvtC6OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60YM6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90ZbQsjogXCJkYXlcIixcbiAgICDQtNC90ZY6IFwiZGF5XCIsXG4gICAg0LTQvtCx0LA6IFwiZGF5XCIsXG4gICAg0LTQvtCx0YM6IFwiZGF5XCIsXG4gICAg0YLQuNC20LTQtdC90Yw6IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y46IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y86IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZY6IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZbQsjogXCJ3ZWVrXCIsXG4gICAg0LzRltGB0Y/RhtGMOiBcIm1vbnRoXCIsXG4gICAg0LzRltGB0Y/RhtGW0LI6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZY6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0Y86IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRgzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQsDogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRltCyOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GWOiBcInF1YXJ0ZXJcIixcbiAgICDRgNGW0Lo6IFwieWVhclwiLFxuICAgINGA0L7QutGDOiBcInllYXJcIixcbiAgICDRgNC+0YbRljogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60ZbQsjogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60Lg6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9GW0LJ80LTQtdC60ZbQu9GM0LrQsHzQv9Cw0YAoPzrRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0LTQtdC60ZbQu9GM0LrQsC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0ZbQsi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QsNGALykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OtCz0L580L7Qs9C+fNC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtGA0L7QutGDfNGA0ZbQunzRgHzRgC4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtC1LnzQtNC+INC9LtC1LnzQvS4g0LUufNC00L4g0L0uINC1Lil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgaWYgKC8o0YDRltC6fNGA0L7QutGDfNGAfNGALikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0LUufNC00L4g0L0uINC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0LUufNC9LtC1LikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0LUufNC9LtC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQsdC70LjQt9GM0LrQvnzQv9GA0LjQsdC70LjQt9C90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L/RgNC40LHQu9C40LfQvdC+fNC+0YDRltGU0L3RgtC+0LLQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgXCJpXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtC/0YDQvtGC0Y/Qs9C+0Lx80L3QsCDQv9GA0L7RgtGP0LfRlnzQv9GA0L7RgtGP0LPQvtC8fNGD0L/RgNC+0LTQvtCy0LZ80LLQv9GA0L7QtNC+0LLQtilcXFxccyoke1BBVFRFUk59YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5sZWZ0Qm91bmRhcnk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHRoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCBjdXJyZW50SW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHt0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KX0ke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzrQt3zRltC3KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWtNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyfNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNGWfNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRg3zQvnzQvtCxfNC3fNGW0Ld80LLRltC0KVxcXFxzKik/P2A7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86XFxcXHMqKD860YDQsNC90LrRg3zQstC10YfQvtGA0LB80L/QviDQvtCx0ZbQtNGWfNC/0ZbRgdC70Y8g0L7QsdGW0LTRgykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C+0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L4g0L7QsdGW0LTRllwiKSB8fCBtYXRjaFswXS5lbmRzV2l0aChcItC/0ZbRgdC70Y8g0L7QsdGW0LTRg1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fdGC0L7QvNGDKD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijRliDQtNC+fNGWINC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnzRg3zQvnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860Ld80ZbQt3zQstGW0LQpP1xcXFxzKijRgdGM0L7Qs9C+0LTQvdGWfNCy0YfQvtGA0LB80LfQsNCy0YLRgNCwfNC/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LB80L/QvtC30LDQstGH0L7RgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHRjNC+0LPQvtC00L3RllwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0L/QvtC30LDQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LfQsNGA0LDQt3zQvNC40L3Rg9C70L7Qs9C+XFxcXHMq0LLQtdGH0L7RgNCwfNC80LjQvdGD0LvQvtGXXFxcXHMq0L3QvtGH0ZZ80L3QsNGB0YLRg9C/0L3QvtGXXFxcXHMq0L3QvtGH0ZZ80YHRjNC+0LPQvtC00L3RllxcXFxzKtCy0L3QvtGH0ZZ80YbRltGU0ZdcXFxccyrQvdC+0YfRlnzRhtGM0L7Qs9C+INGA0LDQvdC60YN80LLRgNCw0L3RhtGWfNGA0LDQvdC60YN80LfRgNCw0L3QutGDfNC+0L/RltCy0LTQvdGWfNCy0LLQtdGH0LXRgNGWfNCy0LXRh9C+0YDQsHzQvtC/0ZbQstC90L7Rh9GWfNCy0L3QvtGH0ZYpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LfQsNGA0LDQt1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LLQstC10YfQtdGA0ZZcIiB8fCBsb3dlclRleHQgPT09IFwi0LLQtdGH0L7RgNCwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQstGA0LDQvdGG0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YDQsNC90LrRg1wiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLQt9GA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC00L3RllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LzQuNC90YPQu9C+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Qs9C+XFxzKtCy0LXRh9C+0YDQsC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvdCw0YHRgtGD0L/QvdC+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgY29uc3QgZGF5c1RvQWRkID0gdGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgMjIgPyAxIDogMjtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyBkYXlzVG9BZGQpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0YbRltGU0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC90L7Rh9GWXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0L3QvtGH0ZZcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD860YNcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0YbQtdC5fNC80LjQvdGD0LvQvtCz0L580LzQuNC90YPQu9C40Ll80L/QvtC/0LXRgNC10LTQvdGW0Ll80L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+fNC90LDRgdGC0YPQv9C90L7Qs9C+fNC90LDRgdGC0YPQv9C90LjQuXzQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpcXFxccyooPzosfFxcXFwpfO+8iSkpP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKijQvdCwfNGDfNCyKVxcXFxzKijRhtGM0L7QvNGDfNC80LjQvdGD0LvQvtC80YN80L3QsNGB0YLRg9C/0L3QvtC80YMpXFxcXHMq0YLQuNC20L3Rlik/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCLQvNC40L3Rg9C70L7Qs9C+XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RltC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RjNC+0LPQvlwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QuNC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YbQtdC5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LPQvlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGG0YzQvtC80YNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAo0LIg0LzQuNC90YPQu9C+0LzRg3zRgyDQvNC40L3Rg9C70L7QvNGDfNC90LAg0LzQuNC90YPQu9C+0LzRg3zQvNC40L3Rg9C70L7Qs9C+fNC90LAg0L3QsNGB0YLRg9C/0L3QvtC80YN80LIg0L3QsNGB0YLRg9C/0L3QvtC80YN80YMg0L3QsNGB0YLRg9C/0L3QvtC80YN80L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsCDRhtGM0L7QvNGDfNCyINGG0YzQvtC80YN80YMg0YbRjNC+0LzRg3zRhtGM0L7Qs9C+KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQvdCw0YHRgtGD0L/QvdC+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQsiDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC80LjQvdGD0LvQvtCz0L5cIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodGltZXVuaXQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRhtGWfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvRlnzQvNCw0LnQsdGD0YLQvdGWfNC90LDRgdGC0YPQv9C90ZZ80L/RltGB0LvRj3zRh9C10YDQtdC3fFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbM10pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcItC+0YHRgtCw0L3QvdGWXCI6XG4gICAgICAgICAgICBjYXNlIFwi0LzQuNC90YPQu9GWXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBVa01vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVrTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFVLTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWVuaWNhXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcImx1bmVkw6xcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVkw6xcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWVyY29sZWTDrFwiOiAzLFxuICAgIFwibWVyY1wiOiAzLFxuICAgIFwiZ2lvdmVkw6xcIjogNCxcbiAgICBcImdpb3ZcIjogNCxcbiAgICBcInZlbmVyZMOsXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhYmF0b1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge307XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcImdlbm5haW9cIjogMSxcbiAgICBcImdlblwiOiAxLFxuICAgIFwiZ2VuLlwiOiAxLFxuICAgIFwiZmViYnJhaW9cIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwiZmVicmFpb1wiOiAyLFxuICAgIFwiZmViYlwiOiAyLFxuICAgIFwiZmViYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsZVwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWdnaW9cIjogNSxcbiAgICBcIm1hZ1wiOiA1LFxuICAgIFwiZ2l1Z25vXCI6IDYsXG4gICAgXCJnaXVcIjogNixcbiAgICBcImx1Z2xpb1wiOiA3LFxuICAgIFwibHVnXCI6IDcsXG4gICAgXCJsdWdsXCI6IDcsXG4gICAgXCJsdWcuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwic2V0dGVtYnJlXCI6IDksXG4gICAgXCJzZXRcIjogOSxcbiAgICBcInNldC5cIjogOSxcbiAgICBcInNldHRcIjogOSxcbiAgICBcInNldHQuXCI6IDksXG4gICAgXCJvdHRvYnJlXCI6IDEwLFxuICAgIFwib3R0XCI6IDEwLFxuICAgIFwib3R0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljZVwiOiAxMixcbiAgICBcImRpYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwidW5vXCI6IDEsXG4gICAgXCJkdWVcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwicXVhdHRyb1wiOiA0LFxuICAgIFwiY2lucXVlXCI6IDUsXG4gICAgXCJzZWlcIjogNixcbiAgICBcInNldHRlXCI6IDcsXG4gICAgXCJvdHRvXCI6IDgsXG4gICAgXCJub3ZlXCI6IDksXG4gICAgXCJkaWVjaVwiOiAxMCxcbiAgICBcInVuZGljaVwiOiAxMSxcbiAgICBcImRvZGljaVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJwcmltb1wiOiAxLFxuICAgIFwic2Vjb25kb1wiOiAyLFxuICAgIFwidGVyem9cIjogMyxcbiAgICBcInF1YXJ0b1wiOiA0LFxuICAgIFwicXVpbnRvXCI6IDUsXG4gICAgXCJzZXN0b1wiOiA2LFxuICAgIFwic2V0dGltb1wiOiA3LFxuICAgIFwib3R0YXZvXCI6IDgsXG4gICAgXCJub25vXCI6IDksXG4gICAgXCJkZWNpbW9cIjogMTAsXG4gICAgXCJ1bmRpY2VzaW1vXCI6IDExLFxuICAgIFwiZG9kaWNlc2ltb1wiOiAxMixcbiAgICBcInRyZWRpY2VzaW1vXCI6IDEzLFxuICAgIFwicXVhdHRvcmRpY2VzaW1vXCI6IDE0LFxuICAgIFwicXVpbmRpY2VzaW1vXCI6IDE1LFxuICAgIFwic2VkaWNlc2ltb1wiOiAxNixcbiAgICBcImRpY2lhc3NldHRlc2ltb1wiOiAxNyxcbiAgICBcImRpY2lvdHRlc2ltb1wiOiAxOCxcbiAgICBcImRpY2lhbm5vdmVzaW1vXCI6IDE5LFxuICAgIFwidmVudGVzaW1vXCI6IDIwLFxuICAgIFwidmVudHVuZXNpbW9cIjogMjEsXG4gICAgXCJ2ZW50aWR1ZXNpbW9cIjogMjIsXG4gICAgXCJ2ZW50aXRyZWVzaW1vXCI6IDIzLFxuICAgIFwidmVudGlxdWF0dHJlc2ltb1wiOiAyNCxcbiAgICBcInZlbnRpY2lucXVlc2ltb1wiOiAyNSxcbiAgICBcInZlbnRpc2VpZXNpbW9cIjogMjYsXG4gICAgXCJ2ZW50aXNldHRlc2ltb1wiOiAyNyxcbiAgICBcInZlbnRvdHRlc2ltb1wiOiAyOCxcbiAgICBcInZlbnRpbm92ZXNpbW9cIjogMjksXG4gICAgXCJ0cmVudGVzaW1vXCI6IDMwLFxuICAgIFwidHJlbnR1bmVzaW1vXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kaVwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGlcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcIm9cIjogXCJob3VyXCIsXG4gICAgXCJvcmFcIjogXCJob3VyXCIsXG4gICAgXCJvcmVcIjogXCJob3VyXCIsXG4gICAgXCJnaW9ybm9cIjogXCJkYXlcIixcbiAgICBcImdpb3JuaVwiOiBcImRheVwiLFxuICAgIFwic2V0dGltYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2V0dGltYW5lXCI6IFwid2Vla1wiLFxuICAgIFwibWVzZVwiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmlcIjogXCJxdWFydGVyXCIsXG4gICAgXCJhbm5pXCI6IFwieWVhclwiLFxuICAgIFwiYW5ub1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn11bj8pP3x1bj9cXFxcYig/OlxcXFxzezAsMn1xdWFsY3Vubyk/fHF1YWxjdW5vfG1vbHRpfGE/XFxcXHN7MCwyfWFsY3VuaVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5cIiB8fCBudW0gPT09IFwidW5hXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxjdW5pLykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWV0w6EvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3BhaW8vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tb2x0aS8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86bW98bmRvfHJ6b3xzaW1vfGVzaW1vKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/Omltb3xuZG98cnpvfHJ0b3xudG98c3RvfHRhdm98bm9ub3xjaW1vfHRpbW98ZXNpbW8pJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9CRS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkUvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCkgLSA1NDM7XG4gICAgfVxuICAgIGlmICgvQkNFPy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkNFPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKEFEfENFKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKEFEfENFKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86d2l0aGlufGlufGZvcilcXFxccypgICtcbiAgICBgKD86KD86cGnDuSBvIG1lbm98aW50b3Jub3xhcHByb3NzaW1hdGl2YW1lbnRlfHZlcnNvfHZlcnNvIGxlKVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhPVVRfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86YWx8XFxcXC18XFxcXOKAk3xmaW5vfGFsbGV8YWxsbyk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/OmRhbCk/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzphbHxcXFxcLXxcXFxcYWxsZXxcXFxcZGVsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pXFxcXHMqYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGNvbXBvbmVudHM7XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb21wb25lbnRzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgoPzppbilcXFxccyopP2AgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyAobWF0Y2hbUFJFRklYX0dST1VQXSB8fCBcIlwiKS5sZW5ndGgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezR9KVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbGxlfGRhbGxlKVxcXFxzKik/P1wiO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzpcXFxccyooPzppbiBwdW50b3xvXFxcXFcqaW4gcHVudG98KD86ZGl8ZGVsfGRlbGxhfGlufGFsfGFsbGF8YWxsZSlcXFxccyooPzptYXR0aW5hfHBvbWVyaWdnaW98c2VyYSkpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwic2VyYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcInBvbWVyaWdnaW9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibWF0dGluYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmZhfHByaW1hfHByZWNlZGVudGUpKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX1mYSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmRvcG98cGnDuSB0YXJkaXxkYSBhZGVzc298YXZhbnRpfG9sdHJlfGEgc2VndWlyZSlgICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoZG9wb3xwacO5IHRhcmRpKVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBmcmFnbWVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxhbGxlfGRvcG98cHJpbWF8aWx8ZGl8ZGVsfGRlbGxlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhvcmF8b2dnaXxzdGFzZXJhfHF1ZXN0YSBzZXJhfGRvbWFuaXxkbW58aWVyaVxccypzZXJhKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvcmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9nZ2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaWVyaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9tYW5pXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG1uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInN0YXNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJxdWVzdGEgc2VyYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9pZXJpXFxzKnNlcmEvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnF1ZXN0b3xxdWVzdGEpP1xcc3swLDN9KG1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhfG5vdHRlfG1lenphbm90dGV8bWV6em9naW9ybm8pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicG9tZXJpZ2dpb1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZXJhXCI6XG4gICAgICAgICAgICBjYXNlIFwibm90dGVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV6emFub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hdHRpbmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6b2dpb3Jub1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86aWxcXFxccyo/KT9cIiArXG4gICAgXCIoPzoocXVlc3RhfGwndWx0aW1hfHNjb3JzYXxwcm9zc2ltYSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKnNldHRpbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInVsdGltYVwiIHx8IG1vZGlmaWVyV29yZCA9PSBcInNjb3JzYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidWx0aW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicHJvc3NpbWFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInByb3NzaW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicXVlc3RhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJxdWVzdGFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98c2NvcnNvfHByb3NzaW1vfGRvcG9cXFxccypxdWVzdG98cXVlc3RhfHVsdGltYXxzY29yc2F8cHJvc3NpbWFcXFxccypxdWVzdGEpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWAgKyBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcm9zc2ltb1wiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJkb3BvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcmltYVwiIHx8IG1vZGlmaWVyID09IFwicHJlY2VkZW50ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvc2V0dGltYW5hL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWVzZS9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL2Fubm8vaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98cGFzc2F0b3xwcm9zc2ltb3xkb3BvfHF1ZXN0YXx1bHRpbWF8cGFzc2F0YXxwcm9zc2ltYXxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKHByaW1hfGRhbCkkL2kpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXFxzKyhkb3BvfGRhbHxmaW5vKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkgJiYgIWhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcImRheVwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwibW9udGhcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcInllYXJcIik7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShuZXh0UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5UaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInPDtm5kYWdcIjogMCxcbiAgICBcInPDtm5cIjogMCxcbiAgICBcInNvXCI6IDAsXG4gICAgXCJtw6VuZGFnXCI6IDEsXG4gICAgXCJtw6VuXCI6IDEsXG4gICAgXCJtw6VcIjogMSxcbiAgICBcInRpc2RhZ1wiOiAyLFxuICAgIFwidGlzXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwib25zZGFnXCI6IDMsXG4gICAgXCJvbnNcIjogMyxcbiAgICBcIm9uXCI6IDMsXG4gICAgXCJ0b3JzZGFnXCI6IDQsXG4gICAgXCJ0b3JzXCI6IDQsXG4gICAgXCJ0b1wiOiA0LFxuICAgIFwiZnJlZGFnXCI6IDUsXG4gICAgXCJmcmVcIjogNSxcbiAgICBcImZyXCI6IDUsXG4gICAgXCJsw7ZyZGFnXCI6IDYsXG4gICAgXCJsw7ZyXCI6IDYsXG4gICAgXCJsw7ZcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhcmlcIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmVicnVhcmlcIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhcHJpbFwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWpcIjogNSxcbiAgICBcImp1bmlcIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaVwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhdWd1c3RpXCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJva3RvYmVyXCI6IDEwLFxuICAgIFwib2t0XCI6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBcIm5vdmVtYmVyXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlY2VtYmVyXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWSA9IHtcbiAgICBcImbDtnJzdGFcIjogMSxcbiAgICBcImFuZHJhXCI6IDIsXG4gICAgXCJ0cmVkamVcIjogMyxcbiAgICBcImZqw6RyZGVcIjogNCxcbiAgICBcImZlbXRlXCI6IDUsXG4gICAgXCJzasOkdHRlXCI6IDYsXG4gICAgXCJzanVuZGVcIjogNyxcbiAgICBcIsOldHRvbmRlXCI6IDgsXG4gICAgXCJuaW9uZGVcIjogOSxcbiAgICBcInRpb25kZVwiOiAxMCxcbiAgICBcImVsZnRlXCI6IDExLFxuICAgIFwidG9sZnRlXCI6IDEyLFxuICAgIFwidHJldHRvbmRlXCI6IDEzLFxuICAgIFwiZmpvcnRvbmRlXCI6IDE0LFxuICAgIFwiZmVtdG9uZGVcIjogMTUsXG4gICAgXCJzZXh0b25kZVwiOiAxNixcbiAgICBcInNqdXR0b25kZVwiOiAxNyxcbiAgICBcImFydG9uZGVcIjogMTgsXG4gICAgXCJuaXR0b25kZVwiOiAxOSxcbiAgICBcInRqdWdvbmRlXCI6IDIwLFxuICAgIFwidGp1Z29mw7Zyc3RhXCI6IDIxLFxuICAgIFwidGp1Z29hbmRyYVwiOiAyMixcbiAgICBcInRqdWdvdHJlZGplXCI6IDIzLFxuICAgIFwidGp1Z29masOkcmRlXCI6IDI0LFxuICAgIFwidGp1Z29mZW10ZVwiOiAyNSxcbiAgICBcInRqdWdvc2rDpHR0ZVwiOiAyNixcbiAgICBcInRqdWdvc2p1bmRlXCI6IDI3LFxuICAgIFwidGp1Z2/DpXR0b25kZVwiOiAyOCxcbiAgICBcInRqdWdvbmlvbmRlXCI6IDI5LFxuICAgIFwidHJldHRpb25kZVwiOiAzMCxcbiAgICBcInRyZXR0aW9mw7Zyc3RhXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVuXCI6IDEsXG4gICAgXCJldHRcIjogMSxcbiAgICBcInR2w6VcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwiZnlyYVwiOiA0LFxuICAgIFwiZmVtXCI6IDUsXG4gICAgXCJzZXhcIjogNixcbiAgICBcInNqdVwiOiA3LFxuICAgIFwiw6V0dGFcIjogOCxcbiAgICBcIm5pb1wiOiA5LFxuICAgIFwidGlvXCI6IDEwLFxuICAgIFwiZWx2YVwiOiAxMSxcbiAgICBcInRvbHZcIjogMTIsXG4gICAgXCJ0cmV0dG9uXCI6IDEzLFxuICAgIFwiZmpvcnRvblwiOiAxNCxcbiAgICBcImZlbXRvblwiOiAxNSxcbiAgICBcInNleHRvblwiOiAxNixcbiAgICBcInNqdXR0b25cIjogMTcsXG4gICAgXCJhcnRvblwiOiAxOCxcbiAgICBcIm5pdHRvblwiOiAxOSxcbiAgICBcInRqdWdvXCI6IDIwLFxuICAgIFwidHJldHRp0L5cIjogMzAsXG4gICAgXCJmeXJ0aW9cIjogNDAsXG4gICAgXCJmZW10aW9cIjogNTAsXG4gICAgXCJzZXh0aW9cIjogNjAsXG4gICAgXCJzanV0dGlvXCI6IDcwLFxuICAgIFwiw6V0dGlvXCI6IDgwLFxuICAgIFwibml0dGlvXCI6IDkwLFxuICAgIFwiaHVuZHJhXCI6IDEwMCxcbiAgICBcInR1c2VuXCI6IDEwMDAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0XCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVyXCI6IFwibWludXRlXCIsXG4gICAgXCJ0aW1cIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tZVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1hclwiOiBcImhvdXJcIixcbiAgICBcImRhZ1wiOiBcImRheVwiLFxuICAgIFwiZGFnYXJcIjogXCJkYXlcIixcbiAgICBcInZlY2thXCI6IFwid2Vla1wiLFxuICAgIFwidmVja29yXCI6IFwid2Vla1wiLFxuICAgIFwibcOlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnTQsGxcIjogXCJxdWFydGVyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW5kXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRlclwiOiBcInNlY29uZFwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnRhbFwiOiBcInF1YXJ0ZXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZKX18XFxcXGR7MSwyfSg/OmV8OmUpKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvXFxkKy8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyTnVtYmVyID0gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86cMOlXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihmw7ZycmF8c2VuYXN0ZXxuw6RzdGF8a29tbWFuZGUpXFxcXHMqdmVja2EpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2bDtnJyYXxzZW5hc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9uw6RzdGF8a29tbWFuZGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBgKD86XFxcXHMqKD86dGlsbHxcXFxcLXxcXFxc4oCTfFxcXFxzKVxcXFxzKihbMC05XXsxLDJ9KSk/XFxcXHMqYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoWzAtOV17NH0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKGRlbm5hfGRlbiBow6RyfGbDtnJyYXxwYXNzZXJhZGV8bsOkc3RhfGtvbW1hbmRlfGVmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzZXJhZGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAobnV8aWRhZ3xpbW9yZ29ufMO2dmVybW9yZ29ufGlnw6VyfGbDtnJyZ8OlcnxpXFxcXHMqZsO2cnJnw6VyKWAgK1xuICAgIGAoPzpcXFxccyooPzpww6VcXFxccyopPyhtb3Jnb25lbj98ZsO2cm1pZGRhZ2VuP3xtaWRkYWdlbj98ZWZ0ZXJtaWRkYWdlbj98a3bDpGxsZW4/fG5hdHRlbj98bWlkbmF0dCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImltb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbW9yblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZsO2cnJnw6VyXCI6XG4gICAgICAgICAgICBjYXNlIFwiaSBmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB0d29EYXlzQWdvID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHR3b0RheXNBZ28uc2V0RGF0ZSh0d29EYXlzQWdvLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHR3b0RheXNBZ28pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25lblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZsO2cm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlZnRlcm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImt2w6RsbFwiOlxuICAgICAgICAgICAgY2FzZSBcImt2w6RsbGVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0XCI6XG4gICAgICAgICAgICBjYXNlIFwibmF0dGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkbmF0dFwiOlxuICAgICAgICAgICAgICAgIGlmICh0aW1lS2V5d29yZCA9PT0gXCJtaWRuYXR0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNWQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgU1ZDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW10sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzprbG98a2VsbG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccypcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInN1bm51bnRhaVwiOiAwLFxuICAgIFwic3VubnVudGFpbmFcIjogMCxcbiAgICBcInN1XCI6IDAsXG4gICAgXCJtYWFuYW50YWlcIjogMSxcbiAgICBcIm1hYW5hbnRhaW5hXCI6IDEsXG4gICAgXCJtYVwiOiAxLFxuICAgIFwidGlpc3RhaVwiOiAyLFxuICAgIFwidGlpc3RhaW5hXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwia2Vza2l2aWlra29cIjogMyxcbiAgICBcImtlc2tpdmlpa2tvbmFcIjogMyxcbiAgICBcImtlXCI6IDMsXG4gICAgXCJ0b3JzdGFpXCI6IDQsXG4gICAgXCJ0b3JzdGFpbmFcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJwZXJqYW50YWlcIjogNSxcbiAgICBcInBlcmphbnRhaW5hXCI6IDUsXG4gICAgXCJwZVwiOiA1LFxuICAgIFwibGF1YW50YWlcIjogNixcbiAgICBcImxhdWFudGFpbmFcIjogNixcbiAgICBcImxhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0YW1taWt1dVwiOiAxLFxuICAgIFwidGFtbWlrdXV0YVwiOiAxLFxuICAgIFwidGFtbWlrdXVuXCI6IDEsXG4gICAgXCJ0YW1taVwiOiAxLFxuICAgIFwiaGVsbWlrdXVcIjogMixcbiAgICBcImhlbG1pa3V1dGFcIjogMixcbiAgICBcImhlbG1pa3V1blwiOiAyLFxuICAgIFwiaGVsbWlcIjogMixcbiAgICBcIm1hYWxpc2t1dVwiOiAzLFxuICAgIFwibWFhbGlza3V1dGFcIjogMyxcbiAgICBcIm1hYWxpc2t1dW5cIjogMyxcbiAgICBcIm1hYWxpc1wiOiAzLFxuICAgIFwiaHVodGlrdXVcIjogNCxcbiAgICBcImh1aHRpa3V1dGFcIjogNCxcbiAgICBcImh1aHRpa3V1blwiOiA0LFxuICAgIFwiaHVodGlcIjogNCxcbiAgICBcInRvdWtva3V1XCI6IDUsXG4gICAgXCJ0b3Vrb2t1dXRhXCI6IDUsXG4gICAgXCJ0b3Vrb2t1dW5cIjogNSxcbiAgICBcInRvdWtvXCI6IDUsXG4gICAgXCJrZXPDpGt1dVwiOiA2LFxuICAgIFwia2Vzw6RrdXV0YVwiOiA2LFxuICAgIFwia2Vzw6RrdXVuXCI6IDYsXG4gICAgXCJrZXPDpFwiOiA2LFxuICAgIFwiaGVpbsOka3V1XCI6IDcsXG4gICAgXCJoZWluw6RrdXV0YVwiOiA3LFxuICAgIFwiaGVpbsOka3V1blwiOiA3LFxuICAgIFwiaGVpbsOkXCI6IDcsXG4gICAgXCJlbG9rdXVcIjogOCxcbiAgICBcImVsb2t1dXRhXCI6IDgsXG4gICAgXCJlbG9rdXVuXCI6IDgsXG4gICAgXCJlbG9cIjogOCxcbiAgICBcInN5eXNrdXVcIjogOSxcbiAgICBcInN5eXNrdXV0YVwiOiA5LFxuICAgIFwic3l5c2t1dW5cIjogOSxcbiAgICBcInN5eXNcIjogOSxcbiAgICBcImxva2FrdXVcIjogMTAsXG4gICAgXCJsb2tha3V1dGFcIjogMTAsXG4gICAgXCJsb2tha3V1blwiOiAxMCxcbiAgICBcImxva2FcIjogMTAsXG4gICAgXCJtYXJyYXNrdXVcIjogMTEsXG4gICAgXCJtYXJyYXNrdXV0YVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dW5cIjogMTEsXG4gICAgXCJtYXJyYXNcIjogMTEsXG4gICAgXCJqb3VsdWt1dVwiOiAxMixcbiAgICBcImpvdWx1a3V1dGFcIjogMTIsXG4gICAgXCJqb3VsdWt1dW5cIjogMTIsXG4gICAgXCJqb3VsdVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ5a3NpXCI6IDEsXG4gICAgXCJ5aGRlblwiOiAxLFxuICAgIFwia2Frc2lcIjogMixcbiAgICBcImthaGRlblwiOiAyLFxuICAgIFwia29sbWVcIjogMyxcbiAgICBcImtvbG1lblwiOiAzLFxuICAgIFwibmVsasOkXCI6IDQsXG4gICAgXCJuZWxqw6RuXCI6IDQsXG4gICAgXCJ2aWlzaVwiOiA1LFxuICAgIFwidmlpZGVuXCI6IDUsXG4gICAgXCJrdXVzaVwiOiA2LFxuICAgIFwia3V1ZGVuXCI6IDYsXG4gICAgXCJzZWl0c2Vtw6RuXCI6IDcsXG4gICAgXCJrYWhkZWtzYW5cIjogOCxcbiAgICBcInloZGVrc8OkblwiOiA5LFxuICAgIFwia3ltbWVuZW5cIjogMTAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dHRpYVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0aW5cIjogXCJtaW51dGVcIixcbiAgICBcInRcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInB2XCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2a1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJra1wiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW50aVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW50aWFcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VubmluXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidHVudGlcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aWFcIjogXCJob3VyXCIsXG4gICAgXCJ0dW5uaW5cIjogXCJob3VyXCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2aWlra29cIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlra29hXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa29uXCI6IFwid2Vla1wiLFxuICAgIFwia3V1a2F1c2lcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1dHRhXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdWRlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJ2dW9zaVwiOiBcInllYXJcIixcbiAgICBcInZ1b3R0YVwiOiBcInllYXJcIixcbiAgICBcInZ1b2RlblwiOiBcInllYXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzoodmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkfGVuc2l8c2V1cmFhdmF8c2V1cmFhdmFuYXx0w6Rtw6R8dMOkbsOkKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHZpaW1lfGVuc2l8c2V1cmFhdmEpXFxcXHMqdmlpa29sbGEpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL3ZpaW1lfGVkZWxsaW5lbnxlZGVsbGlzZW7DpC8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pXFxcXC4/YCArXG4gICAgYCg/OlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoc2V1cmFhdmF8c2V1cmFhdmF0fHNldXJhYXZpZW58ZWRlbGxpbmVufGVkZWxsaXNldHxlZGVsbGlzdGVufHZpaW1laXNldHx2aWltZWlzdGVufGt1bHVuZWV0fGt1bHVuZWlkZW58XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImVkZWxsaW5lblwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzdGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwia3VsdW5lZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVpZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHMqc2l0dGVuKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccyooPzpzaXPDpGxsw6R8a3VsdWVzc2F8cMOkw6RzdMOkKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8odMOkbsOkXFxzKik/KGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gRklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bGxhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWFtdW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYW11cMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWx0YXDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWxsYWxsYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXNraXnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9GSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChueXR8dMOkbsOkw6RufGh1b21lbm5hfHlsaWh1b21lbm5hfGVpbGVufHRvaXNzYXDDpGl2w6Ruw6R8dmlpbWVcXFxccyp5w7Zuw6QpYCArXG4gICAgYCg/OlxcXFxzKihhYW11bGxhfGFhbXVuYXxhYW11cMOkaXbDpGxsw6R8cMOkaXbDpGxsw6R8aWx0YXDDpGl2w6RsbMOkfGlsbGFsbGF8ecO2bGzDpHxrZXNraXnDtmxsw6QpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm55dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0w6Ruw6TDpG5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5bGlodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlaWxlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9pc3NhcMOkaXbDpG7DpFwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvdmlpbWVcXHMqecO2bsOkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKigtfOKAkylcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxrbG98a2VsbG98LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRklUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRklNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IEZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiY2hcXHUxZWU3IG5oXFx1MWVhZHRcIjogMCxcbiAgICBcImNuXCI6IDAsXG4gICAgXCJ0aFxcdTFlZTkgaGFpXCI6IDEsXG4gICAgXCJ0MlwiOiAxLFxuICAgIFwidGhcXHUxZWU5IGJhXCI6IDIsXG4gICAgXCJ0M1wiOiAyLFxuICAgIFwidGhcXHUxZWU5IHRcXHUwMWIwXCI6IDMsXG4gICAgXCJ0NFwiOiAzLFxuICAgIFwidGhcXHUxZWU5IG5cXHUwMTAzbVwiOiA0LFxuICAgIFwidDVcIjogNCxcbiAgICBcInRoXFx1MWVlOSBzXFx1MDBlMXVcIjogNSxcbiAgICBcInQ2XCI6IDUsXG4gICAgXCJ0aFxcdTFlZTkgYlxcdTFlYTN5XCI6IDYsXG4gICAgXCJ0N1wiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwidGhcXHUwMGUxbmcgMVwiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTFlZDl0XCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBnaVxcdTAwZWFuZ1wiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgMlwiOiAyLFxuICAgIFwidGhcXHUwMGUxbmcgaGFpXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyAzXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyBiYVwiOiAzLFxuICAgIFwidGhcXHUwMGUxbmcgNFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAxYjBcIjogNCxcbiAgICBcInRoXFx1MDBlMW5nIDVcIjogNSxcbiAgICBcInRoXFx1MDBlMW5nIG5cXHUwMTAzbVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgNlwiOiA2LFxuICAgIFwidGhcXHUwMGUxbmcgc1xcdTAwZTF1XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyA3XCI6IDcsXG4gICAgXCJ0aFxcdTAwZTFuZyBiXFx1MWVhM3lcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIDhcIjogOCxcbiAgICBcInRoXFx1MDBlMW5nIHRcXHUwMGUxbVwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgOVwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgY2hcXHUwMGVkblwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgMTBcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpXCI6IDEwLFxuICAgIFwidGhcXHUwMGUxbmcgMTFcIjogMTEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIDEyXCI6IDEyLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTFlYTFwXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcIm1cXHUxZWQ5dFwiOiAxLFxuICAgIFwiaGFpXCI6IDIsXG4gICAgXCJiYVwiOiAzLFxuICAgIFwiYlxcdTFlZDFuXCI6IDQsXG4gICAgXCJuXFx1MDEwM21cIjogNSxcbiAgICBcInNcXHUwMGUxdVwiOiA2LFxuICAgIFwiYlxcdTFlYTN5XCI6IDcsXG4gICAgXCJ0XFx1MDBlMW1cIjogOCxcbiAgICBcImNoXFx1MDBlZG5cIjogOSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgaGFpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcImdpXFx1MDBlMnlcIjogXCJzZWNvbmRcIixcbiAgICBcInBoXFx1MDBmYXRcIjogXCJtaW51dGVcIixcbiAgICBcImdpXFx1MWVkZFwiOiBcImhvdXJcIixcbiAgICBcIm5nXFx1MDBlMHlcIjogXCJkYXlcIixcbiAgICBcInR1XFx1MWVhN25cIjogXCJ3ZWVrXCIsXG4gICAgXCJ0aFxcdTAwZTFuZ1wiOiBcIm1vbnRoXCIsXG4gICAgXCJuXFx1MDEwM21cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gXCIoPzpcIiArIG1hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSkgKyBcInxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSspXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiKD86WzAtOV17MSw0fSg/OlxcXFxzKlRDTik/KVwiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGNvbnN0IHVwcGVyID0gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpKTtcbiAgICBpZiAoL1RDTi8udGVzdCh1cHBlcikpXG4gICAgICAgIHJldHVybiAtbnVtO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihudW0pO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gXCIoXCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiKVxcXFxzezAsNX0oXCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXFxcXHN7MCw1fVwiO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86bmdcXHUwMGUweVxcXFxzKik/XCIgK1xuICAgIFwiKFswLTldezEsMn0pXCIgK1xuICAgIFwiXFxcXHMqdGhcXHUwMGUxbmdcXFxccypcIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypuXFx1MDEwM21cXFxccyooXCIgK1xuICAgIFlFQVJfUEFUVEVSTiArXG4gICAgXCIpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVN0YW5kYXJkUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEgfHwgbW9udGggPiAxMilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJU3RhbmRhcmRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSwgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIG1hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKSArIFwiKVwiICsgXCIoPzpcXFxccyooPzpuxINtfC8pXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpKT9cIiArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1vbnRoWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFtb250aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTW9udGhZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlxcXFxibsSDbVxcXFxzKihcIiArIFlFQVJfUEFUVEVSTiArIFwiKXxcXFxcYihbMC05XXsxLDR9KVxcXFxzKihUQ04pKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfV0lUSF9OQU1fR1JPVVAgPSAxO1xuY29uc3QgQkFSRV9CQ19ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEJBUkVfQkNfU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXJUZXh0O1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF0pIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5ZWFyVGV4dCA9IG1hdGNoW0JBUkVfQkNfWUVBUl9HUk9VUF0gKyBcIiBcIiArIG1hdGNoW0JBUkVfQkNfU1VGRklYX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKHllYXJUZXh0KSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvXFxiKGjDtG0gbmF5fGjDtG0gcXVhfGjDtG0ga2lhfG5nw6B5IG1haXxuZ8OgeSBraWF8YsOieSBnaeG7nXxsw7pjIG7DoHkpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImLDonkgZ2nhu51cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsw7pjIG7DoHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gbmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gcXVhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJow7RtIGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkgbWFpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm5nw6B5IGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhideG7lWlcXHMqKT8oc8Ohbmcgc+G7m218c8Ohbmd8dHLGsGF8Y2hp4buBdXx04buRaXzEkcOqbXxu4butYSDEkcOqbXxiw6xuaCBtaW5oKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBjb250ZXh0LnJlZkRhdGUpO1xuICAgICAgICByZXR1cm4gVklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwga2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiXFx1MDBlY25oIG1pbmhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nIHNcXHUxZWRibVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRyXFx1MDFiMGFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaVxcdTFlYzF1XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0XFx1MWVkMWlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblxcdTFlZWRhIFxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgIG1hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcXFxccyoobsOgeXx04bubaXxzYXUoPyFcXFxccypraGkpfHF1YSkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9ESUZJRVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkb3dUZXh0ID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZG93ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2Rvd1RleHRdO1xuICAgICAgICBpZiAoZG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllclR5cGUgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG0uaW5jbHVkZXMoXCJ04bubaVwiKSB8fCBtLmluY2x1ZGVzKFwic2F1XCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibmV4dFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobS5pbmNsdWRlcyhcInF1YVwiKSlcbiAgICAgICAgICAgICAgICBtb2RpZmllclR5cGUgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIGRvdywgbW9kaWZpZXJUeXBlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpsXFx1MDBmYWNcXFxccyp8dlxcdTAwZTBvXFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypnaVxcdTFlZGRcXFxccyooWzAtOV17MSwyfSk/XFxcXHMqKD86cGhcXHUwMGZhdFxcXFxzKik/XCIgK1xuICAgIFwiKHNcXHUwMGUxbmd8dHJcXHUwMWIwYXxjaGlcXHUxZWMxdXx0XFx1MWVkMWl8XFx1MDExMVxcdTAwZWFtKT9cIiArXG4gICAgXCJ8OihbMC05XXsyfSkpXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDE7XG5jb25zdCBNSU5VVEVfR0lPX0dST1VQID0gMjtcbmNvbnN0IE1FUklESUVNX0dST1VQID0gMztcbmNvbnN0IE1JTlVURV9DT0xPTl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaG91ciA+IDIzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gbWF0Y2hbTUlOVVRFX0NPTE9OX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdKVxuICAgICAgICAgICAgOiBtYXRjaFtNSU5VVEVfR0lPX0dST1VQXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dJT19HUk9VUF0pXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFtNRVJJRElFTV9HUk9VUF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gXCJzw6FuZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcInRyxrBhXCIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgaG91ciA+PSAxMiA/IE1lcmlkaWVtLlBNIDogTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcImNoaeG7gXVcIiB8fCBtZXJpZGllbSA9PT0gXCJ04buRaVwiIHx8IG1lcmlkaWVtID09PSBcIsSRw6ptXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCJcXFxcc3swLDV9KD86dHJcXHUwMWIwXFx1MWVkYmN8cXVhKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzpzYXV8blxcdTFlZWZhfHRcXHUxZWRiaXx0aVxcdTFlYmZwKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzp0cm9uZ1xcXFxzKig/OnZcXHUwMGYybmdcXFxccyopPylcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSwgTlVNQkVSX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IENBU1VBTF9VTklUX1BBVFRFUk4gPSBcIig/OlwiICsgTlVNQkVSX1BBVFRFUk4gKyBcIlxcXFxzezAsNX0pPyg/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKSArIFwiKVwiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIobsOgeXx0csaw4bubY3xxdWF8c2F1fHThu5tpfHRp4bq/cClcXFxccyooXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVwiICtcbiAgICBcInwoXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVxcXFxzKihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVwiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAobWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFRleHQgPSAobWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbih1bml0VGV4dCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkdXJhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFRleHRdO1xuICAgICAgICAgICAgaWYgKCF1bml0KVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7IFt1bml0XTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PT0gXCJ0csaw4bubY1wiIHx8IG1vZGlmaWVyID09PSBcInF1YVwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzrigJN8LXzEkeG6v258dOG7m2l8dsOgKVxccyokLztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OmzDumN8dsOgb3wsfFR8LSk/XFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVN0YW5kYXJkUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTW9udGhZZWFyUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSVllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBWSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVklNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBWSVN0YW5kYXJkUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklNb250aFllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGVuIGZyb20gXCIuL2xvY2FsZXMvZW4vaW5kZXguanNcIjtcbmltcG9ydCB7IENocm9ubywgUGFyc2luZ0NvbnRleHQgfSBmcm9tIFwiLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgeyBlbiwgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCwgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmltcG9ydCAqIGFzIGRlIGZyb20gXCIuL2xvY2FsZXMvZGUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZyIGZyb20gXCIuL2xvY2FsZXMvZnIvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGphIGZyb20gXCIuL2xvY2FsZXMvamEvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHB0IGZyb20gXCIuL2xvY2FsZXMvcHQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIG5sIGZyb20gXCIuL2xvY2FsZXMvbmwvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHpoIGZyb20gXCIuL2xvY2FsZXMvemgvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHJ1IGZyb20gXCIuL2xvY2FsZXMvcnUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGVzIGZyb20gXCIuL2xvY2FsZXMvZXMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHVrIGZyb20gXCIuL2xvY2FsZXMvdWsvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGl0IGZyb20gXCIuL2xvY2FsZXMvaXQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHN2IGZyb20gXCIuL2xvY2FsZXMvc3YvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZpIGZyb20gXCIuL2xvY2FsZXMvZmkvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHZpIGZyb20gXCIuL2xvY2FsZXMvdmkvaW5kZXguanNcIjtcbmV4cG9ydCB7IGRlLCBmciwgamEsIHB0LCBubCwgemgsIHJ1LCBlcywgdWssIGl0LCBzdiwgZmksIHZpIH07XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gZW4uc3RyaWN0O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IGVuLmNhc3VhbDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogRm9ybWF0ZSB1bmUgZW50csOpZSBkZSBsb2cgYXZlYyB0aW1lc3RhbXBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TG9nRW50cnkobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBcbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dIFske2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9IHwgQ29udGV4dDogJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gO1xuICB9XG4gIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIFN5c3TDqG1lIGRlIGxvZ2dpbmcgc3RydWN0dXLDqVxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBkZWJ1ZyAocG91ciBsZSBkw6l2ZWxvcHBlbWVudClcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnZGVidWcnLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgaW5mbyAoaW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2luZm8nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgd2FybiAoYXZlcnRpc3NlbWVudHMpXG4gICAqL1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnd2FybicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUud2Fybihmb3JtYXR0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGVycm9yIChlcnJldXJzKVxuICAgKi9cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdlcnJvcicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkKTtcbiAgfSxcbn07XG5cbiIsIi8vIENIQU5HRU1FTlQgSUNJIDogT24gdXRpbGlzZSBcImltcG9ydCAqIGFzIGNocm9ub1wiIGNhciBsYSB2ZXJzaW9uIDIueCBuJ2EgcGx1cyBkJ2V4cG9ydCBwYXIgZMOpZmF1dFxuaW1wb3J0ICogYXMgY2hyb25vIGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzZXIsIFBhcnNpbmdDb250ZXh0LCBSZWZpbmVyIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLCBkZXNjcmliZUVycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiBtYXRjaGluZyBjaHJvbm8tbm9kZSdzIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4vLyBDb25maWd1cmF0aW9uIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBtYWluIG1vZHVsZSwgc28gd2UgZGVmaW5lIGl0IGxvY2FsbHlcbmludGVyZmFjZSBDaHJvbm9Db25maWd1cmF0aW9uIHtcbiAgcGFyc2VyczogUGFyc2VyW107XG4gIHJlZmluZXJzOiBSZWZpbmVyW107XG59XG5cbmZ1bmN0aW9uIGdldE9yZGluYWxEYXRlUGFyc2VyKCkge1xuICByZXR1cm4gKHtcbiAgICBwYXR0ZXJuOiAoKSA9PiBuZXcgUmVnRXhwKE9SRElOQUxfTlVNQkVSX1BBVFRFUk4pLFxuICAgIGV4dHJhY3Q6IChjb250ZXh0OiBQYXJzaW5nQ29udGV4dCwgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFswXSksXG4gICAgICAgIC8vIG1vbWVudCguLi4pLm1vbnRoKCkgaXMgMC1pbmRleGVkIChKYW49MCksIGJ1dCBjaHJvbm8tbm9kZSdzXG4gICAgICAgIC8vIFBhcnNpbmdDb21wb25lbnRzLm1vbnRoIGlzIDEtaW5kZXhlZCAoSmFuPTEpIC0tIHZlcmlmaWVkIGFnYWluc3RcbiAgICAgICAgLy8gY2hyb25vLW5vZGUncyBvd24gbG9jYWxlIGNvbnN0YW50cy4gV2l0aG91dCB0aGUgKzEgdGhpcyBhbHdheXNcbiAgICAgICAgLy8gcmVzb2x2ZWQgdG8gdGhlIHdyb25nIG1vbnRoIChhbmQsIHZpYSBmb3J3YXJkRGF0ZSwgc29tZXRpbWVzIHRoZVxuICAgICAgICAvLyB3cm9uZyB5ZWFyIHRvbykuXG4gICAgICAgIC8vIE11c3QgdXNlIGNvbnRleHQucmVmRGF0ZSAodGhlIGRhdGUgY2hyb25vIHdhcyBhc2tlZCB0byBwYXJzZVxuICAgICAgICAvLyByZWxhdGl2ZSB0byksIG5vdCBtb21lbnQoKSAodGhlIHJlYWwgY3VycmVudCB3YWxsLWNsb2NrIHRpbWUpOlxuICAgICAgICAvLyBjYWxsZXJzIGNhbiBhbmQgZG8gcGFzcyBhbiBleHBsaWNpdCByZWZlcmVuY2UgZGF0ZSwgZS5nLiB0ZXN0cywgb3JcbiAgICAgICAgLy8gZ2V0UGFyc2VkRGF0ZVJlc3VsdCgpJ3MgY2FsbGVycyBpbiBwYXJzZXIudHMuXG4gICAgICAgIG1vbnRoOiBtb21lbnQoY29udGV4dC5yZWZEYXRlKS5tb250aCgpICsgMSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSBhcyBQYXJzZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDaHJvbm9zKGxhbmd1YWdlczogc3RyaW5nW10pOiBDaHJvbm9bXSB7XG4gIGNvbnN0IGxvY2FsZSA9IG1vbWVudC5sb2NhbGUoKTtcbiAgY29uc3QgaXNHQiA9IGxvY2FsZSA9PT0gJ2VuLWdiJztcblxuICBjb25zdCBjaHJvbm9zOiBDaHJvbm9bXSA9IFtdO1xuICBjb25zdCBvcmRpbmFsRGF0ZVBhcnNlciA9IGdldE9yZGluYWxEYXRlUGFyc2VyKCk7XG4gIC8vIEJ1aWxkcyBhIENocm9ubyBpbnN0YW5jZSBmb3IgYSBsb2NhbGUgbW9kdWxlLCBzdXBwb3J0aW5nIGJvdGggY2hyb25vLW5vZGVcbiAgLy8gQVBJIHNoYXBlczogb2xkZXIgbG9jYWxlcyBzdGlsbCBleHBvc2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKSxcbiAgLy8gYnV0IGFzIG9mIGNocm9uby1ub2RlIDIueCB0aGUgXCJlblwiIGxvY2FsZSBpbnN0ZWFkIGV4cG9ydHMgcHJlLWJ1aWx0XG4gIC8vIENocm9ubyBpbnN0YW5jZXMgKGNhc3VhbC9HQi9zdHJpY3QpIHdpdGggbm8gY29uZmlnIGZhY3RvcnkgYXQgYWxsLiBBXG4gIC8vIGxvY2FsZSBtaXNzaW5nIGJvdGggd291bGQgcHJldmlvdXNseSBiZSBzaWxlbnRseSB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkXG4gIC8vIChsb2dnZWQgYXQgXCJ3YXJuXCIgb25seSkgYW5kIGV2ZXJ5IG1hdGNoIGZvciB0aGF0IGxhbmd1YWdlIHdvdWxkIGZhbGxcbiAgLy8gdGhyb3VnaCB0byB0b2RheS9ub3cgd2l0aCBubyB2aXNpYmxlIGVycm9yIC0tIHRoaXMgaGFwcGVuZWQgZm9yIEVuZ2xpc2hcbiAgLy8gc3BlY2lmaWNhbGx5LCBmb3IgZXZlcnkgdXNlciB3aG8gZW5hYmxlZCBpdCwgc2luY2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvblxuICAvLyBpcyBleGFjdGx5IHdoYXQgZGlzYXBwZWFyZWQgZnJvbSB0aGF0IG1vZHVsZS5cbiAgY29uc3QgYnVpbGRDaHJvbm9Gb3JNb2R1bGUgPSAobGFuZ01vZHVsZToge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgR0I/OiBDaHJvbm87XG4gIH0gfCB1bmRlZmluZWQpOiBDaHJvbm8gfCBudWxsID0+IHtcbiAgICBpZiAoIWxhbmdNb2R1bGUpIHJldHVybiBudWxsO1xuICAgIGlmIChsYW5nTW9kdWxlLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKTtcbiAgICAgIC8vIENocm9ubyBjb25zdHJ1Y3RvciBhY2NlcHRzIENvbmZpZ3VyYXRpb24gdHlwZSAtIGNhc3QgbmVlZGVkIGJlY2F1c2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbiByZXR1cm5zIHVua25vd25cbiAgICAgIHJldHVybiBuZXcgQ2hyb25vKGNvbmZpZyBhcyBDaHJvbm9Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGxhbmdNb2R1bGUuY2FzdWFsKSB7XG4gICAgICAvLyBDbG9uZSBzbyB3ZSBkb24ndCBtdXRhdGUgY2hyb25vLW5vZGUncyBzaGFyZWQgc2luZ2xldG9uIGluc3RhbmNlXG4gICAgICAvLyAobXVsdGlwbGUgTkxEUGFyc2VyIGluc3RhbmNlcyB3b3VsZCBvdGhlcndpc2UgYWxsIHB1c2ggdGhlaXIgb3duXG4gICAgICAvLyBvcmRpbmFsRGF0ZVBhcnNlciBvbnRvIHRoZSBzYW1lIHNoYXJlZCBvYmplY3QpLlxuICAgICAgY29uc3QgYmFzZSA9IChpc0dCICYmIGxhbmdNb2R1bGUuR0IpID8gbGFuZ01vZHVsZS5HQiA6IGxhbmdNb2R1bGUuY2FzdWFsO1xuICAgICAgcmV0dXJuIGJhc2UuY2xvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE9uIGFjY8OoZGUgYXV4IGxhbmd1ZXMgZHluYW1pcXVlbWVudCB2aWEgUmVjb3JkXG4gICAgICBjb25zdCBsYW5nTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbF0gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGxhbmdNb2R1bGUpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBMYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNocm9uby1ub2RlYCwgeyBsYW5ndWFnZTogbCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYy5wYXJzZXJzLnB1c2gob3JkaW5hbERhdGVQYXJzZXIpO1xuICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ2hyb25vIGluaXRpYWxpemVkIGZvciBsYW5ndWFnZVwiLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGNocm9ubyBmb3IgbGFuZ3VhZ2VgLCB7XG4gICAgICAgIGxhbmd1YWdlOiBsLFxuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNpIGF1Y3VuZSBsYW5ndWUgbidhIHB1IMOqdHJlIGluaXRpYWxpc8OpZSwgdXRpbGlzZXIgbCdhbmdsYWlzIHBhciBkw6lmYXV0XG4gIGlmIChjaHJvbm9zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBsYW5ndWFnZXMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbk1vZHVsZSA9IChjaHJvbm8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVuIGFzIHtcbiAgICAgICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgICAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgICAgIEdCPzogQ2hyb25vO1xuICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGMgPSBidWlsZENocm9ub0Zvck1vZHVsZShlbk1vZHVsZSk7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICAgIGNocm9ub3MucHVzaChjKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgRW5nbGlzaCBjaHJvbm8gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0VuZ2xpc2ggY2hyb25vIG1vZHVsZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBFbmdsaXNoIGNocm9ubycsIHtcbiAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNocm9ub3M7XG59IiwiaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBwb3VyIGxlcyBkw6lwZW5kYW5jZXMgbsOpY2Vzc2FpcmVzIMOgIGxhIGTDqXRlY3Rpb24gZCdoZXVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVEZXRlY3RvckRlcGVuZGVuY2llcyB7XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIGNocm9ub3M6IENocm9ub1tdO1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDtcbn1cblxuLyoqXG4gKiBDbGFzc2UgcG91ciBkw6l0ZWN0ZXIgc2kgdW4gdGV4dGUgY29udGllbnQgdW5lIGNvbXBvc2FudGUgZCdoZXVyZVxuICovXG5leHBvcnQgY2xhc3MgVGltZURldGVjdG9yIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGNocm9ub3M6IENocm9ub1tdO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFJlbGF0aXZlQ29tYmluZWQ6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY2llczogVGltZURldGVjdG9yRGVwZW5kZW5jaWVzKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBkZXBlbmRlbmNpZXMubGFuZ3VhZ2VzO1xuICAgIHRoaXMuY2hyb25vcyA9IGRlcGVuZGVuY2llcy5jaHJvbm9zO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IGRlcGVuZGVuY2llcy5yZWdleFJlbGF0aXZlO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZDtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXk7XG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXlXaXRoVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWw6lyaWZpZSBzaSBsZSB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIDEuIElmIGl0J3MgXCJub3dcIiBpbiBhbnkgbGFuZ3VhZ2UsIFlFUy5cbiAgICAvLyBUcmFuc2xhdGlvbnMgY2FuIGxpc3Qgc2V2ZXJhbCB2YXJpYW50cyBwaXBlLXNlcGFyYXRlZCAoZS5nLiBJdGFsaWFuXG4gICAgLy8gXCJhZGVzc298b3JhXCIsIENoaW5lc2UgXCLnj77lnKh8546w5ZyoXCIpOyBzcGxpdCBlYWNoIGxhbmd1YWdlJ3MgXCJub3dcIiBlbnRyeVxuICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIG1hdGNoIGluZGl2aWR1YWwgaW1tZWRpYXRlS2V5d29yZHNcbiAgICAvLyBlbnRyaWVzIChhbHJlYWR5IHNwbGl0LCBmb3IgYWxsIG9mIG5vdy90b2RheS90b21vcnJvdy95ZXN0ZXJkYXlcbiAgICAvLyBjb21iaW5lZCkgYWdhaW5zdCB0aGUgcmF3LCB1bnNwbGl0IHRyYW5zbGF0aW9uIHN0cmluZywgd2hpY2ggY291bGRcbiAgICAvLyBuZXZlciBlcXVhbCBhIHNpbmdsZSBhbHJlYWR5LXNwbGl0IHZhcmlhbnQuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLmxhbmd1YWdlcy5mbGF0TWFwKGxhbmcgPT5cbiAgICAgIHQoJ25vdycsIGxhbmcpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdylcbiAgICApO1xuICAgIC8vIEV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGFnYWluc3QgdGhlIHdob2xlIHN0cmluZyAtLSBubyBuZWVkIHRvXG4gICAgLy8gY29tcGlsZSBhIFJlZ0V4cCBwZXIgd29yZCBwZXIgY2FsbCBmb3IgdGhhdCwgYSBwbGFpbiBsb3dlcmNhc2UgK1xuICAgIC8vIGluY2x1ZGVzKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBtb3JlIHNpbXBseSBhbmQgbW9yZSBjaGVhcGx5LlxuICAgIGlmIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMi4gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gWCB3ZWVrcyBhbmQgWSBkYXlzXCJcbiAgICBjb25zdCByZWxDb21iaW5lZE1hdGNoID0gdGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCk7XG4gICAgaWYgKHJlbENvbWJpbmVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIyID0gcmVsQ29tYmluZWRNYXRjaFs0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIHVuaXRzIGlzIGhvdXJzIG9yIG1pbnV0ZXMgLT4gWUVTXG4gICAgICAgIGlmICh1bml0U3RyMS5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjEgPT09ICdtJyB8fCB1bml0U3RyMS5zdGFydHNXaXRoKCdtaW4nKSB8fFxuICAgICAgICAgICAgdW5pdFN0cjIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIyID09PSAnbScgfHwgdW5pdFN0cjIuc3RhcnRzV2l0aCgnbWluJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSAtPiBOTyAoZGF5cywgd2Vla3MsIG1vbnRocywgeWVhcnMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBpdCdzIGEgc2ltcGxlIGRlbGF5IGluIEhPVVJTIG9yIE1JTlVURVMgLT4gWUVTXG4gICAgY29uc3QgcmVsTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBtLCBtaW4sIG1pbnV0ZXMsIGgsIGhvdXJzLi4uXG4gICAgICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF5cywgbW9udGhzLCB5ZWFycyAtPiBOT1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRoIHRpbWUgKE5leHQgTW9uZGF5IGF0IDNwbSkgLT4gWUVTXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgJiYgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gNS4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRob3V0IHRpbWUgKE5leHQgTW9uZGF5KSBvciBUb21vcnJvdyAtPiBOTyAoR2VuZXJhbGx5IHdlIGp1c3Qgd2FudCB0aGUgZGF0ZSlcbiAgICAvLyBJZiB5b3Ugd2FudCB0aW1lIGZvciBcIlRvbW9ycm93XCIsIHJlbW92ZSB0aGUgbGluZXMgYmVsb3cuXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5IGtleXdvcmRzIGluIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXRlS2V5d29yZHMgPSBbJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddO1xuICAgIGNvbnN0IGRhdGVXb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkYXRlS2V5d29yZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAvLyB0KCkgYWx3YXlzIGZhbGxzIGJhY2sgdG8gRW5nbGlzaCAobGFuZy9oZWxwZXIudHMpLCBhbmQgZW4udHNcbiAgICAgICAgLy8gYWx3YXlzIGRlZmluZXMgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCBzbyB0aGlzIGd1YXJkIGNhbid0XG4gICAgICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIGZvciB0aGVzZSB0aHJlZSBrZXlzIC0tIGtlcHQgZm9yIHNhZmV0eSBpbiBjYXNlXG4gICAgICAgIC8vIHRoYXQgaW52YXJpYW50IGV2ZXIgY2hhbmdlcy5cbiAgICAgICAgY29uc3Qgd29yZCA9IHQoa2V5LCBsYW5nKTtcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgICAgZGF0ZVdvcmRzLnB1c2god29yZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVdvcmRzLnNvbWUodyA9PiBuZXcgUmVnRXhwKGBeJHt3LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9JGAsICdpJykudGVzdCh0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGFzayB0aGUgbGlicmFyeSBpZiBpdCBzZWVzIGFuIGV4cGxpY2l0IHRpbWUgKGV4OiBcIlRvbW9ycm93IGF0IDVwbVwiKVxuICAgIGlmICghdGhpcy5jaHJvbm9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWRSZXN1bHQgJiYgcGFyc2VkUmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlZFJlc3VsdFswXS5zdGFydDtcbiAgICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIikgfHwgc3RhcnQuaXNDZXJ0YWluKFwibWludXRlXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4iLCIvKipcbiAqIEltcGzDqW1lbnRhdGlvbiBkJ3VuIGNhY2hlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gKiBVdGlsaXPDqSBwb3VyIGxpbWl0ZXIgbGEgbcOpbW9pcmUgdXRpbGlzw6llIHBhciBsZXMgY2FjaGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNhY2hlOiBNYXA8SywgVj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTFJVIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICogXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIChkZWZhdWx0OiA1MDApXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXhTaXplID0gNTAwKSB7XG4gICAgaWYgKG1heFNpemUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTFJVIENhY2hlIG1heFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIFbDqXJpZmllIHNpIHVuZSBjbMOpIGV4aXN0ZSBkYW5zIGxlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW50IHVuZSB2YWxldXIgZHUgY2FjaGUgZXQgbGEgbWFycXVlIGNvbW1lIHLDqWNlbW1lbnQgdXRpbGlzw6llXG4gICAqIEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBieSBrZXlcbiAgICogSWYgdGhlIGtleSBleGlzdHMsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRMOpcGxhY2VyIGxhIGNsw6kgw6AgbGEgZmluIChtb3N0IHJlY2VudGx5IHVzZWQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBam91dGUgb3UgbWV0IMOgIGpvdXIgdW5lIHZhbGV1ciBkYW5zIGxlIGNhY2hlXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgY2FjaGVcbiAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZFxuICAgKiBTaSBsYSB0YWlsbGUgbWF4aW1hbGUgZXN0IGF0dGVpbnRlLCBzdXBwcmltZSBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldFxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmVcbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gU2kgbGEgY2zDqSBleGlzdGUgZMOpasOgLCBsYSBzdXBwcmltZXIgZCdhYm9yZCBwb3VyIGxhIGTDqXBsYWNlciDDoCBsYSBmaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWUgKHByZW1pw6hyZSBlbnRyw6llKVxuICAgICAgLy8gTWFwIGl0ZXJhdG9yJ3MgSXRlcmF0b3JSZXN1bHQudmFsdWUgdHlwZSBkZWZhdWx0cyB0byBcIlQgfCBhbnlcIiAodGhlXG4gICAgICAvLyByZXR1cm4tcG9zaXRpb24gdHlwZSBwYXJhbSBkZWZhdWx0cyB0byBhbnkpLCB3aGljaCBUUyBjb2xsYXBzZXMgdG9cbiAgICAgIC8vIGFueSAtLSBjYXN0IGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4ganVzdCBhbm5vdGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIEsgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFqb3V0ZXIgbGEgbm91dmVsbGUgZW50csOpZSDDoCBsYSBmaW5cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgZW50csOpZSBkdSBjYWNoZVxuICAgKiBEZWxldGVzIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRlbGV0ZShrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWRlIGNvbXBsw6h0ZW1lbnQgbGUgY2FjaGVcbiAgICogQ2xlYXJzIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIGFjdHVlbGxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIG1heGltYWxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSBsaW1pdCBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzdG9yZWRcbiAgICovXG4gIGdldCBtYXhTaXplTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgZW50csOpZXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuICAgKiBVdGlsZSBwb3VyIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZVxuICAgKiBVc2VmdWwgZm9yIHBlcmlvZGljIGNsZWFudXBcbiAgICogXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgW2tleSwgdmFsdWVdIHBhaXJzXG4gICAqL1xuICBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgY2zDqXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrZXlzIGluIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBrZXlzXG4gICAqL1xuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Sz4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmtleXMoKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBDaHJvbm8sIFBhcnNlZFJlc3VsdCwgUGFyc2luZ09wdGlvbiB9IGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IGdldENocm9ub3MgZnJvbSBcIi4vY2hyb25vXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRpbWVEZXRlY3RvciB9IGZyb20gXCIuL3RpbWUtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQge1xuICBnZXRMb2NhbGVXZWVrU3RhcnQsXG4gIGdldFdlZWtOdW1iZXIsXG4gIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sXG4gIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gIGRlc2NyaWJlRXJyb3IsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cblxuLy8gVHlwZSBhbGlhcyBmb3IgTW9tZW50IGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVXNpbmcgdGhlIHR5cGUgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgdHlwZXMgc2luY2UgbW9tZW50IGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVGhlIG1vbWVudCBwYWNrYWdlIGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbiwgYnV0IHRoZSBNb21lbnQgdHlwZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSBvYnNpZGlhbiBtb2R1bGVcbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxudHlwZSBUaW1lVW5pdCA9ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnd2Vla3MnIHwgJ21vbnRocycgfCAneWVhcnMnO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgcGFyc2VkIGRhdGUgaW4gbXVsdGlwbGUgZm9ybWF0cyBmb3IgY29udmVuaWVuY2UuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRlKTsgLy8gRGF0ZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5tb21lbnQuZm9ybWF0KFwiZGRkZFwiKSk7IC8vIFwiTW9uZGF5XCJcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJlc3VsdCB7XG4gIC8qKiBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0ICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogTmF0aXZlIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QgKi9cbiAgZGF0ZTogRGF0ZTtcbiAgLyoqIE1vbWVudC5qcyBvYmplY3QgZm9yIGFkdmFuY2VkIGRhdGUgbWFuaXB1bGF0aW9uICovXG4gIG1vbWVudDogTW9tZW50O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSByYW5nZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiBhIHBhcnNlZCByYW5nZSwgcGx1cyBhIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpO1xuICogaWYgKHJhbmdlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJhbmdlLnN0YXJ0RGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBNb25kYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBGcmlkYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJhbmdlUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCByYW5nZSBzdHJpbmcgKGUuZy4sIFwiMjAyNS0wMS0wNiB0byAyMDI1LTAxLTEwXCIpICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogU3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuICAvKiogRW5kIGRhdGUgb2YgdGhlIHJhbmdlIGFzIGEgbmF0aXZlIERhdGUgb2JqZWN0ICovXG4gIGVuZERhdGU6IERhdGU7XG4gIC8qKiBTdGFydCBkYXRlIGFzIGEgTW9tZW50LmpzIG9iamVjdCAqL1xuICBzdGFydE1vbWVudDogTW9tZW50O1xuICAvKiogRW5kIGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIGVuZE1vbWVudDogTW9tZW50O1xuICAvKiogQWx3YXlzIHRydWUgZm9yIHJhbmdlIHJlc3VsdHMgKi9cbiAgaXNSYW5nZTogdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZSBhcyBNb21lbnQgb2JqZWN0cyAqL1xuICBkYXRlTGlzdD86IE1vbWVudFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTERQYXJzZXIge1xuICBjaHJvbm9zOiBDaHJvbm9bXTtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgXG4gIC8vIER5bmFtaWMgcmVnZXggZ2VuZXJhdGVkIGZyb20gdHJhbnNsYXRpb25zXG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7IC8vIEZvciBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwOyAvLyBGb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICByZWdleFdlZWtkYXlPbmx5OiBSZWdFeHA7IC8vIEZvciBcIndlZG5lc2RheVwiICh3aXRob3V0IHByZWZpeClcbiAgcmVnZXhEYXRlUmFuZ2U6IFJlZ0V4cDsgLy8gRm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgcmVnZXhPcmRpbmFsT2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCJcbiAgcmVnZXhMYXN0RGF5T2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJsYXN0IGRheSBvZiBtb250aFwiXG4gIHJlZ2V4V2Vla2RheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgLy8gRm9yIHN1ZmZpeCBsYW5ndWFnZXMgdGhhdCBwdXQgdGhlIHF1YW50aWZpZXIvdW5pdCBiZWZvcmUgdGhlIFwibGF0ZXJcIiBtYXJrZXJcbiAgLy8gaW5zdGVhZCBvZiBhbiBcImluXCIgcHJlZml4IChlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIiA9IFwibGF0ZXJcIikuXG4gIHJlZ2V4UmVsYXRpdmVTdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeDogUmVnRXhwIHwgbnVsbDsgLy8gRm9yIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAvLyBNaXJyb3Igb2YgcmVnZXhSZWxhdGl2ZVN1ZmZpeCBmb3IgdGhlIFBBU1QgZGlyZWN0aW9uIChlLmcuIFBvcnR1Z3Vlc2VcbiAgLy8gXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLlxuICByZWdleEFnb1N1ZmZpeDogUmVnRXhwIHwgbnVsbDtcbiAgXG4gIC8vIEtleXdvcmRzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gIGltbWVkaWF0ZUtleXdvcmRzOiBTZXQ8c3RyaW5nPjtcbiAgcHJlZml4S2V5d29yZHM6IHsgdGhpczogU2V0PHN0cmluZz47IG5leHQ6IFNldDxzdHJpbmc+OyBsYXN0OiBTZXQ8c3RyaW5nPiB9O1xuICB0aW1lVW5pdE1hcDogTWFwPHN0cmluZywgVGltZVVuaXQ+O1xuICBcbiAgLy8gQ2FjaGUgZm9yIHBhcnNlZCBkYXRlcyAoTFJVIGF2ZWMgbGltaXRlIGRlIDUwMCBlbnRyw6llcylcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBEYXRlPjtcbiAgcHJpdmF0ZSBjYWNoZURheTogbnVtYmVyOyAvLyBEYXkgb2YgeWVhciBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIFxuICAvLyBDb2xsZWN0cy9jYWNoZXMgdHJhbnNsYXRpb25zIGFjcm9zcyBhbGwgYWN0aXZlIGxhbmd1YWdlcyBhbmQgYnVpbGRzXG4gIC8vIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0gKHNlZSB0cmFuc2xhdGlvbi1jb2xsZWN0b3IudHMpXG4gIHByaXZhdGUgdGM6IFRyYW5zbGF0aW9uQ29sbGVjdG9yO1xuXG4gIC8vIFRpbWUgZGV0ZWN0b3JcbiAgcHJpdmF0ZSB0aW1lRGV0ZWN0b3I6IFRpbWVEZXRlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZ2V0Q2hyb25vcyhsYW5ndWFnZXMpO1xuICAgIHRoaXMudGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcbiAgICB0aGlzLmluaXRpYWxpemVSZWdleCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUtleXdvcmRzKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERhdGU+KHRoaXMuTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuY2FjaGVEYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBkZXRlY3RvclxuICAgIHRoaXMudGltZURldGVjdG9yID0gbmV3IFRpbWVEZXRlY3Rvcih7XG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgY2hyb25vczogdGhpcy5jaHJvbm9zLFxuICAgICAgcmVnZXhSZWxhdGl2ZTogdGhpcy5yZWdleFJlbGF0aXZlLFxuICAgICAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCxcbiAgICAgIHJlZ2V4V2Vla2RheTogdGhpcy5yZWdleFdlZWtkYXksXG4gICAgICByZWdleFdlZWtkYXlXaXRoVGltZTogdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGR5bmFtaWMgcmVnZXggZnJvbSB0cmFuc2xhdGlvbnNcbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVnZXgoKTogdm9pZCB7XG4gICAgY29uc3QgaW5Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiaW5cIik7XG4gICAgY29uc3QgbmV4dFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJuZXh0XCIpO1xuICAgIGNvbnN0IGxhc3RXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiKTtcbiAgICBjb25zdCB0aGlzV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIik7XG4gICAgY29uc3QgYW5kV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImFuZFwiKTtcbiAgICBjb25zdCBhdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJhdFwiKTtcbiAgICBjb25zdCBmcm9tV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZyb21cIik7XG4gICAgY29uc3QgdG9Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidG9cIik7XG5cbiAgICAvLyBDb2xsZWN0IHdlZWtkYXlzIChsb3dlcmNhc2VkKSBhY3Jvc3MgYWxsIGxhbmd1YWdlcywgcGx1cyB0aGUgY29tbW9uXG4gICAgLy8gRW5nbGlzaCBhYmJyZXZpYXRpb25zIChtb24vdHVlLy4uLikgd2hpY2ggYXJlbid0IHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkuXG4gICAgY29uc3Qgd2Vla2RheUtleXMgPSBbJ3N1bmRheScsICdtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5J107XG4gICAgY29uc3Qgd2Vla2RheXMgPSB3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXksIHsgbG93ZXJjYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAodGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoJ2VuJykpIHtcbiAgICAgIHdlZWtkYXlzLnB1c2goJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0JywgJ3N1bicpO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGltZSB1bml0cyAobWludXRlL2hvdXIvZGF5L3dlZWsvbW9udGgveWVhcikgYWNyb3NzIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdHMgPSB0aW1lVW5pdEtleXMuZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG5cbiAgICBjb25zdCBpblBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oaW5Xb3Jkcyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGhpc1dvcmRzLCAuLi5uZXh0V29yZHMsIC4uLmxhc3RXb3Jkc10pO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKHdlZWtkYXlzKTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRzKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFdvcmRzKTtcbiAgICBjb25zdCBhdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYXRXb3Jkcyk7XG4gICAgY29uc3QgZnJvbVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oZnJvbVdvcmRzKTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odG9Xb3Jkcyk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwiaW4gMiBtaW51dGVzXCJcbiAgICB0aGlzLnJlZ2V4UmVsYXRpdmUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtpblBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccysoPzoke2FuZFBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwibmV4dCBNb25kYXlcIlxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIGJldHdlZW4gcHJlZml4IGFuZCB3ZWVrZGF5IHNvIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlc1xuICAgIC8vIGJldHdlZW4gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn+S4gFwiKSBzdGlsbCBtYXRjaC5cbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIiAtIGNhcHR1cmVzIGRheSBhbmQgdGltZVxuICAgIHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHthdFBhdHRlcm59KVxcXFxzKyguKykkYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3Igc2ltcGxlIHdlZWtkYXkgd2l0aG91dCBwcmVmaXggKGUuZy4sIFwid2VkbmVzZGF5XCIsIFwiZnJpZGF5XCIpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPbmx5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC0gY2FwdHVyZXMgdHdvIHdlZWtkYXlzXG4gICAgdGhpcy5yZWdleERhdGVSYW5nZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7ZnJvbVBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyooPzoke3RvUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIGNvbnN0IG9mUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcIm9mXCIpO1xuICAgIGNvbnN0IGZpcnN0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImZpcnN0XCIpO1xuXG4gICAgLy8gUmVnZXggZm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiIG9yIFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIFwidGhlXCIvXCJsZVwiL1wiZGVyXCIpIChvcmRpbmFsIG51bWJlciBsaWtlIFwiMTV0aFwiLCBcIjE1w6htZVwiLCBcIjE1LlwiKSBcIm9mXCIvXCJkdVwiL1wiZGVzXCIgKG5leHQvbGFzdC90aGlzKSAobW9udGgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEZyZW5jaCBpbnZlcnNpb246IFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIEFsc28gaGFuZGxlcyBHZXJtYW46IFwiZGVyIDE1LiBkZXMgbsOkY2hzdGVuIE1vbmF0c1wiIChwcmVmaXggYmV0d2VlbiBcIm9mXCIgYW5kIG1vbnRoKVxuICAgIC8vIFVzaW5nIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gZnJvbSB1dGlscy50cyBmb3Igb3JkaW5hbCBtYXRjaGluZ1xuICAgIHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OnRoZXxsZXxkZXJ8ZGFzfGVsfGlsfG98ZGV8aGV0KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIiBvciBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgICBjb25zdCBkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZGF5XCIpO1xuXG4gICAgLy8gTWFrZSBwcmVmaXggb3B0aW9uYWwgLSBcImxhc3QgZGF5IG9mIG1vbnRoXCIgd2l0aG91dCBwcmVmaXggbWVhbnMgXCJ0aGlzIG1vbnRoXCJcbiAgICAvLyBcImxhc3RcIiBoZXJlIGlzIGFuIGFkamVjdGl2ZSBtb2RpZnlpbmcgXCJkYXlcIiwgbm90IGEgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gQWxzbyBoYW5kbGUgRnJlbmNoIGludmVyc2lvbjogXCJkZXJuaWVyIGpvdXIgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIFBhdHRlcm46IChvcHRpb25hbCBwcmVmaXgpIFwibGFzdFwiIChkYXkgd29yZCkgXCJvZlwiIChvcHRpb25hbCBwcmVmaXgpIChtb250aCkgKG9wdGlvbmFsIHByZWZpeCBhZnRlciBtb250aClcbiAgICAvLyBSZXVzZSBsYXN0V29yZHMgY29sbGVjdGVkIGFib3ZlIChsaW5lIDE0OC0xNTApXG4gICAgY29uc3QgbGFzdEFkamVjdGl2ZVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24obGFzdFdvcmRzKTtcbiAgICBcbiAgICB0aGlzLnJlZ2V4TGFzdERheU9mTW9udGggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke2xhc3RBZGplY3RpdmVQYXR0ZXJufSlcXFxccysoJHtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgb3IgXCJwcmVtaWVyIGx1bmRpIGR1IG1vaXNcIiBvciBcImxhc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcInByZW1pZXIgbHVuZGkgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke2ZpcnN0UGF0dGVybn18JHtwcmVmaXhQYXR0ZXJufSlcXFxccysoJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHtvZlBhdHRlcm59KVxcXFxzKyg/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7dGltZVVuaXRQYXR0ZXJufSkoPzpcXFxccysoJHtwcmVmaXhQYXR0ZXJufSkpP1xcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiwgSmFwYW5lc2UgXCIy5pel5b6MXCIpIHB1dFxuICAgIC8vIHRoZSBcImxhdGVyXCIgbWFya2VyIGFmdGVyIHRoZSBudW1iZXIgYW5kIHVuaXQgaW5zdGVhZCBvZiB1c2luZyBhbiBcImluXCJcbiAgICAvLyBwcmVmaXguIEVhY2ggbGFuZ3VhZ2UgY2FuIGxpc3QgaXRzIG1hcmtlcihzKSBleHBsaWNpdGx5IHVuZGVyIHRoZVxuICAgIC8vIFwibGF0ZXJcIiBrZXkgKGUuZy4gQ2hpbmVzZSBcIuW+jHzlkI5cIiBmb3IgYm90aCBzY3JpcHRzKTsgdGhpcyBrZXkgaXMgbmV2ZXJcbiAgICAvLyB1c2VkIGZvciBkaXNwbGF5L2ludGVycG9sYXRpb24sIG9ubHkgZm9yIHRoaXMgbWF0Y2hpbmcsIHNvIGl0J3Mgc2FmZSB0b1xuICAgIC8vIGxpc3QgbXVsdGlwbGUgc2NyaXB0IHZhcmlhbnRzIHdpdGggXCJ8XCIgdGhlIHNhbWUgd2F5IHdlZWtkYXkvcHJlZml4IHdvcmRzXG4gICAgLy8gZG8uIFRoZSBcImluZGF5c1wiIHRlbXBsYXRlIGl0c2VsZiBtdXN0IHN0YXkgYSBzaW5nbGUgZm9ybSBzaW5jZSBpdCdzXG4gICAgLy8gYWxzbyB1c2VkIHZlcmJhdGltIGluIGF1dG9zdWdnZXN0IGxhYmVscywgYW5kIHRlbXBsYXRlcyB3aXRoXG4gICAgLy8gJXt0aW1lRGVsdGF9IGRvbid0IGdldCBzcGxpdCBvbiBcInxcIiBsaWtlIHBsYWluIHdvcmQgbGlzdHMgZG8uXG4gICAgLy9cbiAgICAvLyBMYW5ndWFnZXMgdGhhdCBkb24ndCBkZWZpbmUgXCJsYXRlclwiIGZhbGwgYmFjayB0byBpbmZlcnJpbmcgdGhlIG1hcmtlclxuICAgIC8vIGZyb20gdGhlaXIgXCJpbmRheXNcIiB0ZW1wbGF0ZSAoZS5nLiBcIiV7dGltZURlbHRhfeWkqeW+jFwiIC0+IG1hcmtlciBcIuW+jFwiKSxcbiAgICAvLyBzbyB0aGlzIHN0aWxsIHdvcmtzIGZvciBhbnkgbGFuZ3VhZ2UgYXV0aG9yZWQgd2l0aG91dCB0aGUgZXh0cmEga2V5LlxuICAgIGNvbnN0IHN1ZmZpeE1hcmtlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGxhdGVyV29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdsYXRlcicsIGxhbmcpO1xuICAgICAgaWYgKGxhdGVyV29yZCAmJiBsYXRlcldvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgbGF0ZXJXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnaW5kYXlzJywgbGFuZyk7XG4gICAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlID09PSAnTk9URk9VTkQnIHx8IHRlbXBsYXRlLmluZGV4T2YoJyV7dGltZURlbHRhfScpICE9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtYWluZGVyID0gdGVtcGxhdGUuc2xpY2UoJyV7dGltZURlbHRhfScubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRheVdvcmQgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnZGF5JywgbGFuZyk7XG4gICAgICBpZiAoIWRheVdvcmQgfHwgZGF5V29yZCA9PT0gJ05PVEZPVU5EJykgY29udGludWU7XG4gICAgICBjb25zdCB1bml0VXNlZCA9IGRheVdvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykuZmluZCh2ID0+IHJlbWFpbmRlci5zdGFydHNXaXRoKHYpKTtcbiAgICAgIGlmICghdW5pdFVzZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbWFya2VyID0gcmVtYWluZGVyLnNsaWNlKHVuaXRVc2VkLmxlbmd0aCkudHJpbSgpO1xuICAgICAgaWYgKG1hcmtlcikgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBpZiAoc3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3Qgc3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHN1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7c3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHthbmRQYXR0ZXJufSlcXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPSBudWxsO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBQQVNUIGxhbmd1YWdlcyAoZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIlxuICAgIC8vICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLCB0aGUgcGFzdC1kaXJlY3Rpb24gbWlycm9yIG9mIHRoZSBcImxhdGVyXCIgbWVjaGFuaXNtXG4gICAgLy8gYWJvdmUuIFVubGlrZSBcImxhdGVyXCIsIHRoZXJlJ3Mgbm8gdGVtcGxhdGUgdG8gaW5mZXIgdGhpcyBtYXJrZXIgZnJvbVxuICAgIC8vICh0aGUgZGF5c2FnbyB0ZW1wbGF0ZSBhbHJlYWR5IGhhcyBpdHMgb3duICV7dGltZURlbHRhfS1wcmVmaXggZm9ybSwgXCJow6FcbiAgICAvLyAle3RpbWVEZWx0YX0gZGlhc1wiLCB3aGljaCBkb2Vzbid0IGltcGx5IGEgc3VmZml4IHZhcmlhbnQgYWxzbyBleGlzdHMpLFxuICAgIC8vIHNvIGxhbmd1YWdlcyBtdXN0IG9wdCBpbiBleHBsaWNpdGx5IHZpYSB0aGUgXCJhZ29zdWZmaXhcIiBrZXkuXG4gICAgY29uc3QgYWdvU3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYWdvU3VmZml4V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdhZ29zdWZmaXgnLCBsYW5nKTtcbiAgICAgIGlmIChhZ29TdWZmaXhXb3JkICYmIGFnb1N1ZmZpeFdvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgYWdvU3VmZml4V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KSkge1xuICAgICAgICAgIGFnb1N1ZmZpeE1hcmtlcnMuYWRkKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWdvU3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3QgYWdvU3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKGFnb1N1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2Fnb1N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGtleXdvcmRzIGZvciBmYXN0IGRldGVjdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVLZXl3b3JkcygpOiB2b2lkIHtcbiAgICB0aGlzLmltbWVkaWF0ZUtleXdvcmRzID0gbmV3IFNldChcbiAgICAgIFsnbm93JywgJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpXG4gICAgKTtcbiAgICB0aGlzLnByZWZpeEtleXdvcmRzID0ge1xuICAgICAgdGhpczogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbmV4dDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbGFzdDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImxhc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICAvLyBUaW1lIHVuaXRzIHdpdGggbWFwcGluZyB0byBNb21lbnQuanMgdW5pdHNcbiAgICBjb25zdCB1bml0TWFwcGluZ3M6IHsga2V5OiBzdHJpbmc7IG1vbWVudFVuaXQ6IFRpbWVVbml0IH1bXSA9IFtcbiAgICAgIHsga2V5OiAnbWludXRlJywgbW9tZW50VW5pdDogJ21pbnV0ZXMnIH0sXG4gICAgICB7IGtleTogJ2hvdXInLCBtb21lbnRVbml0OiAnaG91cnMnIH0sXG4gICAgICB7IGtleTogJ2RheScsIG1vbWVudFVuaXQ6ICdkYXlzJyB9LFxuICAgICAgeyBrZXk6ICd3ZWVrJywgbW9tZW50VW5pdDogJ3dlZWtzJyB9LFxuICAgICAgeyBrZXk6ICdtb250aCcsIG1vbWVudFVuaXQ6ICdtb250aHMnIH0sXG4gICAgICB7IGtleTogJ3llYXInLCBtb21lbnRVbml0OiAneWVhcnMnIH0sXG4gICAgXTtcbiAgICB0aGlzLnRpbWVVbml0TWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB1bml0TWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhtYXBwaW5nLmtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgdGhpcy50aW1lVW5pdE1hcC5zZXQod29yZCwgbWFwcGluZy5tb21lbnRVbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogREFZIE5BTUUg4oaSIE5VTUVSSUMgSU5ERVggQ09OVkVSU0lPTiAtLS1cbiAgLy8gQ29udmVydHMgZGF5IG5hbWVzIGZyb20gYWxsIGxhbmd1YWdlcyB0byBudW1lcmljIGluZGljZXMgKDAtNilcbiAgLy8gTW9tZW50LmpzIHVzZXM6IDA9U3VuZGF5LCAxPU1vbmRheSwgMj1UdWVzZGF5LCAzPVdlZG5lc2RheSwgND1UaHVyc2RheSwgNT1GcmlkYXksIDY9U2F0dXJkYXlcbiAgcHJpdmF0ZSBnZXREYXlPZldlZWtJbmRleChkYXlOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkYXlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBFbmdsaXNoIGRheSBuYW1lcy9hYmJyZXZpYXRpb25zLCBhbHdheXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgYWN0aXZlIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRheU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICdzdW5kYXknOiAwLCAnc3VuJzogMCxcbiAgICAgICdtb25kYXknOiAxLCAnbW9uJzogMSxcbiAgICAgICd0dWVzZGF5JzogMiwgJ3R1ZSc6IDIsICd0dWVzJzogMixcbiAgICAgICd3ZWRuZXNkYXknOiAzLCAnd2VkJzogMyxcbiAgICAgICd0aHVyc2RheSc6IDQsICd0aHUnOiA0LCAndGh1cic6IDQsICd0aHVycyc6IDQsXG4gICAgICAnZnJpZGF5JzogNSwgJ2ZyaSc6IDUsXG4gICAgICAnc2F0dXJkYXknOiA2LCAnc2F0JzogNixcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRheXMgZnJvbSBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGRheUtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICBkYXlNYXBbdmFyaWFudF0gPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRheU1hcFtub3JtYWxpemVkXSA/PyAwOyAvLyBEZWZhdWx0IHRvIFN1bmRheSBpZiBub3QgcmVjb2duaXplZFxuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFVUSUxJVElFUyAtLS1cbiAgLy8gR2V0IGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSBnZXREYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDApO1xuICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmYgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gc2VsZWN0ZWRUZXh0LCB3ZWVrU3RhcnRQcmVmZXJlbmNlLCBhbmQgY3VycmVudCBkYXlcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIC8vIEluY2x1ZGUgZGF5IGluIGtleSB0byBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgY2FjaGUgd2hlbiBkYXkgY2hhbmdlc1xuICAgIHJldHVybiBgJHtzZWxlY3RlZFRleHQudHJpbSgpfXwke3dlZWtTdGFydFByZWZlcmVuY2V9fCR7Y3VycmVudERheX1gO1xuICB9XG5cbiAgLy8gU3RvcmUgcmVzdWx0IGluIGNhY2hlIGFuZCByZXR1cm4gaXRcbiAgcHJpdmF0ZSBjYWNoZUFuZFJldHVybihjYWNoZUtleTogc3RyaW5nLCByZXN1bHQ6IERhdGUpOiBEYXRlIHtcbiAgICAvLyBDcsOpZXIgdW5lIG5vdXZlbGxlIGluc3RhbmNlIGRlIERhdGUgcG91ciDDqXZpdGVyIGxlcyByw6lmw6lyZW5jZXMgcGFydGFnw6llc1xuICAgIGNvbnN0IGNhY2hlZERhdGUgPSBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVkRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHJlc3VsdC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gLS0tIE1BSU4gRU5HSU5FIC0tLVxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzIGFuZCB2YXJpb3VzIGRhdGUgZXhwcmVzc2lvbnM6XG4gICAqIC0gSW1tZWRpYXRlIGRhdGVzOiBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJ5ZXN0ZXJkYXlcIiwgXCJub3dcIlxuICAgKiAtIFJlbGF0aXZlIGRhdGVzOiBcImluIDIgZGF5c1wiLCBcImluIDMgd2Vla3NcIiwgXCJpbiAxIG1vbnRoXCJcbiAgICogLSBDb21iaW5lZCBkdXJhdGlvbnM6IFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCJcbiAgICogLSBXZWVrZGF5czogXCJuZXh0IE1vbmRheVwiLCBcImxhc3QgRnJpZGF5XCIsIFwidGhpcyBXZWRuZXNkYXlcIlxuICAgKiAtIFdlZWtkYXlzIHdpdGggdGltZTogXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgKiAtIFBlcmlvZHM6IFwibmV4dCB3ZWVrXCIsIFwibmV4dCBtb250aFwiLCBcIm5leHQgeWVhclwiXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyB0byBwYXJzZSAoZS5nLiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydCAoYWZmZWN0cyBcIm5leHQgd2Vla1wiIGNhbGN1bGF0aW9ucylcbiAgICogQHJldHVybnMgUGFyc2VkIERhdGUgb2JqZWN0LCBvciBjdXJyZW50IGRhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IGRhdGUgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZShcInRvbW9ycm93XCIsIFwibW9uZGF5XCIpO1xuICAgKiBjb25zb2xlLmxvZyhkYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIHRvbW9ycm93XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgLy8gTmV0dG95ZXIgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBlbiBmaW4gZGUgY2hhw65uZSAoZXg6IFwidG9tb3Jyb3chISFcIilcbiAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHNlbGVjdGVkVGV4dC50cmltKCkucmVwbGFjZSgvWyE/Ll0rJC8sICcnKTtcbiAgICBjb25zdCB0ZXh0ID0gY2xlYW5lZFRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFwibm93XCIvXCJ0b2RheVwiLCBcIlggYWdvXCIsIGFuZCBcImluIFggdW5pdHNcIiBhbGwgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyBleGFjdCBjdXJyZW50IGluc3RhbnQgKG5vdCBqdXN0IHRoZSBjdXJyZW50IGRheSksIHNvIGNhY2hpbmcgdGhlbSBhdFxuICAgIC8vIHRoZSBjYWNoZSdzIGRheS1zaXplZCBncmFudWxhcml0eSB3b3VsZCByZXR1cm4gYSBzdGFsZSB0aW1lIG9uIGV2ZXJ5XG4gICAgLy8gY2FsbCBhZnRlciB0aGUgZmlyc3Qgd2l0aGluIHRoYXQgZGF5IChlLmcuIFwiaW4gMjAgbWludXRlc1wiIG9yIFwibm93XCJcbiAgICAvLyBhbHdheXMgcmV0dXJuaW5nIHRoZSBmaXJzdCByZXN1bHQgdGhleSBldmVyIHByb2R1Y2VkIHRoYXQgZGF5KS5cbiAgICAvLyBBbHdheXMgY29tcHV0ZSB0aGVzZSBmcmVzaCwgYnlwYXNzaW5nIHRoZSBjYWNoZSBlbnRpcmVseS5cbiAgICAvLyBcInRvbW9ycm93XCIvXCJ5ZXN0ZXJkYXlcIiByZXNvbHZlIHRvIGEgc3BlY2lmaWMgY2FsZW5kYXIgZGF5IGxpa2UgdGhlXG4gICAgLy8gb3RoZXIgY2FjaGVkIGV4cHJlc3Npb25zIGJlbG93LCBzbyB0aGV5IHN0YXkgb24gdGhlIGNhY2hlZCBwYXRoXG4gICAgLy8gKGhhbmRsZWQgYnkgdHJ5SW1tZWRpYXRlS2V5d29yZHMgZnVydGhlciBkb3duKS5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdub3cnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTtcbiAgICBjb25zdCB0b2RheVdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3Qgdm9sYXRpbGVSZXN1bHQgPVxuICAgICAgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQpIHx8IHRvZGF5V29yZHMuaW5jbHVkZXModGV4dCkgPyBuZXcgRGF0ZSgpIDogbnVsbCkgPz9cbiAgICAgIHRoaXMudHJ5UGFzdEV4cHJlc3Npb25zKHRleHQsIGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0KTtcbiAgICBpZiAodm9sYXRpbGVSZXN1bHQpIHJldHVybiB2b2xhdGlsZVJlc3VsdDtcblxuICAgIC8vIFbDqXJpZmllciBzaSBsZSBqb3VyIGEgY2hhbmfDqSBwb3VyIGludmFsaWRlciBsZSBjYWNoZVxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIGlmIChjdXJyZW50RGF5ICE9PSB0aGlzLmNhY2hlRGF5KSB7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLmNhY2hlRGF5ID0gY3VycmVudERheTtcbiAgICB9XG5cbiAgICAvLyBHw6luw6lyZXIgbGEgY2zDqSBkdSBjYWNoZSBhdmVjIGxlIHRleHRlIG5ldHRvecOpIHBvdXIgcXVlIFwidG9tb3Jyb3dcIiBldCBcInRvbW9ycm93ISEhXCIgdXRpbGlzZW50IGxhIG3Dqm1lIGNsw6lcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjbGVhbmVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICAvLyBWw6lyaWZpZXIgbGUgY2FjaGUgYXZhbnQgZGUgcGFyc2VyXG4gICAgY29uc3QgY2FjaGVkRGF0ZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkRGF0ZSkge1xuICAgICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICAgIHJldHVybiBuZXcgRGF0ZShjYWNoZWREYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cnkqKCkgbWV0aG9kIGJlbG93IHJldHVybnMgbnVsbCB3aGVuIGl0IGRvZXNuJ3QgcmVjb2duaXplIHRoZVxuICAgIC8vIGlucHV0LCBsZXR0aW5nIHRoZSBuZXh0IGxldmVsIGhhdmUgYSBzaG90IC0tIHNhbWUgTEVWRUwgMS00IG9yZGVyIHRoaXNcbiAgICAvLyBmaWxlIGhhcyBhbHdheXMgdXNlZCwganVzdCBzcGxpdCBpbnRvIG5hbWVkLCBpbmRlcGVuZGVudGx5IHJlYWRhYmxlXG4gICAgLy8gbWV0aG9kcyBpbnN0ZWFkIG9mIG9uZSBmdW5jdGlvbiB0aGF0IHVzZWQgdG8gcnVuIH41NzAgbGluZXMuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIHRoaXMudHJ5SW1tZWRpYXRlS2V5d29yZHModGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLmNocm9ub0ZhbGxiYWNrKHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZUFuZFJldHVybihjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxOiBJTU1FRElBVEUgS0VZV09SRFMgKFNwZWVkIGFuZCBQcmVjaXNpb24pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaW1tZWRpYXRlS2V5d29yZHMuaGFzKHRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvbW9ycm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZXN0ZXJkYXknLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyh0ZXh0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDEuNTogUEFTVCBFWFBSRVNTSU9OUyAoMiBkYXlzIGFnbywgaWwgeSBhIDMgbWluKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlQYXN0RXhwcmVzc2lvbnModGV4dDogc3RyaW5nLCBjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIGZvciBcImFnb1wiIGV4cHJlc3Npb25zIGluIEVuZ2xpc2ggKGUuZy4sIFwiMiBkYXlzIGFnb1wiKS4gVW5saWtlXG4gICAgLy8gZXZlcnkgb3RoZXIgdW5pdC1jYXB0dXJpbmcgcmVnZXggaW4gdGhpcyBmaWxlLCB0aGlzIG9uZSBjYXB0dXJlcyB0aGVcbiAgICAvLyB1bml0IGdlbmVyaWNhbGx5IChcXHcrLCBub3QgcmVzdHJpY3RlZCB0byBrbm93biB0cmFuc2xhdGVkIHdvcmRzKSwgc29cbiAgICAvLyBndWVzc1VuaXQoKSdzIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBpcyBnZW51aW5lbHkgcmVhY2hhYmxlXG4gICAgLy8gaGVyZSBmb3IgdW5pdHMgbm8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkgcmVjb2duaXplcy5cbiAgICBjb25zdCBhZ29NYXRjaCA9IHRleHQubWF0Y2goL14oXFxkKylcXHMrKFxcdyspXFxzK2FnbyQvaSk7XG4gICAgaWYgKGFnb01hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29NYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBhc3QgZXhwcmVzc2lvbnMgaW4gYWxsIGxhbmd1YWdlcyAoZS5nLiwgXCJpbCB5IGEgMyBtaW51dGVzXCIsIFwidm9yIDIgU3R1bmRlblwiLCBldGMuKVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbWludXRlc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1pbnV0ZXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCBob3Vyc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImhvdXJzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgZGF5c0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImRheXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCB3ZWVrc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIndlZWtzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgbW9udGhzQWdvUGF0dGVybiA9IHRoaXMudGMudHJhbnNsYXRlKFwibW9udGhzYWdvXCIsIGxhbmcpO1xuXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgeyBwYXR0ZXJuOiBtaW51dGVzQWdvUGF0dGVybiwgdW5pdDogJ21pbnV0ZXMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogaG91cnNBZ29QYXR0ZXJuLCB1bml0OiAnaG91cnMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogZGF5c0Fnb1BhdHRlcm4sIHVuaXQ6ICdkYXlzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IHdlZWtzQWdvUGF0dGVybiwgdW5pdDogJ3dlZWtzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IG1vbnRoc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtb250aHMnIGFzIGNvbnN0IH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgdW5pdCB9IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5idWlsZEFnb1JlZ2V4KHBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiICgzIGRheXMgYWdvKVxuICAgIGNvbnN0IGFnb1N1ZmZpeE1hdGNoID0gdGhpcy5yZWdleEFnb1N1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhBZ29TdWZmaXgpIDogbnVsbDtcbiAgICBpZiAoYWdvU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYWdvU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IGFnb1N1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGFuIFwiWCBhZ29cIiB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgbWF0Y2hpbmcgcmVnZXguXG4gIC8vIEV4YW1wbGU6IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIgLT4gXCJpbCB5IGEgKFxcZCspIG1pbnV0ZXNcIlxuICAvLyBFeGFtcGxlOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIgKFJ1c3NpYW5cbiAgLy8gZ3JhbW1hdGljYWwgZm9ybXMpIC0+IFwi0YfQtdGA0LXQtyAoXFxkKykgKD860LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLKSDQvdCw0LfQsNC0XCJcbiAgLy8gRXhhbXBsZTogXCIle3RpbWVEZWx0YX3lpKnliY1cIiAoQ2hpbmVzZSwgbm8gc3BhY2VzKSAtPiBcIihcXGQrKeWkqeWJjVwiXG4gIHByaXZhdGUgYnVpbGRBZ29SZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCBudWxsIHtcbiAgICBpZiAoIXBhdHRlcm4gfHwgcGF0dGVybiA9PT0gXCJOT1RGT1VORFwiKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICAvLyBQbGFjZWhvbGRlciBzd2FwcGVkIGluIGJlZm9yZSBlc2NhcGluZyBhbmQgYmFjayBvdXQgYWZ0ZXJ3YXJkcywgc29cbiAgICAvLyAle3RpbWVEZWx0YX0gYmVjb21lcyBhIHJlYWwgY2FwdHVyZSBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIG1hbmdsZWQgYnlcbiAgICAvLyBlc2NhcGluZyBpdHMgb3duIGluc2VydGVkIFwiKFxcZCspXCIsIGFuZCBzbyBpdCBzdGlsbCB3b3JrcyB3aGVuIGVtYmVkZGVkXG4gICAgLy8gaW4gYSB0b2tlbiB3aXRoIG5vIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIiV7dGltZURlbHRhfeWkqeWJjVwiKS5cbiAgICBjb25zdCBQTEFDRUhPTERFUiA9ICdcXHUwMDAwVElNRURFTFRBXFx1MDAwMCc7XG5cbiAgICBjb25zdCByZWdleFN0ciA9IHBhdHRlcm5cbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHRva2VuID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFBsYWNlaG9sZGVyID0gdG9rZW4ucmVwbGFjZSgvJVxce3RpbWVEZWx0YVxcfS9nLCBQTEFDRUhPTERFUik7XG4gICAgICAgIC8vIFwifFwiIGluc2lkZSBhIHRva2VuIG1lYW5zIG11bHRpcGxlIGdyYW1tYXRpY2FsIGZvcm1zIG9mIHRoZSBzYW1lXG4gICAgICAgIC8vIHdvcmQgKGUuZy4gUnVzc2lhbiBcItC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiKTogdHVybiBpdCBpbnRvIGFuXG4gICAgICAgIC8vIGFsdGVybmF0aW9uIGluc3RlYWQgb2YgZXNjYXBpbmcgaXQgaW50byBhIGxpdGVyYWwgcGlwZS5cbiAgICAgICAgaWYgKHdpdGhQbGFjZWhvbGRlci5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVzID0gd2l0aFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLm1hcChhbHQgPT4gZXNjYXBlUmVnZXgoYWx0KS5zcGxpdChQTEFDRUhPTERFUikuam9pbignKFxcXFxkKyknKSk7XG4gICAgICAgICAgcmV0dXJuIGAoPzoke2FsdGVybmF0aXZlcy5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KHdpdGhQbGFjZWhvbGRlcikuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJyk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcXFxzKycpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4U3RyfSRgLCAnaScpO1xuICB9XG5cbiAgLy8gU2hhcmVkIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBmb3IgdW5pdCB3b3JkcyB0aGF0IGFyZW4ndCBpbiBhbnlcbiAgLy8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkuIE9ubHkgcmVhY2hhYmxlIGZyb20gY2FsbGVycyB3aG9zZSByZWdleFxuICAvLyBjYXB0dXJlcyB0aGUgdW5pdCBnZW5lcmljYWxseSAodGhlIGhhcmRjb2RlZCBFbmdsaXNoIFwiYWdvXCIgcmVnZXggYWJvdmUsXG4gIC8vIGFuZCB0aGUgbXVsdGktdW5pdCBcImluIFggYW5kIFlcIiBzcGxpdCBiZWxvdykgLS0gcmVnZXhSZWxhdGl2ZSBhbmQgdGhlXG4gIC8vIHN1ZmZpeCByZWdleGVzIHJlc3RyaWN0IHRoZWlyIGNhcHR1cmUgZ3JvdXAgdG8gYWxyZWFkeS1rbm93biB3b3Jkcywgc29cbiAgLy8gdGhpcyBmYWxsYmFjayBjYW4gbmV2ZXIgZmlyZSBmb3IgdGhlbSAodmVyaWZpZWQgZW1waXJpY2FsbHkgYmVmb3JlIHRoZVxuICAvLyBkZWFkIGJyYW5jaGVzIHRoYXQgdXNlZCB0byBzaXQgaW4gdGhvc2UgcGF0aHMgd2VyZSByZW1vdmVkKS5cbiAgcHJpdmF0ZSBndWVzc1VuaXQodW5pdFN0cjogc3RyaW5nKTogVGltZVVuaXQge1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpO1xuICAgIGlmIChtYXBwZWQpIHtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSkgcmV0dXJuICdob3Vycyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdkJykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdqJykpIHJldHVybiAnZGF5cyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd3JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdzJykpIHJldHVybiAnd2Vla3MnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSByZXR1cm4gJ21pbnV0ZXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnbW8nKSB8fCB1bml0U3RyID09PSAnTScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtb2lzJykpIHJldHVybiAnbW9udGhzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ3knKSB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ2EnKSkgcmV0dXJuICd5ZWFycyc7XG4gICAgcmV0dXJuICdkYXlzJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyOiBSRUxBVElWRSBDQUxDVUxBVElPTiAoaW4gMiBtaW51dGVzLCBpbiAxIHllYXIuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVJlbGF0aXZlQ2FsY3VsYXRpb24oY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIiBvciBtdWx0aXBsZSBjb21iaW5hdGlvbnNcbiAgICAvLyBUcnkgdG8gcGFyc2UgbXVsdGlwbGUgY29tYmluYXRpb25zIGxpa2UgXCJpbiAxIHllYXIgYW5kIDIgbW9udGhzIGFuZCAzIHdlZWtzIGFuZCA0IGRheXNcIlxuICAgIGxldCBoYXNNdWx0aVVuaXRzID0gZmFsc2U7XG4gICAgY29uc3QgdG90YWxNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhbGwgXCJYIHVuaXRcIiBwYXR0ZXJucyBhZnRlciBcImluXCJcbiAgICBjb25zdCBpblBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiaW5cIiwgbCkpLmZpbHRlcih2ID0+IHYgIT09IFwiTk9URk9VTkRcIikuZmxhdE1hcCh2ID0+IHYuc3BsaXQoXCJ8XCIpKSkpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiYW5kXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcblxuICAgIGNvbnN0IGluUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGluUGF0dGVybnMpfSlcXFxccytgLCAnaScpO1xuICAgIGNvbnN0IGFuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFBhdHRlcm5zKX0pXFxcXHMrYCwgJ2dpJyk7XG5cbiAgICBpZiAoY2xlYW5lZFRleHQubWF0Y2goaW5SZWdleCkpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRJbiA9IGNsZWFuZWRUZXh0LnJlcGxhY2UoaW5SZWdleCwgJycpO1xuICAgICAgY29uc3QgcGFydHMgPSB3aXRob3V0SW4uc3BsaXQoYW5kUmVnZXgpLmZpbHRlcihwID0+IHAgJiYgIWFuZFBhdHRlcm5zLnNvbWUoYSA9PiBhLnRvTG93ZXJDYXNlKCkgPT09IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHVuaXRzIGRldGVjdGVkICgyIG9yIG1vcmUpXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHVuaXRNYXRjaCA9IHBhcnQudHJpbSgpLm1hdGNoKC9eKFxcZCspXFxzKyhbXlxcc10rKSQvaSk7XG4gICAgICAgICAgaWYgKHVuaXRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh1bml0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdFN0ciA9IHVuaXRNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgIHRvdGFsTW9tZW50LmFkZCh2YWx1ZSwgdGhpcy5ndWVzc1VuaXQodW5pdFN0cikpO1xuICAgICAgICAgICAgaGFzTXVsdGlVbml0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNdWx0aVVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsTW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIGNvbWJpbmF0aW9ucywgZS5nLiBDaGluZXNlIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAgIGNvbnN0IHJlbENvbWJpbmVkU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKHJlbENvbWJpbmVkU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VJbnQocmVsQ29tYmluZWRTdWZmaXhNYXRjaFszXSk7XG4gICAgICBjb25zdCB1bml0U3RyMiA9IHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbNF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IHVuaXQxID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjEpO1xuICAgICAgY29uc3QgdW5pdDIgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyMik7XG5cbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQodmFsdWUxLCB1bml0MSkuYWRkKHZhbHVlMiwgdW5pdDIpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwiaW4gMiBtaW51dGVzXCJcbiAgICBjb25zdCByZWxNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHJlbE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gdW5pdFN0ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcmVnaXN0ZXJlZCBrZXkgaGVyZTogcmVnZXhSZWxhdGl2ZSdzXG4gICAgICAvLyB1bml0IGNhcHR1cmUgZ3JvdXAgaXMgYnVpbHQgZnJvbSB0aGlzLnRjLmNvbGxlY3RXb3JkcygpIGZvciB0aGUgc2FtZVxuICAgICAgLy8gc2l4IGtleXMgdGhhdCBwb3B1bGF0ZSB0aW1lVW5pdE1hcCwgc28gYSBzdWNjZXNzZnVsIHJlZ2V4IG1hdGNoXG4gICAgICAvLyBhbHJlYWR5IGltcGxpZXMgYSBoaXQgLS0gdGhlIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlLlxuICAgICAgY29uc3QgdW5pdCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpID8/IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuXG4gICAgICAvLyBNb21lbnRKUyBoYW5kbGVzIHllYXIgdHJhbnNpdGlvbnMgcGVyZmVjdGx5XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgc2ltcGxlIGV4cHJlc3Npb25zLCBlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgKDIgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxTdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxTdWZmaXhNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxTdWZmaXhNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsU3VmZml4TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyLjU6IERBVEUgUkFOR0VTIChmcm9tIE1vbmRheSB0byBGcmlkYXkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGRhdGUsIGZvciBnZXRQYXJzZWREYXRlKCkncyBzaW5nbGUtRGF0ZSBjb250cmFjdFxuICAvLyAtLSBzZWUgZ2V0UGFyc2VkRGF0ZVJhbmdlKCkgZm9yIHRoZSBmdWxsIHJhbmdlIHdpdGggYSBkYXRlIGxpc3QuXG4gIHByaXZhdGUgdHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleERhdGVSYW5nZSk7XG4gICAgaWYgKCFyYW5nZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF5TmFtZSA9IHJhbmdlTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcblxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuZGF5KHN0YXJ0RGF5SW5kZXgpO1xuICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzOiBXRUVLREFZUyAobmV4dCBmcmlkYXkuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgIGNvbnN0IHdlZWtXaXRoVGltZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSk7XG4gICAgaWYgKHdlZWtXaXRoVGltZU1hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrV2l0aFRpbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZGF5TmFtZSA9IHdlZWtXaXRoVGltZU1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IHdlZWtXaXRoVGltZU1hdGNoWzNdLnRyaW0oKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGltZSB3aXRoIGNocm9uby1ub2RlLiBnZXRQYXJzZWREYXRlUmVzdWx0IHJldHVybnMgbnVsbFxuICAgICAgLy8gKHJhdGhlciB0aGFuIGEgXCJub3dcIiBwbGFjZWhvbGRlcikgd2hlbiBub3RoaW5nIG1hdGNoZWQsIHNvIGEgdGltZVxuICAgICAgLy8gcGFydCBjaHJvbm8tbm9kZSBjYW4ndCBwYXJzZSAoZS5nLiBcIm5leHQgTW9uZGF5IGF0IHp6cXF4eFwiKSBmYWxsc1xuICAgICAgLy8gYmFjayB0byB0aGUgYWxyZWFkeS1jb21wdXRlZCB3ZWVrZGF5IGRhdGUgYmVsb3csIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgaXQgaW4gZmF2b3Igb2YgdGhlIGFjdHVhbCBjdXJyZW50IGRhdGUvdGltZS5cbiAgICAgIGNvbnN0IHRpbWVSZXN1bHQgPSB0aGlzLmdldFBhcnNlZERhdGVSZXN1bHQodGltZVBhcnQsIG0udG9EYXRlKCkpO1xuICAgICAgaWYgKHRpbWVSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRpbWUgcGFyc2luZyBmYWlscywgcmV0dXJuIGp1c3QgdGhlIGRhdGVcbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwibmV4dCBNb25kYXlcIlxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5KTtcbiAgICBpZiAod2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB3ZWVrZGF5IHdpdGhvdXQgcHJlZml4IChlLmcuLCBcIndlZG5lc2RheVwiLCBcImZyaWRheVwiKVxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFwibmV4dCBbZGF5XVwiIG9yIFwidGhpcyBbZGF5XVwiIGlmIHRvZGF5XG4gICAgY29uc3Qgd2Vla09ubHlNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T25seSk7XG4gICAgaWYgKHdlZWtPbmx5TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrT25seU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG5cbiAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIC8vIElmIHRoZSBkYXkgaXMgaW4gdGhlIHBhc3QgKGJlZm9yZSB0b2RheSksIG1vdmUgdG8gbmV4dCB3ZWVrXG4gICAgICBpZiAobS5pc0JlZm9yZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjVhOiBcInRoZSBYdGggb2YgbmV4dCBtb250aFwiIC8gXCJ0aGUgTnRoIG9mIG5leHQgeWVhclwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeU9yZGluYWxPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JkaW5hbE9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCk7XG4gICAgaWYgKCFvcmRpbmFsT2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yZGluYWxTdHIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzFdLnRyaW0oKTtcbiAgICAvLyBHcm91cHM6IFsxXT1vcmRpbmFsLCBbMl09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbM109bW9udGgsIFs0XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbMl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZVxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZTtcblxuICAgIC8vIFBhcnNlIG9yZGluYWwgbnVtYmVyIChlLmcuLCBcIjE1dGhcIiAtPiAxNSwgXCJmaXJzdFwiIC0+IDEpXG4gICAgY29uc3QgZGF5TnVtYmVyID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihvcmRpbmFsU3RyKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBwZXJpb2QgKG1vbnRoL3llYXIpIHRvIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGNvbnN0IGlzWWVhciA9ICFpc01vbnRoICYmIHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZWFyJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcblxuICAgIGlmIChpc01vbnRoKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGF5IG9mIG1vbnRoIChjbGFtcCB0byB2YWxpZCByYW5nZSlcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGFyZ2V0TW9tZW50LmRheXNJbk1vbnRoKCk7XG4gICAgICBjb25zdCB0YXJnZXREYXkgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJbk1vbnRoKTtcbiAgICAgIHRhcmdldE1vbWVudC5kYXRlKHRhcmdldERheSk7XG4gICAgfSBlbHNlIGlmIChpc1llYXIpIHtcbiAgICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAneWVhcnMnKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZigneWVhcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgeWVhciwgaW50ZXJwcmV0IGFzIGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpXG4gICAgICBjb25zdCBkYXlzSW5ZZWFyID0gdGFyZ2V0TW9tZW50LmlzTGVhcFllYXIoKSA/IDM2NiA6IDM2NTtcbiAgICAgIGNvbnN0IHRhcmdldERheU9mWWVhciA9IE1hdGgubWluKGRheU51bWJlciwgZGF5c0luWWVhcik7XG4gICAgICB0YXJnZXRNb21lbnQuZGF5T2ZZZWFyKHRhcmdldERheU9mWWVhcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjViOiBcImxhc3QgZGF5IG9mIG1vbnRoXCIgLyBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBsYXN0RGF5T2ZNb250aE1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleExhc3REYXlPZk1vbnRoKTtcbiAgICBpZiAoIWxhc3REYXlPZk1vbnRoTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgLy8gR3JvdXBzOiBbMV09cHJlZml4IGJlZm9yZSBcImxhc3RcIiAob3B0aW9uYWwpLCBbMl09XCJsYXN0XCIsIFszXT1kYXksIFs0XT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs1XT1tb250aCwgWzZdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4QmVmb3JlID0gbGFzdERheU9mTW9udGhNYXRjaFsxXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSBsYXN0RGF5T2ZNb250aE1hdGNoWzVdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gbGFzdERheU9mTW9udGhNYXRjaFs2XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgXCJsYXN0XCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmVNb250aCB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBpZiAoIWlzTW9udGgpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJ0aGlzXCIvbm8gcHJlZml4IGJvdGggbWVhbiBcInRoaXMgbW9udGhcIlxuICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YzogXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiAvIFwibGFzdCBGcmlkYXkgb2YgbmV4dCBtb250aFwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgd2Vla2RheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCk7XG4gICAgaWYgKCF3ZWVrZGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPWZpcnN0L3ByZWZpeCwgWzJdPXdlZWtkYXksIFszXT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs0XT1tb250aCwgWzVdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4T3JGaXJzdCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkYXlOYW1lID0gd2Vla2RheU9mTW9udGhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeEJlZm9yZU1vbnRoID0gd2Vla2RheU9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gd2Vla2RheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgIC8vIFVzZSBwcmVmaXggYWZ0ZXIgbW9udGggaWYgcHJlc2VudCAoRnJlbmNoIGludmVyc2lvbiksIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIG1vbnRoLCBvdGhlcndpc2UgcHJlZml4T3JGaXJzdFxuICAgIGNvbnN0IG1vbnRoUHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGg7XG5cbiAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZmlyc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocHJlZml4T3JGaXJzdCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGlzTGFzdCA9ICFpc0ZpcnN0ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4T3JGaXJzdCk7XG4gICAgbGV0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgIC8vIEZpcnN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgd2Vla2RheSBpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgY29uc3QgZmlyc3RXZWVrZGF5SW5kZXggPSBmaXJzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9BZGQgPSAoZGF5SW5kZXggLSBmaXJzdFdlZWtkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGZpcnN0RGF5T2ZNb250aC5hZGQoZGF5c1RvQWRkLCAnZGF5cycpO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICAvLyBMYXN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgYnkgZ29pbmcgdG8gZW5kIG9mIG1vbnRoIGFuZCB3b3JraW5nIGJhY2t3YXJkc1xuICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGxhc3RXZWVrZGF5SW5kZXggPSBsYXN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGxhc3RXZWVrZGF5SW5kZXggLSBkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGxhc3REYXlPZk1vbnRoLnN1YnRyYWN0KGRheXNUb1N1YnRyYWN0LCAnZGF5cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmaXgtYmFzZWQgKG5leHQvdGhpcykgLSBkZWZhdWx0IHRvIGZpcnN0XG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDRhOiBcIm5leHQgbW9udGhcIiAvIFwibmV4dCB5ZWFyXCIgc2hvcnRjdXQgKGJlZm9yZSBmYWxsaW5nIHRvIGNocm9uby1ub2RlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZTogXCJuZXh0IHdlZWtcIiBpcyBpbnRlbnRpb25hbGx5IE5PVCBoYW5kbGVkIGhlcmUgLS0gaXQncyBsZWZ0IHRvXG4gIC8vIGdldFBhcnNlZERhdGVSYW5nZSgpIHRvIGdlbmVyYXRlIGEgZnVsbCBkYXRlIGxpc3QsIHNvIHRoYXQgY2FzZSBmYWxsc1xuICAvLyB0aHJvdWdoIHRvIHRoZSBjaHJvbm8tbm9kZSBmYWxsYmFjayBpbnN0ZWFkLlxuICBwcml2YXRlIHRyeU5leHRQZXJpb2RTaG9ydGN1dChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gd2Vlay9tb250aC95ZWFyIHdvcmRzIGRpcmVjdGx5IChub3QgYSBnZW5lcmljIFxcUysvXFx3KyBjYXB0dXJlKTogb3RoZXJ3aXNlIGFcbiAgICAvLyBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeCBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2c1xuICAgIC8vIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdCBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlXG4gICAgLy8gbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCBwZXJpb2RXb3Jkc0FsbCA9IFsnd2VlaycsICdtb250aCcsICd5ZWFyJ10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihwZXJpb2RXb3Jkc0FsbCk7XG4gICAgY29uc3QgbmV4dERhdGVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuQWxsfSlgLCAnaScpKTtcbiAgICBpZiAoIW5leHREYXRlTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcGVyaW9kID0gbmV4dERhdGVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTmV4dFdlZWsgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnd2VlaycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCk7XG4gICAgaWYgKGlzTmV4dFdlZWspIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YjogVEhFIFJFU1QgKGNocm9uby1ub2RlIGxpYnJhcnksIGZpbmFsIGZhbGxiYWNrKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBjaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MgfHwgdGhpcy5jaHJvbm9zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBEYXRlKCk7XG5cbiAgICAvLyBXZSB1c2UgdGhlIFwiQmVzdCBTY29yZVwiIHRlY2huaXF1ZSB0byBjaG9vc2UgYmV0d2VlbiBFTiBhbmQgRlJcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgY29uc3QgbG9jYWxlID0geyB3ZWVrU3RhcnQ6IGdldFdlZWtOdW1iZXIod2Vla1N0YXJ0KSB9O1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gU3RhbmRhcmQgbGlicmFyeSBjYWxsIHdpdGggZm9yY2VkIGZvcndhcmREYXRlXG4gICAgY29uc3QgY2hyb25vUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHNlbGVjdGVkVGV4dCwgcmVmZXJlbmNlRGF0ZSwge1xuICAgICAgbG9jYWxlLFxuICAgICAgZm9yd2FyZERhdGU6IHRydWVcbiAgICB9IGFzIFBhcnNpbmdPcHRpb24pO1xuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCBhbnl3aGVyZTogdGhpcyBpcyB0aGUgZmluYWwgZmFsbGJhY2sgbGV2ZWwsIHNvIChwZXJcbiAgICAvLyB0aGlzIG1ldGhvZCdzIGRvY3VtZW50ZWQgY29udHJhY3QpIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgIHJldHVybiBjaHJvbm9SZXN1bHQgPz8gbmV3IERhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgcmFuZ2Ugc3RyaW5nIGFuZCByZXR1cm5zIGEgcmFuZ2UgcmVzdWx0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgdmFyaW91cyByYW5nZSBleHByZXNzaW9uczpcbiAgICogLSBXZWVrZGF5IHJhbmdlczogXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIlxuICAgKiAtIFdlZWsgcmFuZ2VzOiBcIm5leHQgd2Vla1wiIChyZXR1cm5zIGFsbCBkYXlzIG9mIG5leHQgd2VlaylcbiAgICogLSBXb3JrcyBpbiBhbGwgZW5hYmxlZCBsYW5ndWFnZXMgd2l0aCBuYXRpdmUgdHJhbnNsYXRpb25zXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyAoZS5nLiwgXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIiwgXCJuZXh0IHdlZWtcIilcbiAgICogQHBhcmFtIHdlZWtTdGFydFByZWZlcmVuY2UgLSBEYXkgb2Ygd2VlayB0byBjb25zaWRlciBhcyB3ZWVrIHN0YXJ0XG4gICAqIEByZXR1cm5zIE5MRFJhbmdlUmVzdWx0IG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBkYXRlcyBhbmQgZGF0ZSBsaXN0LCBvciBudWxsIGlmIG5vdCBhIHJhbmdlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogY29uc3QgcmFuZ2UgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibW9uZGF5XCIpO1xuICAgKiBpZiAocmFuZ2UpIHtcbiAgICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBOTERSYW5nZVJlc3VsdCB8IG51bGwge1xuICAgIC8vIENoZWNrIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICBjb25zdCByYW5nZU1hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmIChyYW5nZU1hdGNoKSB7XG4gICAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBlbmREYXlOYW1lID0gcmFuZ2VNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChzdGFydERheU5hbWUpO1xuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGVuZERheU5hbWUpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgc3RhcnQgZGF5XG4gICAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgICAgc3RhcnRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgbmV4dCBlbmQgZGF5IChtdXN0IGJlIGFmdGVyIG9yIGVxdWFsIHRvIHN0YXJ0IGRheSlcbiAgICAgIGxldCBlbmRNb21lbnQgPSBtb21lbnQoKS5kYXkoZW5kRGF5SW5kZXgpO1xuICAgICAgLy8gSWYgZW5kIGRheSBpcyBiZWZvcmUgc3RhcnQgZGF5LCB0YWtlIHRoZSBvbmUgZnJvbSBuZXh0IHdlZWtcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgZW5kTW9tZW50IGlzIGFsd2F5cyBhZnRlciBvciBlcXVhbCB0byBzdGFydE1vbWVudFxuICAgICAgaWYgKGVuZE1vbWVudC5pc0JlZm9yZShzdGFydE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDEsICd3ZWVrJykuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHN0YXJ0TW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgY29uc3QgZGF0ZUxpc3Q6IE1vbWVudFtdID0gW107XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goY3VycmVudE1vbWVudC5jbG9uZSgpKTtcbiAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQ6IE5MRFJhbmdlUmVzdWx0ID0ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBlbmREYXRlOiBlbmRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBpc1JhbmdlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgXCJuZXh0IHdlZWtcIiBhcyByYW5nZSAoYm90aCBcIm5leHQgd2Vla1wiIGFuZCBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2gpXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgc28gdGhpcyBhbHNvIG1hdGNoZXMgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW5cbiAgICAvLyB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyfXCIpLiBUaGUgcGVyaW9kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUga25vd25cbiAgICAvLyBcIndlZWtcIiB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhIHNob3J0ZXJcbiAgICAvLyB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnMgXCJwcm9jaGFpbmVcIilcbiAgICAvLyBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYXMgdGhlIHBlcmlvZC5cbiAgICBjb25zdCBuZXh0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHRoaXMucHJlZml4S2V5d29yZHMubmV4dCkpO1xuICAgIGNvbnN0IHdlZWtQYXR0ZXJuQWxsID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKCd3ZWVrJyk7XG4gICAgLy8gRmlyc3QgdHJ5IFwibmV4dCB3ZWVrXCIgcGF0dGVyblxuICAgIGxldCBuZXh0V2Vla01hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHt3ZWVrUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgbGV0IHBlcmlvZEluZGV4ID0gMjsgLy8gSW5kZXggb2YgcGVyaW9kIGluIG1hdGNoIGFycmF5XG4gICAgaWYgKCFuZXh0V2Vla01hdGNoKSB7XG4gICAgICAvLyBUcnkgcmV2ZXJzZSBwYXR0ZXJuIFwid2VlayBuZXh0XCIgZm9yIGxhbmd1YWdlcyBsaWtlIEZyZW5jaFxuICAgICAgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHt3ZWVrUGF0dGVybkFsbH0pXFxcXHMqKCR7bmV4dFBhdHRlcm59KWAsICdpJykpO1xuICAgICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgICAgcGVyaW9kSW5kZXggPSAxOyAvLyBQZXJpb2QgaXMgbm93IGF0IGluZGV4IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG5leHRXZWVrTWF0Y2hbcGVyaW9kSW5kZXhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICAgIC8vIE5leHQgd2VlayAtPiByZXR1cm4gZnJvbSBNb25kYXkgdG8gU3VuZGF5IG9mIG5leHQgd2Vla1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChTdHJpbmcod2Vla1N0YXJ0KSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5hZGQoMSwgJ3dlZWtzJykuZGF5KHdlZWtTdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kTW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKS5hZGQoNiwgJ2RheXMnKTtcblxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHJhbmdlXG4gICAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRNb21lbnQuaXNTYW1lT3JCZWZvcmUoZW5kTW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogc3RhcnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGVuZE1vbWVudDogZW5kTW9tZW50LmNsb25lKCksXG4gICAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogV0hPIEhBUyBUSEUgQkVTVCBTQ09SRT8gLS0tXG4gIC8vIFJldHVybnMgbnVsbCAocmF0aGVyIHRoYW4gYSBcIm5vd1wiIHBsYWNlaG9sZGVyKSB3aGVuIGNocm9uby1ub2RlIGZvdW5kIG5vXG4gIC8vIG1hdGNoLCBzbyBjYWxsZXJzIGNhbiB0ZWxsIFwibm90aGluZyBwYXJzZWRcIiBhcGFydCBmcm9tIFwicGFyc2VkIHRvIHJpZ2h0XG4gIC8vIG5vd1wiIGFuZCBmYWxsIGJhY2sgYWNjb3JkaW5nbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBhY2NlcHRpbmcgYSBib2d1c1xuICAvLyBjdXJyZW50LWRhdGUvdGltZSByZXN1bHQuXG4gIGdldFBhcnNlZERhdGVSZXN1bHQodGV4dDogc3RyaW5nLCByZWZlcmVuY2VEYXRlPzogRGF0ZSwgb3B0aW9uPzogUGFyc2luZ09wdGlvbik6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcyB8fCB0aGlzLmNocm9ub3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgYmVzdFJlc3VsdDogUGFyc2VkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICAvLyBjaHJvbm8gY2FuIHJldHVybiBzZXZlcmFsIGRpc2pvaW50IG1hdGNoZXMgZm9yIG9uZSBzdHJpbmcgKGUuZy5cbiAgICAgICAgLy8gXCJ0b2RheSBpbiAzIG1pbnV0ZXNcIiAtPiBbXCJ0b2RheVwiLCBcImluIDMgbWludXRlc1wiXSwgcGFyc2VkIGFzIHR3b1xuICAgICAgICAvLyBpbmRlcGVuZGVudCBjYW5kaWRhdGVzLCBuZWl0aGVyIGNvbnRhaW5pbmcgdGhlIG90aGVyKS4gQ29tcGFyaW5nXG4gICAgICAgIC8vIGV2ZXJ5IGNhbmRpZGF0ZSdzIHNjb3JlIC0tIG5vdCBqdXN0IHJlc3VsdHNbMF0gLS0gbWVhbnMgdGhlIG1vcmVcbiAgICAgICAgLy8gc3BlY2lmaWMvaW5mb3JtYXRpdmUgb25lIHdpbnMgaW5zdGVhZCBvZiBhbHdheXMgcGlja2luZyB3aGljaGV2ZXJcbiAgICAgICAgLy8gY2hyb25vIGhhcHBlbmVkIHRvIGxpc3QgZmlyc3QsIHdoaWNoIHNpbGVudGx5IGRpc2NhcmRlZCBcImluIDNcbiAgICAgICAgLy8gbWludXRlc1wiIGFuZCByZXR1cm5lZCB0aGUgY3VycmVudCB0aW1lIHVubW9kaWZpZWQuXG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0cyB8fCBbXSkge1xuICAgICAgICAgIGlmIChtYXRjaC50ZXh0Lmxlbmd0aCA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF0Y2gudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0ID0gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWREYXRlUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdCA/IGJlc3RSZXN1bHQuc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldFBhcnNlZFJlc3VsdCh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHJldHVybiBbXTtcbiAgICBsZXQgYmVzdFJlc3VsdHM6IFBhcnNlZFJlc3VsdFtdID0gW107XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChyZXN1bHRzWzBdLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZXN1bHRzWzBdLnRleHQubGVuZ3RoO1xuICAgICAgICAgICAgYmVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybignQ2hyb25vIHBhcnNpbmcgZXJyb3IgaW4gZ2V0UGFyc2VkUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdHM7XG4gIH1cblxuICAvLyAtLS0gVElNRSBERVRFQ1RJT04gKEZPUiBESVNQTEFZKSAtLS1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBEZXRlY3RzIHZhcmlvdXMgdGltZSBleHByZXNzaW9uczpcbiAgICogLSBFeHBsaWNpdCB0aW1lczogXCJhdCAzcG1cIiwgXCJhdCAxNTowMFwiLCBcIsOgIDE1aFwiXG4gICAqIC0gVGltZSBpbiByZWxhdGl2ZSBleHByZXNzaW9uczogXCJpbiAyIGhvdXJzXCIsIFwiZGFucyAyIGhldXJlc1wiXG4gICAqIC0gV29ya3Mgd2l0aCBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICogXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dCBzdHJpbmcgdG8gY2hlY2sgZm9yIHRpbWUgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSB0aW1lIGNvbXBvbmVudCBpcyBkZXRlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzVGltZUNvbXBvbmVudCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lRGV0ZWN0b3IuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBTVEFUSVNUSUNTIChGT1IgTU9OSVRPUklORykgLS0tXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5jYWNoZS5zaXplLFxuICAgICAgbWF4U2l6ZTogdGhpcy5jYWNoZS5tYXhTaXplTGltaXQsXG4gICAgfTtcbiAgfVxufSIsImltcG9ydCB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgRWRpdG9yU3VnZ2VzdENvbnRleHQsXG4gIEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyxcbiAgVEZpbGUsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuXG4vLyBPcHRpbWFsIFN0cmluZyBBbGlnbm1lbnQgKE9TQSkgZWRpdCBkaXN0YW5jZTogbGlrZSBMZXZlbnNodGVpbiwgYnV0IGFsc29cbi8vIHRyZWF0cyBzd2FwcGluZyB0d28gYWRqYWNlbnQgY2hhcmFjdGVycyBhcyBhIHNpbmdsZSBlZGl0IChlLmcuIFwiaGVpclwiIHZzXG4vLyBcImhpZXJcIiBpcyBkaXN0YW5jZSAxLCBub3QgMikgLS0gYW4gYWRqYWNlbnQtbGV0dGVyIHRyYW5zcG9zaXRpb24gaXMgb25lIG9mXG4vLyB0aGUgbW9zdCBjb21tb24gdHlwaW5nIG1pc3Rha2VzLCBhbmQgcGxhaW4gTGV2ZW5zaHRlaW4gd291bGQgb3RoZXJ3aXNlXG4vLyBjb3VudCBpdCBhcyB0d28gc3Vic3RpdHV0aW9ucyBhbmQgcHVzaCBpdCBwYXN0IHRoZSB0aHJlc2hvbGQgaW5cbi8vIGZ1enp5TWF0Y2hlc1F1ZXJ5KCkgYmVsb3cuIFNwYWNlIGlzIGtlcHQgdG8gdGhyZWUgcm9sbGluZyByb3dzIG9mIGxlbmd0aFxuLy8gYi5sZW5ndGggKyAxIChpbnN0ZWFkIG9mIGEgZnVsbCAoYS5sZW5ndGgrMSkgeCAoYi5sZW5ndGgrMSkgdGFibGUpIHNpbmNlXG4vLyB0aGlzIHJ1bnMgb24gZXZlcnkga2V5c3Ryb2tlIGFnYWluc3QgZXZlcnkgY2FuZGlkYXRlLlxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuICBsZXQgdHdvUm93c0FnbyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuICBsZXQgcHJldlJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG4gKyAxIH0sIChfLCBqKSA9PiBqKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSBuZXcgQXJyYXk8bnVtYmVyPihuICsgMSkuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFJvd1swXSA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XG4gICAgICBjb25zdCBjb3N0ID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gMCA6IDE7XG4gICAgICBsZXQgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgcHJldlJvd1tqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGN1cnJlbnRSb3dbaiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIHByZXZSb3dbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHZhbHVlLCB0d29Sb3dzQWdvW2ogLSAyXSArIDEpOyAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICB9XG4gICAgICBjdXJyZW50Um93W2pdID0gdmFsdWU7XG4gICAgfVxuICAgIFt0d29Sb3dzQWdvLCBwcmV2Um93LCBjdXJyZW50Um93XSA9IFtwcmV2Um93LCBjdXJyZW50Um93LCB0d29Sb3dzQWdvXTtcbiAgfVxuICByZXR1cm4gcHJldlJvd1tuXTtcbn1cblxuLy8gUHJlZml4IG1hdGNoIGlmIHBvc3NpYmxlIChmYXN0LCBleGFjdCwgYW5kIHRoZSBvbmx5IGJlaGF2aW9yIGZvciBxdWVyaWVzXG4vLyB0b28gc2hvcnQgdG8gZnV6enktbWF0Y2ggcmVsaWFibHkpOyBvdGhlcndpc2UgdG9sZXJhdGUgYSBzbWFsbCBlZGl0XG4vLyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBxdWVyeSBhbmQgY2FuZGlkYXRlIHByZWZpeGVzIG9mIHNpbWlsYXIgbGVuZ3RoLCBzbyBhXG4vLyBzaW5nbGUgd3JvbmcvbWlzc2luZy90cmFuc3Bvc2VkIGxldHRlciBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcXVlcnkgc3RpbGxcbi8vIHN1cmZhY2VzIHRoZSBpbnRlbmRlZCBzdWdnZXN0aW9uIGluc3RlYWQgb2Ygbm9uZSBhdCBhbGwuIENoZWNrcyBhIHdpbmRvd1xuLy8gb2YgcHJlZml4IGxlbmd0aHMgYXJvdW5kIHRoZSBxdWVyeSdzIG93biBsZW5ndGggKHF1ZXJ5Lmxlbmd0aCDCsSB0aHJlc2hvbGQpXG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaXhlZC1sZW5ndGggc2xpY2UgLS0gY29tcGFyaW5nIGFnYWluc3QgYSBwcmVmaXhcbi8vIHRoYXQncyBmb3JjZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHF1ZXJ5IGJ5IG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIHdvdWxkXG4vLyBvdGhlcndpc2UgbWFrZSB0aGUgZWRpdCBkaXN0YW5jZSBhdCBsZWFzdCB0aGF0IGxlbmd0aCBkaWZmZXJlbmNlLCB3aGljaFxuLy8gY2FuIGV4Y2VlZCB0aGUgdGhyZXNob2xkIGV2ZW4gZm9yIGFuIGV4YWN0LXByZWZpeCBtYXRjaCAoZS5nLiBcInRvbXVyXCJcbi8vIGFnYWluc3QgYSBmaXhlZCA3LWNoYXJhY3RlciBzbGljZSBvZiBcInRvbW9ycm93XCIgaXMgYWxyZWFkeSAyIGVkaXRzIGF3YXlcbi8vIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgYWN0dWFsIHR5cG8pLiBPbmx5IHVzZWQgZm9yIHNob3J0LCBmaXhlZFxuLy8gY2FuZGlkYXRlIGxpc3RzICh0b2RheS90b21vcnJvdywgd2Vla2RheXMsIGhpc3RvcnkvY29udGV4dCkgLS0gdGhlXG4vLyBtdWx0aS1zdGFnZSBwcm9ncmVzc2l2ZS10eXBpbmcgc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGVsc2V3aGVyZSBpbiB0aGlzXG4vLyBmaWxlIGtlZXAgc3RyaWN0IHByZWZpeCBtYXRjaGluZywgc2luY2UgZnV6enkgbWF0Y2hpbmcgaW50ZXJhY3RzXG4vLyB1bnByZWRpY3RhYmx5IHdpdGggdGhlaXIgcGFydGlhbC1jb21wbGV0aW9uIGxvZ2ljLlxuZnVuY3Rpb24gZnV6enlNYXRjaGVzUXVlcnkoY2FuZGlkYXRlOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYyA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFxIHx8IGMuc3RhcnRzV2l0aChxKSkgcmV0dXJuIHRydWU7XG4gIGlmIChxLmxlbmd0aCA8PSAyKSByZXR1cm4gZmFsc2U7IC8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCB3aXRob3V0IG5vaXNlXG4gIGNvbnN0IHRocmVzaG9sZCA9IHEubGVuZ3RoIDw9IDUgPyAxIDogMjtcbiAgY29uc3QgbWluTGVuID0gTWF0aC5tYXgoMSwgcS5sZW5ndGggLSB0aHJlc2hvbGQpO1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1pbihjLmxlbmd0aCwgcS5sZW5ndGggKyB0aHJlc2hvbGQpO1xuICBmb3IgKGxldCBsZW4gPSBtaW5MZW47IGxlbiA8PSBtYXhMZW47IGxlbisrKSB7XG4gICAgaWYgKGVkaXREaXN0YW5jZShjLnNsaWNlKDAsIGxlbiksIHEpIDw9IHRocmVzaG9sZCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlU3VnZ2VzdCBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8c3RyaW5nPiB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cbiAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IE9ic2lkaWFuJ3MgRWRpdG9yU3VnZ2VzdCBzY29wZSBkb2Vzbid0IGV4cG9zZSByZWdpc3RlciBtZXRob2QgaW4gdHlwZXMsXG4gICAgLy8gYnV0IGl0IGV4aXN0cyBhdCBydW50aW1lLiBUaGlzIGFsbG93cyB1cyB0byByZWdpc3RlciBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZSBhcyB0eXBlb2YgdGhpcy5zY29wZSAmIHtcbiAgICAgIHJlZ2lzdGVyOiAobW9kaWZpZXJzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSA9PiB2b2lkO1xuICAgIH07XG4gICAgc2NvcGUucmVnaXN0ZXIoW1wiU2hpZnRcIl0sIFwiRW50ZXJcIiwgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkOiBFZGl0b3JTdWdnZXN0J3MgaW50ZXJuYWwgc3VnZ2VzdGlvbnMgQVBJIGlzIG5vdCBmdWxseSB0eXBlZC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFjY2VzcyB0byB1c2VTZWxlY3RlZEl0ZW0gbWV0aG9kIHdoaWNoIGV4aXN0cyBhdCBydW50aW1lIGZvciBTaGlmdCtFbnRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZWRpdG9yU3VnZ2VzdCA9IHRoaXMgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHN1Z2dlc3Rpb25zOiB7IHVzZVNlbGVjdGVkSXRlbTogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9O1xuICAgICAgfTtcbiAgICAgIGVkaXRvclN1Z2dlc3Quc3VnZ2VzdGlvbnMudXNlU2VsZWN0ZWRJdGVtKGV2dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rKSB7XG4gICAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbeyBjb21tYW5kOiBcIlNoaWZ0XCIsIHB1cnBvc2U6IFwiS2VlcCB0ZXh0IGFzIGFsaWFzXCIgfV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIGhhbmRsZSBubyBtYXRjaGVzXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0KTtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID8gc3VnZ2VzdGlvbnMgOiBbIGNvbnRleHQucXVlcnkgXTtcbiAgfVxuXG4gIGdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCk6IHN0cmluZ1tdIHtcbiAgICAvLyBSw6ljdXDDqXJlciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBzdGFuZGFyZFN1Z2dlc3Rpb25zID0gdGhpcy51bmlxdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmZsYXRNYXAoXG4gICAgICBsYW5ndWFnZSA9PiB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0VGltZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgICAgXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFJlbGF0aXZlU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRXZWVrZGF5U3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBTaSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBzb250IGTDqXNhY3RpdsOpZXMsIHJldG91cm5lciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIChoaXN0b3JpcXVlICsgY29udGV4dGUpXG4gICAgY29uc3Qgc21hcnRTdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0LCBzdGFuZGFyZFN1Z2dlc3Rpb25zKTtcblxuICAgIC8vIEZ1c2lvbm5lciA6IHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgZW4gcHJpb3JpdMOpLCBwdWlzIHN1Z2dlc3Rpb25zIHN0YW5kYXJkXG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNtYXJ0U3VnZ2VzdGlvbnNdO1xuICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdGFuZGFyZFN1Z2dlc3Rpb25zKSB7XG4gICAgICBpZiAoIW1lcmdlZC5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICBtZXJnZWQucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlIGV0IGxlIGNvbnRleHRlXG4gICAqL1xuICBwcml2YXRlIGdldFNtYXJ0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQsIF9zdGFuZGFyZFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN1Z2dlc3Rpb25zID0gdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKDE1KTtcbiAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIGhpc3RvcnlTdWdnZXN0aW9ucykge1xuICAgICAgICAgIC8vIFbDqXJpZmllciBxdWUgbGEgc3VnZ2VzdGlvbiBjb3JyZXNwb25kIMOgIGxhIHJlcXXDqnRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShzdWdnZXN0aW9uLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Rpb25zIGJhc8OpZXMgc3VyIGxlIGNvbnRleHRlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIgJiYgY29udGV4dC5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbmZvID0gdGhpcy5wbHVnaW4uY29udGV4dEFuYWx5emVyLmFuYWx5emVDb250ZXh0U3luYyhcbiAgICAgICAgICBjb250ZXh0LmVkaXRvcixcbiAgICAgICAgICBjb250ZXh0LnN0YXJ0LmxpbmVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFqb3V0ZXIgbGVzIGRhdGVzIHRyb3V2w6llcyBkYW5zIGxlIGNvbnRleHRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICBmb3IgKGNvbnN0IGRhdGVTdHIgb2YgY29udGV4dEluZm8uZGF0ZXNJbkNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF0ZVN0ciwgcXVlcnkpICYmICFzbWFydFN1Z2dlc3Rpb25zLmluY2x1ZGVzKGRhdGVTdHIpKSB7XG4gICAgICAgICAgICBzbWFydFN1Z2dlc3Rpb25zLnB1c2goZGF0ZVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRTdWdnZXN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBPbmx5IHRoZSBmaXJzdCB2YXJpYW50IG9mIGEgcGlwZS1zZXBhcmF0ZWQgdHJhbnNsYXRpb24gKGUuZy4gQ2hpbmVzZVxuICAgIC8vIFwi5pmC6ZaTfOaXtumXtFwiKSBpcyB1c2VkIGZvciBkaXNwbGF5L21hdGNoaW5nIC0tIGVtYmVkZGluZyB0aGUgcmF3XG4gICAgLy8gbXVsdGktdmFyaWFudCBzdHJpbmcgd291bGQgYm90aCBnYXJibGUgdGhlIHN1Z2dlc3Rpb24gdGV4dCBhbmQsIHNpbmNlXG4gICAgLy8gXCJ8XCIgaXMgYSByZWdleCBtZXRhY2hhcmFjdGVyLCBzaWxlbnRseSBicmVhayB0aGUgXCJeXCIgYW5jaG9yIGJlbG93LlxuICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCBub3dXb3JkID0gdChcIm5vd1wiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGlmIChpbnB1dFN0ci5tYXRjaChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleCh0aW1lV29yZCl9YCwgXCJpXCIpKSkge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIG5vd1dvcmQsXG4gICAgICAgIHQoXCJwbHVzbWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxNVwiIH0pLFxuICAgICAgICB0KFwicGx1c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgICB0KFwibWludXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJtaW51c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHZhbCA9PiBgJHt0aW1lV29yZH06JHt2YWx9YClcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXNjYXBlIGVhY2ggdHJhbnNsYXRpb24ncyB2YXJpYW50cyBpbmRpdmlkdWFsbHkgYmVmb3JlIGpvaW5pbmcgaW50b1xuICAgIC8vIGFuIGFsdGVybmF0aW9uOiBhIGxhbmd1YWdlJ3Mgb3duIFwifFwiLXNlcGFyYXRlZCB2YXJpYW50cyBzdGF5XG4gICAgLy8gbWVhbmluZ2Z1bCBhbHRlcm5hdGlvbiwgYnV0IGFueSBvdGhlciByZWdleCBtZXRhY2hhcmFjdGVyIG9uZSBtaWdodFxuICAgIC8vIGNvbnRhaW4gY2FuJ3QgY29ycnVwdCB0aGUgcGF0dGVybi4gQW5jaG9yZWQgd2l0aCBcIl5cIiBsaWtlIHRoZSBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gZ2VuZXJhdG9ycyBpbiB0aGlzIGZpbGUgLS0gb3RoZXJ3aXNlIGEgc2hvcnQsIGNvbW1vblxuICAgIC8vIHN1YnN0cmluZyAoZS5nLiBDaGluZXNlIFwibmV4dFwiOiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsIHRoZSBsYXN0IHZhcmlhbnRcbiAgICAvLyBiZWluZyBhIHNpbmdsZSBiYXJlIGNoYXJhY3RlcikgY2FuIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgdW5yZWxhdGVkXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgYnVpbGRQYXR0ZXJuID0gKHRyYW5zbGF0aW9uOiBzdHJpbmcpID0+XG4gICAgICB0cmFuc2xhdGlvbi5zcGxpdCgnfCcpLm1hcCh2ID0+IGVzY2FwZVJlZ2V4KHYudHJpbSgpKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gW3QoXCJuZXh0XCIsIGxhbmcpLCB0KFwibGFzdFwiLCBsYW5nKSwgdChcInRoaXNcIiwgbGFuZyldXG4gICAgICAubWFwKGJ1aWxkUGF0dGVybilcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXigke3ByZWZpeFBhdHRlcm59KWAsIFwiaVwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cClcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG1hdGNoWzFdXG4gICAgICAvLyBQcmVuZHJlIHNldWxlbWVudCBsYSBwcmVtacOocmUgdmFyaWFudGUgKGF2YW50IGxlIHwpIHBvdXIgbGVzIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBnZXRGaXJzdFZhcmlhbnQgPSAodmFsOiBzdHJpbmcpID0+IHZhbC5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIHQoXCJ3ZWVrXCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9udGhcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ5ZWFyXCIsIGxhbmcpLFxuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhcmlhbnQgPSBnZXRGaXJzdFZhcmlhbnQodmFsKTtcbiAgICAgICAgICAvLyBDYXBpdGFsaXNlciBsYSBwcmVtacOocmUgbGV0dHJlIHBvdXIgdW4gbWVpbGxldXIgYWZmaWNoYWdlXG4gICAgICAgICAgcmV0dXJuIGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCh2YWwgPT4gYCR7cmVmZXJlbmNlfSAke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVsOpcmlmaWVyIGQnYWJvcmQgbGVzIGV4cHJlc3Npb25zIGNvbWJpbsOpZXMgY29tbWUgXCJpbiAxIG1vbnRoIGFuZFwiIG91IFwiZGFucyAxIG1vaXMgZXRcIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImluIDEgbW9udGggYW5kXCIsIFwiaW4gMSBtb250aCBhbmQgM1wiLCBcImluIDMgbW9udGggYW5kXCIsIGV0Yy5cbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdChcImFuZFwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgIC8vIFJlZ2V4IHBsdXMgZmxleGlibGUgcXVpIHBlcm1ldCBsYSBzYWlzaWUgYXByw6hzIFwiYW5kXCJcbiAgICBjb25zdCBjb21iaW5lZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3QoXCJpblwiLCBsYW5nKX0gKT8oWystXT9cXFxcZCspXFxcXHMrKCR7dChcIm1pbnV0ZVwiLCBsYW5nKX18JHt0KFwiaG91clwiLCBsYW5nKX18JHt0KFwiZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWVrXCIsIGxhbmcpfXwke3QoXCJtb250aFwiLCBsYW5nKX18JHt0KFwieWVhclwiLCBsYW5nKX0pXFxcXHMrKCR7YW5kUGF0dGVybn0pKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2ggPSBpbnB1dFN0ci5tYXRjaChjb21iaW5lZFJlZ2V4KTtcbiAgICBpZiAoY29tYmluZWRNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJBbmQgPSBjb21iaW5lZE1hdGNoWzVdID8gY29tYmluZWRNYXRjaFs1XS50cmltKCkgOiAnJztcbiAgICAgIFxuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiYW5kXCIgcG91ciByZWNvbnN0cnVpcmUgY29ycmVjdGVtZW50XG4gICAgICBjb25zdCBiZWZvcmVBbmQgPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihjb21iaW5lZE1hdGNoWzRdKSArIGNvbWJpbmVkTWF0Y2hbNF0ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciBhcHLDqHMgXCJhbmRcIiwgZXh0cmFpcmUgbGUgbm9tYnJlIHMnaWwgeSBlbiBhIHVuXG4gICAgICBsZXQgc3VnZ2VzdGVkTnVtYmVyID0gXCIxXCI7XG4gICAgICBsZXQgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gYWZ0ZXJBbmQ7XG4gICAgICBpZiAoYWZ0ZXJBbmQpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBhZnRlckFuZC5tYXRjaCgvXihcXGQrKSguKikkLyk7XG4gICAgICAgIGlmIChudW1iZXJNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3RlZE51bWJlciA9IG51bWJlck1hdGNoWzFdO1xuICAgICAgICAgIGFmdGVyQW5kV2l0aG91dE51bWJlciA9IG51bWJlck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5kYXlzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaXRQYXJ0ID0gcy5yZXBsYWNlKC9eZGFucyB8XmluIC9pLCAnJyk7XG4gICAgICAgICAgLy8gdW5pdFBhcnQgZXN0IGNvbW1lIFwiMyBkYXlzXCIgb3UgXCI1IG1pbnV0ZXNcIlxuICAgICAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBjb21wbMOpdGVyIGludGVsbGlnZW1tZW50XG4gICAgICAgICAgICAvLyB1bml0UGFydCBjb21tZW5jZSBwYXIgbGUgbm9tYnJlIChleDogXCIzIGRheXNcIilcbiAgICAgICAgICAgIGNvbnN0IHVuaXRXb3JkcyA9IHVuaXRQYXJ0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBpZiAodW5pdFdvcmRzLmxlbmd0aCA+IDEgJiYgdW5pdFdvcmRzWzBdID09PSBzdWdnZXN0ZWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgLy8gTGUgbm9tYnJlIGNvcnJlc3BvbmQsIG9uIHBldXQgc3VnZ8OpcmVyIGxlIHJlc3RlIChleDogXCJkYXlzXCIpXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHVuaXRQYXJ0LnN1YnN0cmluZyhzdWdnZXN0ZWROdW1iZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChhZnRlckFuZFdpdGhvdXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBvbiBhIHRhcMOpIHF1ZWxxdWUgY2hvc2UgYXByw6hzIGxlIG5vbWJyZSwgdsOpcmlmaWVyIHNpIMOnYSBjb3JyZXNwb25kXG4gICAgICAgICAgICAgICAgLy8gTk9URToga25vd24gcm91Z2ggZWRnZSAtLSB0aGlzIGRyb3BzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG51bWJlciBhbmQgdW5pdCAoZS5nLiB0eXBpbmcgXCIzIGRheVwiIGFmdGVyIFwiYW5kXCIgcHJvZHVjZXNcbiAgICAgICAgICAgICAgICAvLyBcIi4uLmFuZCAzc1wiIGluc3RlYWQgb2YgXCIuLi5hbmQgMyBkYXlzXCIpLCBzbyB0aGUgcmVidWlsdFxuICAgICAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSB0aGVuIGZhaWxzIHRoZSBvdXRlciBwcmVmaXggZmlsdGVyIGJlbG93IGFuZCB0aGlzXG4gICAgICAgICAgICAgICAgLy8gd2hvbGUgYnJhbmNoIHNpbGVudGx5IGNvbnRyaWJ1dGVzIG5vIHN1Z2dlc3Rpb24uIFZlcmlmaWVkXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yOyBsZWZ0IGFsb25lIGFzIGEgbmFycm93XG4gICAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2ggaXNzdWUgcmF0aGVyIHRoYW4gZml4ZWQgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZFdpdGhvdXROdW1iZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7c3VnZ2VzdGVkTnVtYmVyfSR7cmVtYWluaW5nLnN1YnN0cmluZyhhZnRlckFuZFdpdGhvdXROdW1iZXIubGVuZ3RoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPbiBhIGp1c3RlIHRhcMOpIGxlIG5vbWJyZSwgc3VnZ8OpcmVyIGxlIHJlc3RlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHt1bml0UGFydH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWFjaGVkIGZvciBsYW5ndWFnZXMgdGhhdCBkb24ndCBzZXBhcmF0ZSB0aGUgbnVtYmVyIGFuZCB1bml0XG4gICAgICAgICAgICAvLyB3aXRoIGEgc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIjPlpKnlvoxcIiwgSmFwYW5lc2UgXCIz5pel5b6MXCIpOiB1bml0UGFydFxuICAgICAgICAgICAgLy8gdGhlbiBoYXMgbm8gc3BhY2UgYXQgYWxsLCBzbyB1bml0V29yZHMubGVuZ3RoID4gMSBhYm92ZSBpc1xuICAgICAgICAgICAgLy8gZmFsc2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBudW1iZXIgbWF0Y2hlcy4gTm90ZSB0aGlzIGhhc1xuICAgICAgICAgICAgLy8gaXRzIG93biByb3VnaCBlZGdlIHN5bW1ldHJpYyB0byB0aGUgb25lIGFib3ZlIC0tIHNpbmNlXG4gICAgICAgICAgICAvLyB1bml0UGFydCBoYXMgbm8gc3BhY2UsIHVuaXRQYXJ0LmluZGV4T2YoJyAnKSBpcyAtMSBhbmRcbiAgICAgICAgICAgIC8vIHVuaXRXaXRob3V0TnVtYmVyIGVuZHMgdXAgYmVpbmcgdGhlICp3aG9sZSogdW5pdFBhcnRcbiAgICAgICAgICAgIC8vIChpbmNsdWRpbmcgaXRzIG93biBsZWFkaW5nIG51bWJlciksIHNvIHRoZSByZXR1cm5lZCBzdWdnZXN0aW9uXG4gICAgICAgICAgICAvLyBkdXBsaWNhdGVzIHRoZSBudW1iZXIgKGUuZy4gXCLlnKggMyDlpKkg5ZKMIDQgNOWIhumQmOW+jFwiIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIFwiLi4u5ZKMIDTliIbpkJjlvoxcIikuIFZlcmlmaWVkIGFzIHRoZSBhY3R1YWwgY3VycmVudCBiZWhhdmlvcjtcbiAgICAgICAgICAgIC8vIGxlZnQgYWxvbmUgYXMgdGhlIHNhbWUga2luZCBvZiBuYXJyb3cgYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2hcbiAgICAgICAgICAgIC8vIGlzc3VlIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBhYm92ZSwgbm90IGZpeGVkIGhlcmUuXG4gICAgICAgICAgICBjb25zdCB1bml0V2l0aG91dE51bWJlciA9IHVuaXRQYXJ0LnN1YnN0cmluZyh1bml0UGFydC5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgICAgIGlmICh1bml0V2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYWZ0ZXJBbmQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9ICR7dW5pdFdpdGhvdXROdW1iZXJ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFbDqXJpZmllciBsZXMgcGxhZ2VzIGRlIGRhdGVzIHBhcnRpZWxsZXMgY29tbWUgXCJkZSBsdW5kaSDDoFwiIG91IFwiZnJvbSBtb25kYXkgdG9cIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImRlIGx1bmRpIGFcIiwgXCJkZSBsdW5kaSBhIHZcIiwgXCJkZSBsdW5kaSBhIHZlXCIsIGV0Yy5cbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHQoXCJmcm9tXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgY29uc3QgdG9QYXR0ZXJuID0gdChcInRvXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSBhcHLDqHMgXCLDoFwiIG91IFwiYVwiXG4gICAgY29uc3QgcmFuZ2VQYXJ0aWFsUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7ZnJvbVBhdHRlcm59fGRlfGR1KVxcXFxzKygke3QoXCJzdW5kYXlcIiwgbGFuZyl9fCR7dChcIm1vbmRheVwiLCBsYW5nKX18JHt0KFwidHVlc2RheVwiLCBsYW5nKX18JHt0KFwid2VkbmVzZGF5XCIsIGxhbmcpfXwke3QoXCJ0aHVyc2RheVwiLCBsYW5nKX18JHt0KFwiZnJpZGF5XCIsIGxhbmcpfXwke3QoXCJzYXR1cmRheVwiLCBsYW5nKX0pXFxcXHMrKCR7dG9QYXR0ZXJufXzDoHxhKShcXFxccysuKik/JGAsIFwiaVwiKTtcbiAgICBjb25zdCByYW5nZVBhcnRpYWxNYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJhbmdlUGFydGlhbFJlZ2V4KTtcbiAgICBpZiAocmFuZ2VQYXJ0aWFsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFmdGVyVG8gPSByYW5nZVBhcnRpYWxNYXRjaFs0XSA/IHJhbmdlUGFydGlhbE1hdGNoWzRdLnRyaW0oKSA6ICcnO1xuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiw6BcIiBvdSBcImFcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZVRvID0gaW5wdXRTdHIuc3Vic3RyaW5nKDAsIGlucHV0U3RyLmluZGV4T2YocmFuZ2VQYXJ0aWFsTWF0Y2hbM10pICsgcmFuZ2VQYXJ0aWFsTWF0Y2hbM10ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIEfDqW7DqXJlciBkZXMgc3VnZ2VzdGlvbnMgcG91ciBsZXMgam91cnMgZGUgZmluIHBvc3NpYmxlc1xuICAgICAgY29uc3QgYWxsRGF5cyA9IFtcbiAgICAgICAgdChcInN1bmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIm1vbmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInR1ZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ3ZWRuZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0aHVyc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcImZyaWRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInNhdHVyZGF5XCIsIGxhbmcpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gYWxsRGF5c1xuICAgICAgICAubWFwKGRheSA9PiB7XG4gICAgICAgICAgaWYgKGFmdGVyVG8pIHtcbiAgICAgICAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciwgZmlsdHJlciBsZXMgam91cnMgcXVpIGNvbW1lbmNlbnQgcGFyIGNlIHRleHRlXG4gICAgICAgICAgICBpZiAoZGF5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlclRvLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIC8vIFJlbXBsYWNlciBcImFmdGVyVG9cIiBwYXIgbGUgam91ciBjb21wbGV0XG4gICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlVG99ICR7ZGF5fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3RhbmRhcmQgcG91ciBsZXMgZGF0ZXMgcmVsYXRpdmVzIHNpbXBsZXNcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylgLCBcImlcIilcbiAgICBjb25zdCByZWxhdGl2ZURhdGUgPSBpbnB1dFN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChyZWxhdGl2ZURhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlbGF0aXZlRGF0ZVtyZWxhdGl2ZURhdGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluaG91cnNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5tb250aHNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtaW51dGVzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaG91cnNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJkYXlzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwid2Vla3NhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtb250aHNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICBdLmZpbHRlcihpdGVtcyA9PiBpdGVtcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmU6IGFueSBkaWdpdC1sZWQgaW5wdXQgKGluY2x1ZGluZ1xuICAgICAgLy8gc3VmZml4LXN0eWxlIFwiMyBkaWFzIGF0csOhc1wiKSBtYXRjaGVzIHRoaXMgcmVnZXhwIHRvbywgc2luY2UgaXRzXG4gICAgICAvLyBwcmVmaXggZ3JvdXAgaXMgb3B0aW9uYWwgLS0gcmV0dXJuaW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBtYWtlXG4gICAgICAvLyB0aGUgc3VmZml4LXBhdHRlcm4gY2hlY2sgYmVsb3cgdW5yZWFjaGFibGUgZGVhZCBjb2RlIGZvciBldmVyeVxuICAgICAgLy8gc3VmZml4LW9ubHkgbGFuZ3VhZ2UuXG4gICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZS9TcGFuaXNoIFwiMyBkaWFzIGF0csOhc1wiXG4gICAgLy8gKFggdW5pdCArIGFnb3N1ZmZpeCBtYXJrZXIpLCB0aGUgcGFzdC10ZW5zZSBtaXJyb3Igb2YgdGhlIHByZWZpeFxuICAgIC8vIHN1Z2dlc3Rpb25zIGFib3ZlLlxuICAgIGNvbnN0IGFnb1N1ZmZpeCA9IHQoXCJhZ29zdWZmaXhcIiwgbGFuZyk7XG4gICAgaWYgKGFnb1N1ZmZpeCAmJiBhZ29TdWZmaXggIT09IFwiTk9URk9VTkRcIikge1xuICAgICAgY29uc3Qgc3VmZml4TWF0Y2ggPSBpbnB1dFN0ci5tYXRjaCgvXihcXGQrKVxccysoXFx3KikvaSk7XG4gICAgICBpZiAoc3VmZml4TWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZURlbHRhID0gc3VmZml4TWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHN1ZmZpeFZhcmlhbnQgPSBhZ29TdWZmaXguc3BsaXQoJ3wnKVswXTtcblxuICAgICAgICBjb25zdCB1bml0VHlwZXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdW5pdFR5cGUgb2YgdW5pdFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgd29yZHMgPSB0KHVuaXRUeXBlLCBsYW5nKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYCR7dGltZURlbHRhfSAke3dvcmR9ICR7c3VmZml4VmFyaWFudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHN1Z2dlc3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtkYXlTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gTGUgcGFyc2VyIHBldXQgZ8OpcmVyIGxlcyBhYnLDqXZpYXRpb25zICh0aHUsIG1vbiwgc2F0LCBldGMuKSwgZG9uYyBvbiBkb2l0IGxlcyBwcm9wb3NlciBhdXNzaVxuICAgIGNvbnN0IHdlZWtkYXlzID0gW1xuICAgICAgeyBrZXk6ICdzdW5kYXknLCBhYmJyOiBbJ3N1biddIH0sXG4gICAgICB7IGtleTogJ21vbmRheScsIGFiYnI6IFsnbW9uJ10gfSxcbiAgICAgIHsga2V5OiAndHVlc2RheScsIGFiYnI6IFsndHVlJywgJ3R1ZXMnXSB9LFxuICAgICAgeyBrZXk6ICd3ZWRuZXNkYXknLCBhYmJyOiBbJ3dlZCddIH0sXG4gICAgICB7IGtleTogJ3RodXJzZGF5JywgYWJicjogWyd0aHUnLCAndGh1cicsICd0aHVycyddIH0sXG4gICAgICB7IGtleTogJ2ZyaWRheScsIGFiYnI6IFsnZnJpJ10gfSxcbiAgICAgIHsga2V5OiAnc2F0dXJkYXknLCBhYmJyOiBbJ3NhdCddIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGlucHV0TG93ZXIgPSBpbnB1dFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygd2Vla2RheXMpIHtcbiAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoLCBhbmQgZW4udHMgYWx3YXlzIGRlZmluZXMgYWxsXG4gICAgICAvLyBzZXZlbiB3ZWVrZGF5cywgc28gdGhpcyBndWFyZCBjYW4ndCBhY3R1YWxseSBiZSBmYWxzZS5cbiAgICAgIGNvbnN0IGRheU5hbWUgPSB0KGRheS5rZXksIGxhbmcpO1xuICAgICAgaWYgKCFkYXlOYW1lIHx8IGRheU5hbWUgPT09IFwiTk9URk9VTkRcIikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGRheU5hbWUuc3BsaXQoJ3wnKVswXS50cmltKCk7XG4gICAgICBjb25zdCBkYXlOYW1lTG93ZXIgPSBmaXJzdFZhcmlhbnQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIGxlIG5vbSBjb21wbGV0IGNvbW1lbmNlIHBhciBsJ2lucHV0ICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KGRheU5hbWVMb3dlciwgaW5wdXRMb3dlcikpIHtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWQgPSBmaXJzdFZhcmlhbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaXJzdFZhcmlhbnQuc2xpY2UoMSk7XG4gICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIHVuZSBhYnLDqXZpYXRpb24gY29ycmVzcG9uZCAtLSB0aGUgYWJicmV2aWF0aW9ucyBiZWxvdyBhcmVcbiAgICAgIC8vIEVuZ2xpc2gtb25seSAoZS5nLiBcIm1vblwiKSwgYnV0IGRheU5hbWUvZmlyc3RWYXJpYW50IGlzIHRyYW5zbGF0ZWRcbiAgICAgIC8vIChlLmcuIEZyZW5jaCBcImx1bmRpXCIpLCBzbyBmb3IgYW55IG5vbi1FbmdsaXNoIGxhbmd1YWdlIHRoZSBmdWxsLW5hbWVcbiAgICAgIC8vIGNoZWNrIGFib3ZlIG5ldmVyIG1hdGNoZXMgd2hpbGUgdGhpcyBhYmJyZXZpYXRpb24gY2hlY2sgc3RpbGwgZG9lcy5cbiAgICAgIC8vIFRoaXMgaXMgd2hhdCBsZXRzIEVuZ2xpc2ggd2Vla2RheSBhYmJyZXZpYXRpb25zIHdvcmsgYXMgYSBzaG9ydGN1dFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBhY3RpdmUgKHZlcmlmaWVkOiB0eXBpbmcgXCJtb25cIiB3aXRoXG4gICAgICAvLyBvbmx5IEZyZW5jaCBlbmFibGVkIGNvcnJlY3RseSBzdWdnZXN0cyBcIkx1bmRpXCIpLlxuICAgICAgZm9yIChjb25zdCBhYmJyIG9mIGRheS5hYmJyKSB7XG4gICAgICAgIGlmIChhYmJyLnN0YXJ0c1dpdGgoaW5wdXRMb3dlcikpIHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmluY2x1ZGVzKGNhcGl0YWxpemVkKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdChcInRvZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInllc3RlcmRheVwiLCBsYW5nKSxcbiAgICAgIHQoXCJ0b21vcnJvd1wiLCBsYW5nKSxcbiAgICBdLmZpbHRlcihpdGVtID0+IGZ1enp5TWF0Y2hlc1F1ZXJ5KGl0ZW0sIGlucHV0U3RyKSk7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb24pO1xuICAgIGlmICghcHJldmlldyB8fCBwcmV2aWV3ID09PSBzdWdnZXN0aW9uKSB7XG4gICAgICBlbC5zZXRUZXh0KHN1Z2dlc3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPYnNpZGlhbiByZWN5Y2xlcyBzdWdnZXN0aW9uLXJvdyBlbGVtZW50cyBhY3Jvc3MgcmVuZGVycyAodmlydHVhbGl6ZWRcbiAgICAvLyBsaXN0KSwgc28gYSBzdGFsZSBwcmV2aW91cyByZW5kZXIncyBjb250ZW50IG11c3QgYmUgY2xlYXJlZCBiZWZvcmVcbiAgICAvLyBhcHBlbmRpbmcgbmV3IHNwYW5zIC0tIG90aGVyd2lzZSBvbGQgdGV4dC9zcGFucyBzdGFjayB1cCBvbiB0b3Agb2ZcbiAgICAvLyBlYWNoIG90aGVyIG9uIHRoZSByZXVzZWQgZWxlbWVudC5cbiAgICBlbC5lbXB0eSgpO1xuICAgIGVsLmFkZENsYXNzKFwibmxkLXN1Z2dlc3Rpb24taXRlbVwiKTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXRleHRcIiwgdGV4dDogc3VnZ2VzdGlvbiB9KTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXByZXZpZXdcIiwgdGV4dDogcHJldmlldyB9KTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIGEgc3VnZ2VzdGlvbiB0byB0aGUgcGxhaW4tdGV4dCBkYXRlL3RpbWUgaXQgd291bGQgYWN0dWFsbHlcbiAgLy8gaW5zZXJ0IChubyBbW2xpbmtzXV0sIG5vIGFsaWFzKSAtLSBzaG93biBuZXh0IHRvIHRoZSBzdWdnZXN0aW9uIGluIHRoZVxuICAvLyBkcm9wZG93biBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXNvbHZlZCB2YWx1ZSBiZWZvcmUgcGlja2luZyBvbmUuXG4gIC8vIERlbGliZXJhdGVseSBtaXJyb3JzIHNlbGVjdFN1Z2dlc3Rpb24oKSdzIG93biBkYXRlL3RpbWUgcmVzb2x1dGlvblxuICAvLyAodGltZS1zdWdnZXN0aW9uIC8gZGF0ZS1yYW5nZSAvIGh5YnJpZC1kYXRlLXRpbWUgYnJhbmNoZXMpIHNvIHRoZVxuICAvLyBwcmV2aWV3IGNhbiBuZXZlciBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0IHNlbGVjdGluZyB0aGVcbiAgLy8gc3VnZ2VzdGlvbiBhY3R1YWxseSBwcm9kdWNlcyAtLSBhbmQsIHVubGlrZSBzZWxlY3RTdWdnZXN0aW9uKCksIG5ldmVyXG4gIC8vIHRvdWNoZXMgdGhlIGVkaXRvciBvciBoaXN0b3J5IGFuZCBjYW4ndCB0aHJvdzogYSBwYXJzaW5nIGZhaWx1cmUgaGVyZVxuICAvLyBqdXN0IG1lYW5zIG5vIHByZXZpZXcgaXMgc2hvd24sIG5vdCBhIGJyb2tlbiBzdWdnZXN0aW9uIGxpc3QuXG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb246IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSXNUaW1lKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCk7XG4gICAgICAgIC8vIHBhcnNlRGF0ZSgpL3BhcnNlVGltZSgpIG5ldmVyIHRocm93IC0tIG9uIHVucGFyc2VhYmxlIGlucHV0IHRoZXlcbiAgICAgICAgLy8gcmV0dXJuIGFuIE5MRFJlc3VsdCB3aXRoIGZvcm1hdHRlZFN0cmluZyBcIkludmFsaWQgZGF0ZVwiIGFuZCBhblxuICAgICAgICAvLyBpbnZhbGlkIG1vbWVudCwgbm90IGFuIGV4Y2VwdGlvbi4gQ2hlY2tpbmcgaXNWYWxpZCgpIGV4cGxpY2l0bHkgaXNcbiAgICAgICAgLy8gd2hhdCBhY3R1YWxseSBjYXRjaGVzIHRoYXQgY2FzZSAodGhlIHRyeS9jYXRjaCBiZWxvdyBpcyBvbmx5IGFcbiAgICAgICAgLy8gc2FmZXR5IG5ldCBmb3IgZ2VudWluZWx5IHVuZXhwZWN0ZWQgZXJyb3JzIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZCkuXG4gICAgICAgIGlmICghcGFyc2VkVGltZS5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFRpbWUuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGVSYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KSkuam9pbignLCAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXNbMF0gfHwgJ2VuJztcbiAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcbiAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgICAgaGFzVGltZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFwYXJzZWRSZXN1bHQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybTtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aW1lUGFydDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEYXRlU3VnZ2VzdDogZmFpbGVkIHRvIHJlc29sdmUgYXV0b3N1Z2dlc3QgcHJldmlldycsIHsgc3VnZ2VzdGlvbiwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gVXRpbGlzZXIgbCfDqWRpdGV1ciBkdSBjb250ZXh0ZSBzaSBkaXNwb25pYmxlLCBzaW5vbiBjaGVyY2hlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gICAgbGV0IGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuY29udGV4dD8uZWRpdG9yKSB7XG4gICAgICBlZGl0b3IgPSB0aGlzLmNvbnRleHQuZWRpdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVBbGlhcyA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgdHlwZWQgdGV4dCBhcyBhbGlhcyAoU2hpZnQpLCBwcmVmZXIgd2hhdCB0aGUgdXNlclxuICAgIC8vIGFjdHVhbGx5IHR5cGVkIG92ZXIgdGhlIHN1Z2dlc3Rpb24ncyBjYW5vbmljYWwgZGljdGlvbmFyeSBjYXNpbmdcbiAgICAvLyAoZS5nLiBGcmVuY2ggXCJkZW1haW5cIiB2cyB0aGUgZGljdGlvbmFyeSdzIFwiRGVtYWluXCIpIC0tIGJ1dCBvbmx5IHdoZW5cbiAgICAvLyB0aGV5IHR5cGVkIHRoZSBjb21wbGV0ZSB3b3JkL3BocmFzZSwganVzdCBpbiBhIGRpZmZlcmVudCBjYXNpbmc7IGFcbiAgICAvLyBwYXJ0aWFsIHF1ZXJ5IChcImRlbWFpXCIpIHdvdWxkIG1ha2UgZm9yIGEgYnJva2VuLWxvb2tpbmcgYWxpYXMsIHNvXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHN1Z2dlc3Rpb24gdGV4dCBpbiB0aGF0IGNhc2UuIExhbmd1YWdlLWFnbm9zdGljOlxuICAgIC8vIHRoaXMgb25seSBjb21wYXJlcyB0aGUgdHlwZWQgdGV4dCB0byB0aGUgc3VnZ2VzdGlvbiB0ZXh0LlxuICAgIGNvbnN0IHR5cGVkUXVlcnkgPSB0aGlzLmNvbnRleHQ/LnF1ZXJ5O1xuICAgIGNvbnN0IGFsaWFzVGV4dCA9ICh0eXBlZFF1ZXJ5ICYmIHR5cGVkUXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgPyB0eXBlZFF1ZXJ5XG4gICAgICA6IHN1Z2dlc3Rpb247XG4gICAgbGV0IGRhdGVTdHIgPSBcIlwiO1xuICAgIGxldCBtYWtlSW50b0xpbmsgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbms7XG5cbiAgICAvLyBXZSBjaGVjayBpZiB0aGUgaW5wdXQgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudCB1c2luZyB0aGUgcGFyc2VyIGxvZ2ljLlxuICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcblxuICAgIC8vIC0tLSBDT1JSRUNUSU9OIE1VTFRJTEFOR1VFIC0tLVxuICAgIC8vIFNpIGxlIHBhcnNlciBuJ2EgcGFzIGTDqXRlY3TDqSBsJ2hldXJlIChzb3V2ZW50IGxlIGNhcyBlbiBhbmdsYWlzIHBvdXIgXCJpbiAyIG1pbnV0ZXNcIiksXG4gICAgLy8gb24gZm9yY2UgbGEgZMOpdGVjdGlvbiBzaSBvbiB2b2l0IGRlcyBtb3RzIGNsw6lzIGV4cGxpY2l0ZXMgKG1pbiwgaG91ciwgZXRjKS5cbiAgICAvLyBJTVBPUlRBTlQ6IE5lIHBhcyBtYXRjaGVyIFwibVwiIGRhbnMgXCJtb250aFwiIC0gdsOpcmlmaWVyIHF1ZSBjJ2VzdCBiaWVuIHVuIG1vdCBkZSB0ZW1wc1xuICAgIGlmICghaGFzVGltZSkge1xuICAgICAgLy8gUmVnZXggcG91ciBkw6l0ZWN0ZXIgdW4gY2hpZmZyZSBzdWl2aSBkZSBtaW4vaG91ci9oZXVyZS9oIChtYWlzIHBhcyBcIm1cIiBzZXVsIHF1aSBwb3VycmFpdCDDqnRyZSBcIm1vbnRoXCIpXG4gICAgICAvLyBPbiB2w6lyaWZpZSBxdWUgXCJtXCIgZXN0IHN1aXZpIGRlIFwiaW5cIiwgXCJpbnNcIiwgb3UgZXN0IGVuIGZpbiBkZSBtb3QsIGV0IHBhcyBcIm9udGhcIiAobW9udGgpXG4gICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1hdGNoKGV4cGxpY2l0VGltZVJlZ2V4KSkge1xuICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLnBsdWdpbi5wYXJzZVRpbWUodGltZVBhcnQpLmZvcm1hdHRlZFN0cmluZztcbiAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgXG4gICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZGF0ZUxpc3QgJiYgZGF0ZVJhbmdlLmRhdGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSW50b0xpbmsgXG4gICAgICAgICAgICAgID8gZ2VuZXJhdGVNYXJrZG93bkxpbmsodGhpcy5hcHAsIGZvcm1hdHRlZClcbiAgICAgICAgICAgICAgOiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0ZVN0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmNpZW4gY29tcG9ydGVtZW50IChwbGFnZSlcbiAgICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICAgIGNvbnN0IHRvVHJhbnNsYXRpb24gPSB0KFwidG9cIiwgcHJpbWFyeUxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgc3RhcnRGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIGAgJHt0b1RyYW5zbGF0aW9ufSBgICsgZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBlbmRGb3JtYXR0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gRMOpasOgIGfDqXLDqSBjaS1kZXNzdXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShzdWdnZXN0aW9uKTtcblxuICAgICAgICAvLyAtLS0gT1BUSU1JU0FUSU9OIDogT21ldHRyZSBsYSBkYXRlIHBvdXIgZXhwcmVzc2lvbnMgcmVsYXRpdmVzIGNvdXJ0ZXMgYXVqb3VyZCdodWkgLS0tXG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBTVEFSVCAtLS1cbiAgICAgICAgLy8gSWYgYSB0aW1lIGlzIGRldGVjdGVkIEFORCBsaW5raW5nIGlzIGVuYWJsZWQsIHdlIHNwbGl0IHRoZSBsaW5rLlxuICAgICAgICAvLyBFeHBlY3RlZCByZXN1bHQ6IFtbWVlZWS1NTS1ERF1dIEhIOm1tXG4gICAgICAgIGlmIChoYXNUaW1lICYmIG1ha2VJbnRvTGluaykge1xuICAgICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7IC8vIFBhcyBkZSBsaWVuIG7DqWNlc3NhaXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDEuIEZvcm1hdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIDIuIEZvcm1hdCB0aGUgdGltZSBwYXJ0IChmYWxsYmFjayB0byBISDptbSBpZiBub3Qgc2V0KVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG5cbiAgICAgICAgICAgIC8vIDMuIEdlbmVyYXRlIHRoZSBtYXJrZG93biBsaW5rIE9OTFkgZm9yIHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGRhdGVTdHIgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGRhdGVQYXJ0LFxuICAgICAgICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICkgKyBcIiBcIiArIHRpbWVQYXJ0OyAvLyBBcHBlbmQgdGltZSBhcyBwbGFpbiB0ZXh0XG5cbiAgICAgICAgICAgIC8vIDQuIERpc2FibGUgc3RhbmRhcmQgbGlua2luZyBzaW5jZSB3ZSBjb25zdHJ1Y3RlZCBpdCBtYW51YWxseSBhYm92ZVxuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1RpbWUgJiYgIW1ha2VJbnRvTGluaykge1xuICAgICAgICAgIC8vIE3Dqm1lIGxvZ2lxdWUgc2kgcGFzIGRlIGxpZW4gbWFpcyBhdmVjIGhldXJlXG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gYCR7ZGF0ZVBhcnR9ICR7dGltZVBhcnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IgZm9yIGRhdGVzIHdpdGhvdXQgdGltZSAoZS5nLiwgQHRvbW9ycm93KVxuICAgICAgICAgIGRhdGVTdHIgPSBwYXJzZWRSZXN1bHQuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBFTkQgLS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgZGF0ZVN0cixcbiAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGVTdWdnZXN0OiBjb250ZXh0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVJhbmdlKGRhdGVTdHIsIHRoaXMuY29udGV4dC5zdGFydCwgdGhpcy5jb250ZXh0LmVuZCk7XG5cbiAgICAvLyBFbnJlZ2lzdHJlciBsYSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlIChkZSBtYW5pw6hyZSBhc3luY2hyb25lKVxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zICYmIFxuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbikuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXIoXG4gICAgY3Vyc29yOiBFZGl0b3JQb3NpdGlvbixcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBfZmlsZTogVEZpbGVcbiAgKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuY29udGV4dD8uc3RhcnQgfHwge1xuICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICBjaDogY3Vyc29yLmNoIC0gdHJpZ2dlclBocmFzZS5sZW5ndGgsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gZWRpdG9yLmdldFJhbmdlKHN0YXJ0UG9zLCBjdXJzb3IpO1xuXG4gICAgaWYgKCFxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gZWRpdG9yLmdldFJhbmdlKFxuICAgICAge1xuICAgICAgICBsaW5lOiBzdGFydFBvcy5saW5lLFxuICAgICAgICBjaDogc3RhcnRQb3MuY2ggLSAxLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0UG9zXG4gICAgKTtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYEBgIGFzIGEgcGFydCBvZiBhIHdvcmQgKGUuZy4gcGFydCBvZiBhbiBlbWFpbCBhZGRyZXNzKVxuICAgIGlmIChwcmVjZWRpbmdDaGFyICYmIC9bYGEtekEtWjAtOV0vLnRlc3QocHJlY2VkaW5nQ2hhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRQb3MsXG4gICAgICBlbmQ6IGN1cnNvcixcbiAgICAgIHF1ZXJ5OiBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcikuc3Vic3RyaW5nKHRyaWdnZXJQaHJhc2UubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zb21lKGxhbmcgPT4ge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChgJHt0aW1lV29yZH06YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMZW5ndGggb2YgdGhlIFwiPFRpbWVXb3JkPjpcIiBwcmVmaXggdGhhdCBnZXRUaW1lU3VnZ2VzdGlvbnMoKSBidWlsZHMgaXRzXG4gIC8vIHN1Z2dlc3Rpb25zIHdpdGgsIHNvIGNhbGxlcnMgY2FuIHN0cmlwIGV4YWN0bHkgdGhhdCBtYW55IGNoYXJhY3RlcnNcbiAgLy8gaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBsZW5ndGggLS0gXCJUaW1lOlwiIGlzIDUgY2hhcnMgb25seSBpbiBFbmdsaXNoIGFuZFxuICAvLyBhIGZldyBvdGhlcnMgYnkgY29pbmNpZGVuY2UgKGUuZy4gRnJlbmNoIFwiaGV1cmU6XCIgaXMgNiwgSXRhbGlhbiBcIm9yYTpcIlxuICAvLyBpcyA0LCBDaGluZXNlIFwi5pmC6ZaTOlwiIGlzIDMgVVRGLTE2IGNvZGUgdW5pdHMpLlxuICBwcm90ZWN0ZWQgZ2V0VGltZVByZWZpeExlbmd0aChzdWdnZXN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGAke3RpbWVXb3JkfTpgO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXgubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bmlxdWUoc3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSA6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuICAgIH0pXG4gIH1cbn0iLCJpbXBvcnQgeyBhZGp1c3RDdXJzb3IsIGdldFNlbGVjdGVkVGV4dCwgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlQ29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLCBtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIC8vIEwnw6lkaXRldXIgcG91cnJhaXQgbmUgcGFzIMOqdHJlIGRpc3BvbmlibGUgKHBhciBleGVtcGxlIGRhbnMgdW5lIHZ1ZSBub24tbWFya2Rvd24pXG4gIGlmICghZWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xuICAvLyBDYXB0dXJlZCBhZnRlciBnZXRTZWxlY3RlZFRleHQoKTogd2hlbiBub3RoaW5nIHdhcyBzZWxlY3RlZCwgdGhhdCBjYWxsXG4gIC8vIGV4cGFuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCBhdCB0aGUgY3Vyc29yLCB3aGljaCBtb3ZlcyB3aGVyZSB0aGVcbiAgLy8gc2VsZWN0aW9uIGFjdHVhbGx5IGVuZHMuIENhcHR1cmluZyB0aGUgY3Vyc29yIGJlZm9yZWhhbmQgd291bGQgYW5jaG9yXG4gIC8vIGFkanVzdEN1cnNvcigpJ3Mgb2Zmc2V0IG1hdGggdG8gdGhlIHByZS1leHBhbnNpb24gcG9zaXRpb24gaW5zdGVhZCBvZlxuICAvLyB0aGUgZWRnZSBvZiB0aGUgdGV4dCB0aGF0J3MgYWJvdXQgdG8gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoXCJ0b1wiKTtcblxuICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAvLyBDJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICBsZXQgbmV3U3RyID0gXCJcIjtcbiAgICBcbiAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0ZUxpbmtzID0gZGF0ZVJhbmdlLmRhdGVMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbWyR7Zm9ybWF0dGVkfV1dYDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmb3JtYXR0ZWR9XSgke2Zvcm1hdHRlZH0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBcImNsZWFuXCIgYW5kIFwidGltZVwiIGJvdGggcmVzb2x2ZSB0byB0aGUgcGxhaW4gZm9ybWF0dGVkIGRhdGUgaGVyZTpcbiAgICAgICAgICAvLyBlYWNoIGRhdGVMaXN0IGVudHJ5IGlzIGEgd2hvbGUgY2FsZW5kYXIgZGF5IHdpdGggbm8gcGFyc2VkIHRpbWVcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHNvIFwidGltZVwiIGZvciBhIHJhbmdlIG1lYW5zIHRoZSBzYW1lIGFzIFwiY2xlYW5cIiAoc2VlXG4gICAgICAgICAgLy8gdGhlIGlkZW50aWNhbCBtb2RlID09IFwidGltZVwiIGNhc2UgaW4gdGhlIG5vbi1saXN0IGJyYW5jaCBiZWxvdykuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXdTdHIgPSBkYXRlTGlua3Muam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2Uuc3RhcnRNb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgIFxuICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgLy8gR8OpbsOpcmVyIGRlcyBsaWVucyBwb3VyIGxhIHBsYWdlIDogW1tzdGFydF1dIHRvIFtbZW5kXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtzdGFydEZvcm1hdHRlZH1dXSAke3RvVHJhbnNsYXRpb259IFtbJHtlbmRGb3JtYXR0ZWR9XV1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgIC8vIExpZW4gTWFya2Rvd24gc3RhbmRhcmRcbiAgICAgICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZVJhbmdlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAgICAgLy8gVGV4dGUgYnJ1dCBzYW5zIGxpZW5cbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgICAgICAvLyBQYXMgZCdoZXVyZSBwb3VyIGxlcyBwbGFnZXNcbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obmV3U3RyKTtcbiAgICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5vbiwgdHJhaXRlciBjb21tZSB1bmUgZGF0ZSBub3JtYWxlXG4gIGNvbnN0IGRhdGUgPSBwbHVnaW4ucGFyc2VEYXRlKHNlbGVjdGVkVGV4dCk7XG5cbiAgaWYgKCFkYXRlLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2gsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS0tIE1PRElGSUNBVElPTiBJTlRFTExJR0VOVEUgVjAuOSAtLS1cbiAgLy8gT24gdsOpcmlmaWUgc2kgdW5lIGhldXJlIGVzdCBwcsOpc2VudGUgZGFucyBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpXG4gIGNvbnN0IGhhc1RpbWUgPSBwbHVnaW4uaGFzVGltZUNvbXBvbmVudChzZWxlY3RlZFRleHQpO1xuXG4gIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgY29uc3QgaXNUb2RheSA9IGRhdGUubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHNlbGVjdGVkVGV4dCwgcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gIGNvbnN0IHNob3VsZE9taXREYXRlID0gcGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSAmJiBpc1RvZGF5ICYmIGlzUmVsYXRpdmVTaG9ydFRlcm0gJiYgaGFzVGltZTtcblxuICBsZXQgbmV3U3RyID0gXCJcIjtcblxuICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgIC8vIEMnZXN0IGxlIG1vZGUgcGFyIGTDqWZhdXQgKENyZWF0ZSBMaW5rKVxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBuZXdTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENBUyBIWUJSSURFIDogW1tEYXRlXV0gSGV1cmVcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2EgcGFzIG1pcyBkZSBmb3JtYXQgZCdoZXVyZSwgb24gZm9yY2UgSEg6bW0gcGFyIHPDqWN1cml0w6lcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZVBhcnR9XV0gJHt0aW1lUGFydH1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ0FTIENMQVNTSVFVRSA6IFtbRGF0ZV1dXG4gICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9XV1gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZCBbdGV4dGVdKGRhdGUpXG4gICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9KWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgIG5ld1N0ciA9IGAke2RhdGUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgIC8vIEp1c3RlIGwnaGV1cmVcbiAgICBjb25zdCB0aW1lID0gcGx1Z2luLnBhcnNlVGltZShzZWxlY3RlZFRleHQpO1xuICAgIG5ld1N0ciA9IGAke3RpbWUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH1cblxuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgZWRpdG9yLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNb21lbnRDb21tYW5kKFxuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLFxuICBkYXRlOiBEYXRlLFxuICBmb3JtYXQ6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHsgd29ya3NwYWNlIH0gPSBwbHVnaW4uYXBwO1xuICBjb25zdCBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3Iod29ya3NwYWNlKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm93Q29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKTogdm9pZCB7XG4gIGNvbnN0IGZvcm1hdCA9IGAke3BsdWdpbi5zZXR0aW5ncy5mb3JtYXR9JHtwbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yfSR7cGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXR9YDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQ7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBpbnNlcnRNb21lbnRDb21tYW5kKHBsdWdpbiwgZGF0ZSwgZm9ybWF0KTtcbn0iLCJpbXBvcnQgeyBQbHVnaW4sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFbnRyeSB7XG4gIGNvdW50OiBudW1iZXI7IC8vIE5vbWJyZSBkZSBmb2lzIHF1ZSBjZXR0ZSBzdWdnZXN0aW9uIGEgw6l0w6kgc8OpbGVjdGlvbm7DqWVcbiAgbGFzdFVzZWQ6IG51bWJlcjsgLy8gRGF0ZS5ub3coKSBkZSBsYSBkZXJuacOocmUgc8OpbGVjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkhpc3Rvcnkge1xuICBbc3VnZ2VzdGlvbjogc3RyaW5nXTogSGlzdG9yeUVudHJ5O1xufVxuXG5jb25zdCBNQVhfSElTVE9SWV9TSVpFID0gMTAwOyAvLyBMaW1pdGUgZHUgbm9tYnJlIGQnZW50csOpZXMgZGFucyBsJ2hpc3RvcmlxdWVcbmNvbnN0IEhJU1RPUllfRklMRSA9IFwicGx1Z2lucy9ubGRhdGVzLXJldml2ZWQvaGlzdG9yeS5qc29uXCI7XG5jb25zdCBDTEVBTlVQX0lOVEVSVkFMID0gMzAwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyA1IG1pbnV0ZXNcblxuLy8gQSBzdWdnZXN0aW9uJ3MgcmFuayBpcyBmcmVxdWVuY3kgd2VpZ2h0ZWQgYnkgcmVjZW5jeSwgbm90IHJhdyBsaWZldGltZVxuLy8gY291bnQ6IHdpdGhvdXQgZGVjYXksIHNvbWV0aGluZyBzZWxlY3RlZCA1MCB0aW1lcyBzaXggbW9udGhzIGFnbyB3b3VsZFxuLy8gcGVybWFuZW50bHkgb3V0cmFuayBzb21ldGhpbmcgc2VsZWN0ZWQgMyB0aW1lcyB0aGlzIHdlZWssIGV2ZW4gdGhvdWdoXG4vLyB0aGUgbGF0dGVyIGlzIGNsZWFybHkgbW9yZSByZWxldmFudCAqbm93Ki4gSGFsdmluZyB0aGUgd2VpZ2h0IGV2ZXJ5XG4vLyBIQUxGX0xJRkVfTVMgb2YgaW5hY3Rpdml0eSBtZWFucyBldmVyeSByZXVzZSBcInJlZnJlc2hlc1wiIGFuIGVudHJ5LCB3aGlsZVxuLy8gZ2VudWluZWx5IHN0YWxlIGVudHJpZXMgZmFkZSBvdXQgaW5zdGVhZCBvZiBjYW1waW5nIHRoZSB0b3Agb2YgdGhlIGxpc3Rcbi8vIGZvcmV2ZXIuXG5jb25zdCBIQUxGX0xJRkVfTVMgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDMwIGpvdXJzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSBoaXN0b3J5OiBTZWxlY3Rpb25IaXN0b3J5ID0ge307XG4gIHByaXZhdGUgaGlzdG9yeUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlZFRvcFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGNhY2hlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBJRCBkZSBsJ2ludGVydmFsbGUgZGUgbmV0dG95YWdlXG5cbiAgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLnN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogRMOpbWFycmUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlIGRlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDUgbWludXRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpO1xuICAgIH0sIENMRUFOVVBfSU5URVJWQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlICjDoCBhcHBlbGVyIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24pXG4gICAqL1xuICBzdG9wUGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFudXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3R1ZSB1biBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIHNpIG7DqWNlc3NhaXJlIGV0IG5ldHRvaWUgbGVzIGVudHLDqWVzIHBldSB1dGlsaXPDqWVzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1QZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhpc3RvcnlMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoO1xuICAgIFxuICAgIC8vIFNpIGwnaGlzdG9yaXF1ZSBkw6lwYXNzZSBsYSBsaW1pdGUsIGxlIHLDqWR1aXJlXG4gICAgaWYgKGN1cnJlbnRTaXplID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlOiByw6lkdWl0IGRlICR7Y3VycmVudFNpemV9IMOgICR7T2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGh9IGVudHLDqWVzYCk7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRpdCB1biBoaXN0b3JpcXVlIGNoYXJnw6kgZGVwdWlzIGxlIGRpc3F1ZSB2ZXJzIGxlIGZvcm1hdCBhY3R1ZWwuXG4gICAqIExlcyBmaWNoaWVycyDDqWNyaXRzIHBhciB1bmUgdmVyc2lvbiBhbnTDqXJpZXVyZSBkdSBwbHVnaW4gc3RvY2tlbnQgdW5cbiAgICogc2ltcGxlIGNvbXB0ZXVyIChgeyBbc3VnZ2VzdGlvbl06IG51bWJlciB9YCkgYXUgbGlldSBkZVxuICAgKiBgeyBbc3VnZ2VzdGlvbl06IEhpc3RvcnlFbnRyeSB9YCAtLSBvbiBkb25uZSDDoCBjZXMgZW50csOpZXMgdW5cbiAgICogbGFzdFVzZWQgZGUgXCJtYWludGVuYW50XCIgcG91ciBuZSBwYXMgbGVzIGZhaXJlIGRpc3BhcmHDrnRyZVxuICAgKiBpbW3DqWRpYXRlbWVudCBkdSBjbGFzc2VtZW50IGxlIHRlbXBzIHF1J3VuIG5vdXZlbCB1c2FnZSBsZXMgcmFmcmHDrmNoaXNzZS5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZUhpc3RvcnkocmF3OiB1bmtub3duKTogU2VsZWN0aW9uSGlzdG9yeSB7XG4gICAgY29uc3QgbWlncmF0ZWQ6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgICAvLyB0eXBlb2YgW10gPT09IFwib2JqZWN0XCIsIHNvIGEgdG9wLWxldmVsIEpTT04gYXJyYXkgKGNvcnJ1cHRlZCBmaWxlLFxuICAgIC8vIHN0cmF5IG1hbnVhbCBlZGl0KSB3b3VsZCBvdGhlcndpc2Ugc2FpbCB0aHJvdWdoIHRoZSBjYWxsZXInc1xuICAgIC8vIGB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiYCBjaGVjayBhbmQgZ2V0IHdhbGtlZCBoZXJlOiBPYmplY3QuZW50cmllcygpXG4gICAgLy8gb24gYW4gYXJyYXkgeWllbGRzIG51bWVyaWMtc3RyaW5nIGtleXMgKFwiMFwiLCBcIjFcIiwgLi4uKSB0aGF0IHdvdWxkIGJlXG4gICAgLy8gbWlncmF0ZWQgaW50byBib2d1cyBoaXN0b3J5IGVudHJpZXMuXG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIHJldHVybiBtaWdyYXRlZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7IGNvdW50OiB2YWx1ZSwgbGFzdFVzZWQ6IG5vdyB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5jb3VudCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkubGFzdFVzZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDb3B5IG9ubHkgdGhlIHR3byBleHBlY3RlZCBmaWVsZHMgcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcGFyc2VkIG9iamVjdCByZWZlcmVuY2UsIHNvIHVuZXhwZWN0ZWQgZXh0cmEgcHJvcGVydGllcyBvbiBhXG4gICAgICAgIC8vIG1hbGZvcm1lZCBlbnRyeSBhcmVuJ3Qgc2lsZW50bHkgY2FycmllZCBmb3J3YXJkIGFuZCByZS1wZXJzaXN0ZWQuXG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7XG4gICAgICAgICAgY291bnQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50LFxuICAgICAgICAgIGxhc3RVc2VkOiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgKG1hbGZvcm1lZCBlbnRyeSkgaXMgc2lsZW50bHkgZHJvcHBlZCByYXRoZXIgdGhhblxuICAgICAgLy8gY2FycmllZCBmb3J3YXJkIC0tIGEgc2luZ2xlIGJhZCBlbnRyeSBzaG91bGRuJ3QgcG9pc29uIHRoZSByZXN0LlxuICAgIH1cbiAgICByZXR1cm4gbWlncmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2NvcmUgZCd1bmUgZW50csOpZSA6IGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciBkJ3V0aWxpc2F0aW9uXG4gICAqICh2b2lyIEhBTEZfTElGRV9NUykuIFV0aWxpc8OpIHBvdXIgdHJpZXIvdHJpbW1lciBsJ2hpc3RvcmlxdWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTY29yZShlbnRyeTogSGlzdG9yeUVudHJ5LCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWdlTXMgPSBNYXRoLm1heCgwLCBub3cgLSBlbnRyeS5sYXN0VXNlZCk7XG4gICAgY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjUsIGFnZU1zIC8gSEFMRl9MSUZFX01TKTtcbiAgICByZXR1cm4gZW50cnkuY291bnQgKiBkZWNheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGRlcHVpcyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgbG9hZEhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKTtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMubWlncmF0ZUhpc3RvcnkocGFyc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGV4aXN0cygpL3JlYWQoKSBjYWxscyBhYm92ZSBhbHJlYWR5IGhhbmRsZSB0aGUgXCJmaWxlIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IHlldFwiIGNhc2UgZXhwbGljaXRseSAodGhlIGBpZiAoZXhpc3RzKWAgZ3VhcmQpIC0tIHJlYWNoaW5nXG4gICAgICAvLyB0aGlzIGNhdGNoIG1lYW5zIGFuIGFjdHVhbCBhbm9tYWx5IChjb3JydXB0ZWQgSlNPTiBmcm9tIGFuXG4gICAgICAvLyBpbnRlcnJ1cHRlZCB3cml0ZSwgYSBzeW5jIGNvbmZsaWN0LCBldGMuKSwgc28gbG9nIGl0IGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgdGhlIHVzZXIncyBoaXN0b3J5IHdpdGggbm8gZGlhZ25vc3RpYyB0cmFpbC5cbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGxvYWRpbmcgaGlzdG9yeTpcIiwgeyBlcnJvciB9KTtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhpc3RvcnlMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGRhbnMgbGUgc3RvY2thZ2VcbiAgICovXG4gIGFzeW5jIHNhdmVIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIFxuICAgICAgLy8gQ3LDqWVyIGxlIGRvc3NpZXIgc2kgbsOpY2Vzc2FpcmVcbiAgICAgIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkaXIpO1xuICAgICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5LCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHNhdmluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIHN1Z2dlc3Rpb24gZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdWdnZXN0aW9uLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IGhpc3Rvcnkga2V5cyBhcmUgc3RvcmVkIGZ1bGx5IGxvd2VyY2FzZSAoc2VlXG4gICAgLy8gcmVjb3JkU2VsZWN0aW9uKCkpLCBzbyBhIG11bHRpLXdvcmQgc3VnZ2VzdGlvbiBsaWtlIFwibmV4dCBmcmlkYXlcIlxuICAgIC8vIHdvdWxkIG90aGVyd2lzZSBkaXNwbGF5IGFzIFwiTmV4dCBmcmlkYXlcIiAtLSBvbmx5IHRoZSB2ZXJ5IGZpcnN0XG4gICAgLy8gbGV0dGVyIGNhcGl0YWxpemVkIC0tIGluY29uc2lzdGVudCB3aXRoIHRoZSBcIk5leHQgRnJpZGF5XCIgdGhhdCBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gc291cmNlcyAoZS5nLiBkYXRlLXN1Z2dlc3QudHMncyBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucylcbiAgICAvLyBzaG93IGZvciB0aGUgZXhhY3Qgc2FtZSBwaHJhc2UgaW4gdGhlIHNhbWUgZHJvcGRvd24uXG4gICAgcmV0dXJuIHRyaW1tZWRcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSB1bmUgc8OpbGVjdGlvbiBkYW5zIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkU2VsZWN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIC8vIE5vcm1hbGlzZXIgbGEgc3VnZ2VzdGlvbiAoZW4gbWludXNjdWxlcyBwb3VyIGxhIGNsw6ksIMOpdml0ZSBsZXMgZG91YmxvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmNyw6ltZW50ZXIgbGUgY29tcHRldXIgZXQgcmFmcmHDrmNoaXIgbGEgZGF0ZSBkJ3V0aWxpc2F0aW9uICh1dGlsaXNlciBsYSBjbMOpIGVuIG1pbnVzY3VsZXMpXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy5oaXN0b3J5W25vcm1hbGl6ZWRdID0ge1xuICAgICAgY291bnQ6IChleGlzdGluZz8uY291bnQgfHwgMCkgKyAxLFxuICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIC8vIExpbWl0ZXIgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBzaSBuw6ljZXNzYWlyZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aCA+IE1BWF9ISVNUT1JZX1NJWkUpIHtcbiAgICAgIHRoaXMudHJpbUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZVxuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgIC8vIFNhdmUgKGFzeW5jaHJvbm91c2x5LCBkb24ndCBibG9jaylcbiAgICB0aGlzLnNhdmVIaXN0b3J5KCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lkdWl0IGxhIHRhaWxsZSBkZSBsJ2hpc3RvcmlxdWUgZW4gZ2FyZGFudCBsZXMgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdHJpbUhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gR2FyZGVyIHVuaXF1ZW1lbnQgbGVzIE1BWF9ISVNUT1JZX1NJWkUgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICBjb25zdCB0cmltbWVkID0gZW50cmllcy5zbGljZSgwLCBNQVhfSElTVE9SWV9TSVpFKTtcblxuICAgIHRoaXMuaGlzdG9yeSA9IE9iamVjdC5mcm9tRW50cmllcyh0cmltbWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGV0IG1ldCDDoCBqb3VyIGxlIGNhY2hlICjDoCBhcHBlbGVyIGF1IGTDqW1hcnJhZ2UpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0IMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIHBlcnRpbmVudGVzXG4gICAqIChmcsOpcXVlbmNlIHBvbmTDqXLDqWUgcGFyIGxhIGZyYcOuY2hldXIsIHZvaXIgY29tcHV0ZVNjb3JlKCkpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaGlzdG9yeSk7XG5cbiAgICAvLyBUcmllciBwYXIgc2NvcmUgKGTDqWNyb2lzc2FudClcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKTtcblxuICAgIC8vIE1ldHRyZSBlbiBjYWNoZSBsZXMgdG9wIHN1Z2dlc3Rpb25zIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBjYXBpdGFsaXPDqWVcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gZW50cmllcy5zbGljZSgwLCA1MCkubWFwKChbc3VnZ2VzdGlvbl0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbilcbiAgICApO1xuICAgIHRoaXMuY2FjaGVWYWxpZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKiBAcGFyYW0gbGltaXQgTm9tYnJlIG1heGltdW0gZGUgc3VnZ2VzdGlvbnMgw6AgcmV0b3VybmVyXG4gICAqL1xuICBnZXRUb3BTdWdnZXN0aW9uc1N5bmMobGltaXQgPSAxMCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVWYWxpZCkge1xuICAgICAgLy8gU2kgbGUgY2FjaGUgbidlc3QgcGFzIHZhbGlkZSwgcmV0b3VybmVyIHVuIHRhYmxlYXUgdmlkZVxuICAgICAgLy8gTGUgY2FjaGUgc2VyYSBtaXMgw6Agam91ciBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb25cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIGZyw6lxdWVudGVzLCB0cmnDqWVzIHBhciBmcsOpcXVlbmNlIChhc3luYywgbWV0IMOgIGpvdXIgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGFzeW5jIGdldFRvcFN1Z2dlc3Rpb25zKGxpbWl0ID0gMTApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpaW5pdGlhbGlzZSBsJ2hpc3RvcmlxdWVcbiAgICovXG4gIGFzeW5jIGNsZWFySGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcHJpbWUgdW5lIHNldWxlIGVudHLDqWUgZGUgbCdoaXN0b3JpcXVlIChnZXN0aW9uIGZpbmUsIHBhciBvcHBvc2l0aW9uXG4gICAqIMOgIGNsZWFySGlzdG9yeSgpIHF1aSB2aWRlIHRvdXQpLiBgc3VnZ2VzdGlvbmAgcGV1dCDDqnRyZSBsYSBmb3JtZSBub3JtYWxpc8OpZVxuICAgKiBhZmZpY2jDqWUgw6AgbCd1dGlsaXNhdGV1ciAoZXg6IFwiTmV4dCBGcmlkYXlcIikgb3UgbGEgY2zDqSBicnV0ZSBzdG9ja8OpZSBlblxuICAgKiBpbnRlcm5lIChleDogXCJuZXh0IGZyaWRheVwiKSAtLSBsZXMgZGV1eCBzb250IGFjY2VwdMOpZXMgcHVpc3F1ZVxuICAgKiBsJ3V0aWxpc2F0ZXVyIG5lIHZvaXQgamFtYWlzIGxhIGNsw6kgYnJ1dGUsIHNldWxlbWVudCBsYSB2ZXJzaW9uIGFmZmljaMOpZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUVudHJ5KHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghKG5vcm1hbGl6ZWQgaW4gdGhpcy5oaXN0b3J5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgdG91dGVzIGxlcyBlbnRyw6llcyBkZSBsJ2hpc3RvcmlxdWUsIHRyacOpZXMgcGFyIHBlcnRpbmVuY2VcbiAgICogKHZvaXIgY29tcHV0ZVNjb3JlKCkpLCBhdmVjIGxldXJzIG3DqXRhZG9ubsOpZXMgLS0gdXRpbGlzw6kgcGFyIGwnaW50ZXJmYWNlXG4gICAqIGRlIGdlc3Rpb24gZmluZSBkZSBsJ2hpc3RvcmlxdWUgKGFmZmljaGFnZSArIHN1cHByZXNzaW9uIGluZGl2aWR1ZWxsZSkuXG4gICAqIENvbnRyYWlyZW1lbnQgw6AgZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKCkvZ2V0VG9wU3VnZ2VzdGlvbnMoKSwgcXVpIG5lXG4gICAqIHJlbnZvaWVudCBxdWUgbGUgdGV4dGUgYWZmaWNow6ksIGNlY2kgcmVudm9pZSBhdXNzaSBsYSBjbMOpIGJydXRlIChwb3VyXG4gICAqIHJlbW92ZUVudHJ5KCkpIGV0IGxlcyBtw6l0YWRvbm7DqWVzIGNvdW50L2xhc3RVc2VkIChwb3VyIGwnYWZmaWNoYWdlKS5cbiAgICovXG4gIGFzeW5jIGdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk6IFByb21pc2U8QXJyYXk8eyBrZXk6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBjb3VudDogbnVtYmVyOyBsYXN0VXNlZDogbnVtYmVyIH0+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKVxuICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGRpc3BsYXk6IHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihrZXkpLFxuICAgICAgICBjb3VudDogZW50cnkuY291bnQsXG4gICAgICAgIGxhc3RVc2VkOiBlbnRyeS5sYXN0VXNlZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlcyByZXNzb3VyY2VzIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0IChwb3VyIGRlYnVnKVxuICAgKi9cbiAgYXN5bmMgZ2V0SGlzdG9yeSgpOiBQcm9taXNlPFNlbGVjdGlvbkhpc3Rvcnk+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5oaXN0b3J5IH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5cbi8vIENoZWFwLCBub24tY3J5cHRvZ3JhcGhpYyBzdHJpbmcgaGFzaCAoZGpiMiB2YXJpYW50KSB1c2VkIHRvIGZpbmdlcnByaW50XG4vLyB0aGUgc2Nhbm5lZCBjb250ZXh0IHdpbmRvdyBmb3IgY2FjaGUga2V5cyAtLSBmYXN0IGVub3VnaCB0byBydW4gb24gZXZlcnlcbi8vIGtleXN0cm9rZSB3aGlsZSBzdGlsbCBkaXN0aW5ndWlzaGluZyBkaWZmZXJlbnQgY29udGVudCByZWxpYWJseS5cbmZ1bmN0aW9uIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgaGFzaCA9IDUzODE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKSkgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufVxuXG5jb25zdCBDT05URVhUX0xJTkVTID0gMTA7IC8vIE5vbWJyZSBkZSBsaWduZXMgw6AgYW5hbHlzZXIgYXZhbnQgZXQgYXByw6hzIGxlIGN1cnNldXJcbmNvbnN0IE1BWF9EQVRFU19UT19FWFRSQUNUID0gMTA7IC8vIE5vbWJyZSBtYXhpbXVtIGRlIGRhdGVzIMOgIGV4dHJhaXJlIGR1IGNvbnRleHRlXG5jb25zdCBNQVhfQ0FDSEVfU0laRSA9IDIwMDsgLy8gTGltaXRlIGRlIHRhaWxsZSBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuY29uc3QgQ0FDSEVfVElNRU9VVCA9IDUwMDA7IC8vIDUgc2Vjb25kZXMgZGUgY2FjaGVcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDsgLy8gTmV0dG95YWdlIHDDqXJpb2RpcXVlIHRvdXRlcyBsZXMgMzAgc2Vjb25kZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0SW5mbyB7XG4gIGRhdGVzSW5Db250ZXh0OiBzdHJpbmdbXTsgLy8gRGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKGZvcm1hdHMgbmF0dXJlbHMgZMOpdGVjdMOpcylcbiAgdGl0bGU/OiBzdHJpbmc7IC8vIFRpdHJlIGRlIGxhIG5vdGVcbiAgdGFnczogc3RyaW5nW107IC8vIFRhZ3MgZGUgbGEgbm90ZVxuICB0aW1lc3RhbXA6IG51bWJlcjsgLy8gVGltZXN0YW1wIGRlIGNyw6lhdGlvbiBwb3VyIGxlIG5ldHRveWFnZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0QW5hbHl6ZXIge1xuICBwcml2YXRlIGFwcDogQXBwO1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgY2FjaGU6IExSVUNhY2hlPHN0cmluZywgQ29udGV4dEluZm8+OyAvLyBDYWNoZSB0ZW1wb3JhaXJlIHBhciBmaWNoaWVyIGF2ZWMgbGltaXRlIGRlIHRhaWxsZVxuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcbiAgXG4gIC8vIFBhdHRlcm5zIHJlZ2V4IHBvdXIgbGEgZMOpdGVjdGlvbiBkZSBkYXRlcyAoZ8OpbsOpcsOpcyBkeW5hbWlxdWVtZW50KVxuICBwcml2YXRlIGRhdGVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz4oTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGVQYXR0ZXJucygpO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZHUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gTmV0dG95ZXIgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cEV4cGlyZWRFbnRyaWVzKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIGVudHLDqWVzIGV4cGlyw6llcyBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZEVudHJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBQYXJjb3VyaXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAodmFsdWUudGltZXN0YW1wICYmIChub3cgLSB2YWx1ZS50aW1lc3RhbXApID4gQ0FDSEVfVElNRU9VVCkge1xuICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByaW1lciBsZXMgZW50csOpZXMgZXhwaXLDqWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChrZXlzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgZHUgY2FjaGUgZGUgY29udGV4dGU6ICR7a2V5c1RvRGVsZXRlLmxlbmd0aH0gZW50csOpZXMgc3VwcHJpbcOpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBsZXMgcGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIGRhbnMgdG91dGVzIGxlcyBsYW5ndWVzIGFjdGl2w6llc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHRjID0gbmV3IFRyYW5zbGF0aW9uQ29sbGVjdG9yKHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheUtleXMuZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lV29yZFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoJ2luJyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWy4uLnRjLmNvbGxlY3RXb3JkcygnbmV4dCcpLCAuLi50Yy5jb2xsZWN0V29yZHMoJ2xhc3QnKV0pO1xuXG4gICAgdGhpcy5kYXRlUGF0dGVybnMgPSBbXTtcblxuICAgIC8vIFxcYiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIFxcdywgd2hpY2ggaXMgQVNDSUktb25seTogaXQgbmV2ZXIgbWF0Y2hlc1xuICAgIC8vIGFyb3VuZCBDSksgY2hhcmFjdGVycyAobm8gYm91bmRhcnkgZXhpc3RzIGJldHdlZW4gdHdvIENoaW5lc2VcbiAgICAvLyBjaGFyYWN0ZXJzIGFzIGZhciBhcyBcXGIgaXMgY29uY2VybmVkKSwgc28gaXQgc2lsZW50bHkgZHJvcHMgZXZlcnkgQ0pLXG4gICAgLy8gbWF0Y2guIFVzaW5nIGV4cGxpY2l0IGxvb2thcm91bmQgYWdhaW5zdCBMYXRpbiBhbHBoYW51bWVyaWNzIGluc3RlYWRcbiAgICAvLyBzdGlsbCBibG9ja3MgcGFydGlhbC13b3JkIG1hdGNoZXMgZm9yIExhdGluIHNjcmlwdHMgKGUuZy4gXCJNb25kYXlcIlxuICAgIC8vIGluc2lkZSBcIk1vbmRheWlzaFwiKSB3aGlsZSBpbXBvc2luZyBubyBib3VuZGFyeSBhdCBhbGwgbmV4dCB0byBDSktcbiAgICAvLyBjaGFyYWN0ZXJzLCB3aGljaCBkb24ndCBoYXZlIHdvcmQgc2VwYXJhdG9ycyB0byBjaGVjayBhZ2FpbnN0IGFueXdheS5cbiAgICAvL1xuICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNhbid0IGJlIGEgbG9va2JlaGluZCAoXCIoPzwhLi4uKVwiKTogdGhhdCBzeW50YXhcbiAgICAvLyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TL1NhZmFyaSBiZWZvcmUgMTYuNCBhbmQgdGhyb3dzIGF0IFJlZ0V4cFxuICAgIC8vIGNvbnN0cnVjdGlvbiB0aW1lLCBicmVha2luZyBldmVyeSBvbmUgb2YgdGhlc2UgcGF0dGVybnMgb24gb2xkZXJcbiAgICAvLyBkZXZpY2VzLiBVc2luZyBhIGNvbnN1bWluZyBhbHRlcm5hdGlvbiAoXCJzdGFydC1vZi1zdHJpbmcgb3IgYSBzaW5nbGVcbiAgICAvLyBub24td29yZCBjaGFyYWN0ZXJcIikgaW5zdGVhZCB3b3JrcyB0aGUgc2FtZSB3YXkgYnV0IGFjdHVhbGx5IGNvbnN1bWVzXG4gICAgLy8gdGhhdCBsZWFkaW5nIGNoYXJhY3Rlciwgc28gdGhlIGNvbnRlbnQgdG8gZXh0cmFjdCBpcyB3cmFwcGVkIGluIGl0c1xuICAgIC8vIG93biBjYXB0dXJpbmcgZ3JvdXAgYmVsb3cgcmF0aGVyIHRoYW4gcmVhZCBvZmYgdGhlIHdob2xlIG1hdGNoLlxuICAgIC8vIExvb2thaGVhZCAoXCIoPyEuLi4pXCIpIGhhcyBubyBzdWNoIGNvbXBhdGliaWxpdHkgaXNzdWUgYW5kIGNhbiBzdGF5LlxuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUJlZm9yZSA9ICcoPzpefFteYS16QS1aMC05X10pJztcbiAgICBjb25zdCB3b3JkQm91bmRhcnlBZnRlciA9ICcoPyFbYS16QS1aMC05X10pJztcblxuICAgIC8vIFBhdHRlcm4gMTogSm91cnMgZGUgbGEgc2VtYWluZVxuICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt3ZWVrZGF5UGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAyOiBNb3RzIHRlbXBvcmVscyBjb3VyYW50cyAodG9kYXksIHRvbW9ycm93LCB5ZXN0ZXJkYXkpXG4gICAgaWYgKHRpbWVXb3JkUGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt0aW1lV29yZFBhdHRlcm59KSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogRXhwcmVzc2lvbnMgcmVsYXRpdmVzIFwiZGFucyBYIGpvdXJzL3NlbWFpbmVzL21vaXNcIlxuICAgIGlmIChpblBhdHRlcm4gJiYgdGltZVVuaXRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke2luUGF0dGVybn0pXFxcXHMqXFxcXGQrXFxcXHMqKD86JHt0aW1lVW5pdFBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDQ6IEV4cHJlc3Npb25zIFwibmV4dC9sYXN0IHdlZWtkYXkvd2Vlay9tb250aC95ZWFyXCJcbiAgICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyB3ZWVrZGF5cyBhbmQgdGltZVxuICAgIC8vIHVuaXRzIHRvZ2V0aGVyIHdpdGggbmV4dC9sYXN0LCBzbyB0aGUgbmVzdGVkIGNoZWNrcyBiZWxvdyBjYW4ndFxuICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHByZWZpeFBhdHRlcm4gaXMgdHJ1ZSAtLSBrZXB0IGFzIGEgZ3VhcmQgaW5cbiAgICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG4gICAgaWYgKHByZWZpeFBhdHRlcm4pIHtcbiAgICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7d2Vla2RheVBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oKD86JHtwcmVmaXhQYXR0ZXJufSlcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGxlcyBwYXR0ZXJucyAow6AgYXBwZWxlciBxdWFuZCBsZXMgbGFuZ3VlcyBjaGFuZ2VudClcbiAgICovXG4gIHJlc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5jbGVhckNhY2hlKCk7IC8vIFZpZGVyIGxlIGNhY2hlIGNhciBsZXMgcGF0dGVybnMgb250IGNoYW5nw6lcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRlIG1hbmnDqHJlIHN5bmNocm9uZSAodXRpbGlzZSBsZSBjYWNoZSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0U3luYyhlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogQ29udGV4dEluZm8ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgIGlmICghYWN0aXZlVmlldykge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGFjdGl2ZVZpZXcuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB7IGRhdGVzSW5Db250ZXh0OiBbXSwgdGFnczogW10sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHRJbmZvID0ge1xuICAgICAgZGF0ZXNJbkNvbnRleHQ6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBbmFseXNlciBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1clxuICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCBjdXJzb3JMaW5lIC0gQ09OVEVYVF9MSU5FUyk7XG4gICAgICBjb25zdCBlbmRMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgY3Vyc29yTGluZSArIENPTlRFWFRfTElORVMpO1xuXG4gICAgICBjb25zdCBjb250ZXh0TGluZXMgPSBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUgKyAxKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXh0ID0gY29udGV4dExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIC8vIFbDqXJpZmllciBsZSBjYWNoZSAoYXZlYyB0aW1lb3V0KS4gVGhlIGtleSBpbmNsdWRlcyBhIGNoZWFwIGhhc2ggb2ZcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2Nhbm5lZCB3aW5kb3csIG5vdCBqdXN0IGZpbGUrbGluZTogd2l0aG91dCBpdCwgZWRpdGluZ1xuICAgICAgLy8gY29udGVudCB3aXRoaW4gdGhlIMKxQ09OVEVYVF9MSU5FUyB3aW5kb3cgKHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3JcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGxpbmUpIHdvdWxkIGtlZXAgc2VydmluZyBhIHN0YWxlIGNhY2hlZCByZXN1bHQgdW50aWxcbiAgICAgIC8vIENBQ0hFX1RJTUVPVVQgZXhwaXJlcywgc2luY2UgZmlsZStsaW5lIGFsb25lIGRvZXNuJ3QgY2hhbmdlIHdoZW5cbiAgICAgIC8vIG5lYXJieSBjb250ZW50IGRvZXMuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZpbGUucGF0aH0tJHtjdXJzb3JMaW5lfS0ke3NpbXBsZUhhc2goY29udGV4dFRleHQpfWA7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIC8vIFbDqXJpZmllciBzaSBsJ2VudHLDqWUgbidlc3QgcGFzIGV4cGlyw6llXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWQudGltZXN0YW1wICYmIChub3cgLSBjYWNoZWQudGltZXN0YW1wKSA8PSBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbnRyw6llIGV4cGlyw6llLCBsYSBzdXBwcmltZXJcbiAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFpcmUgbGVzIHRhZ3MgZGVwdWlzIGxlcyBtw6l0YWRvbm7DqWVzXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YS50YWdzKSB7XG4gICAgICAgICAgY29udGV4dC50YWdzID0gbWV0YWRhdGEudGFncy5tYXAodGFnID0+IHRhZy50YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFpcmUgbGUgdGl0cmUgZGVwdWlzIGxlcyBmcm9udG1hdHRlciBvdSBsZSBwcmVtaWVyIHRpdHJlXG4gICAgICAgIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgdXNlci1hdXRob3JlZCBZQU1MLCBzbyBcInRpdGxlXCIgaXNuJ3RcbiAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBhY3R1YWxseSBiZSBhIHN0cmluZyAoZS5nLiBgdGl0bGU6IDQyYCkuXG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEuZnJvbnRtYXR0ZXI/LnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udGV4dC50aXRsZSA9IG1ldGFkYXRhLmZyb250bWF0dGVyLnRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmhlYWRpbmdzICYmIG1ldGFkYXRhLmhlYWRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuaGVhZGluZ3NbMF0uaGVhZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgZGF0ZXMgZHUgY29udGV4dGVcbiAgICAgIGNvbnRleHQuZGF0ZXNJbkNvbnRleHQgPSB0aGlzLmV4dHJhY3REYXRlc0Zyb21Db250ZXh0KGNvbnRleHRUZXh0KTtcblxuICAgICAgLy8gTWV0dHJlIGVuIGNhY2hlIChsZSBMUlUgY2FjaGUgZ8OocmUgYXV0b21hdGlxdWVtZW50IGxhIGxpbWl0ZSBkZSB0YWlsbGUpXG4gICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY29udGV4dCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgYW5hbHl6aW5nIGNvbnRleHQ6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHlzZSBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1ciBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCAoYXN5bmMsIHBvdXIgY29tcGF0aWJpbGl0w6kpXG4gICAqL1xuICBhbmFseXplQ29udGV4dChlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hbmFseXplQ29udGV4dFN5bmMoZWRpdG9yLCBjdXJzb3JMaW5lKSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXNlIHVuZSBkYXRlIGV4dHJhaXRlIGVuIGNhcGl0YWxpc2FudCBsYSBwcmVtacOocmUgbGV0dHJlXG4gICAqIEV4ZW1wbGU6IFwiZGVtYWluXCIgLT4gXCJEZW1haW5cIiwgXCJsdW5kaSBwcm9jaGFpblwiIC0+IFwiTHVuZGkgcHJvY2hhaW5cIlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gZGF0ZVN0ci50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG5cbiAgICAvLyBDYXBpdGFsaXplIGVhY2ggd29yZCBpbmRpdmlkdWFsbHksIG5vdCBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2ZcbiAgICAvLyB0aGUgd2hvbGUgc3RyaW5nOiBtdWx0aS13b3JkIG1hdGNoZXMgZnJvbSB0aGUgcHJlZml4K3dlZWtkYXkvcHJlZml4K1xuICAgIC8vIHVuaXQgcGF0dGVybnMgKGUuZy4gXCJuZXh0IEZyaWRheVwiKSB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0aGVpciBzZWNvbmRcbiAgICAvLyB3b3JkIGZvcmNlZCB0byBsb3dlcmNhc2UgKFwiTmV4dCBmcmlkYXlcIiksIGluY29ycmVjdGx5IG1hbmdsaW5nXG4gICAgLy8gY2FwaXRhbGl6ZWQgd2Vla2RheS9tb250aCBuYW1lcyB0aGUgdXNlciBhY3R1YWxseSB0eXBlZC5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWl0IGxlcyBleHByZXNzaW9ucyBkZSBkYXRlcyBwb3RlbnRpZWxsZXMgZHUgdGV4dGVcbiAgICogVXRpbGlzZSBkZXMgcGF0dGVybnMgZHluYW1pcXVlcyBtdWx0aS1sYW5ndWUgcG91ciBkw6l0ZWN0ZXIgbGVzIGRhdGVzIG5hdHVyZWxsZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdERhdGVzRnJvbUNvbnRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFV0aWxpc2VyIGxlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIGfDqW7DqXLDqXMgcG91ciB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuZGF0ZVBhdHRlcm5zKSB7XG4gICAgICAvLyBUaGUgbGVhZGluZyBib3VuZGFyeSBjb25zdW1lcyBhIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHVzaW5nIGFcbiAgICAgIC8vIHplcm8td2lkdGggbG9va2JlaGluZCAoc2VlIGluaXRpYWxpemVEYXRlUGF0dGVybnMpLCBzbyB0aGUgdGV4dCB0b1xuICAgICAgLy8gZXh0cmFjdCBpcyByZWFkIGZyb20gY2FwdHVyZSBncm91cCAxLCBub3QgdGhlIHdob2xlIG1hdGNoLlxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAvLyBQb3VyIGxlcyBsYW5ndWVzIHNhbnMgY2Fzc2UgKGNvbW1lIGxlIGphcG9uYWlzKSwgdG9Mb3dlckNhc2UoKSBuZSBjaGFuZ2UgcmllblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGlmICghc2Vlbi5oYXMobm9ybWFsaXplZCkgJiYgZGF0ZXMubGVuZ3RoIDwgTUFYX0RBVEVTX1RPX0VYVFJBQ1QpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXNlciBhdmVjIGxhIHByZW1pw6hyZSBsZXR0cmUgZW4gbWFqdXNjdWxlIChvdSBsYWlzc2VyIHRlbCBxdWVsIHBvdXIgbGUgamFwb25haXMpXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHRoaXMubm9ybWFsaXplRGF0ZShjb250ZW50LnRyaW0oKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIChwZXV0IMOqdHJlIGFwcGVsw6kgcMOpcmlvZGlxdWVtZW50KVxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGVzIHN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENsYXNzZSBkJ2VycmV1ciBwZXJzb25uYWxpc8OpZSBwb3VyIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5MRFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcbiAgcHVibGljIHJlYWRvbmx5IHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcicsXG4gICAgY29udGV4dD86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05MRFBhcnNlRXJyb3InO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAvLyBNYWludGllbnQgbGEgc3RhY2sgdHJhY2UgcG91ciBsZSBkw6lib2dhZ2UgKFY4IG9ubHkpXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOTERQYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2RlcyBkJ2VycmV1ciBjb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIC8vIEluaXRpYWxpc2F0aW9uXG4gIFBBUlNFUl9JTklUX0ZBSUxFRDogJ1BBUlNFUl9JTklUX0ZBSUxFRCcsXG4gIENIUk9OT19JTklUX0ZBSUxFRDogJ0NIUk9OT19JTklUX0ZBSUxFRCcsXG4gIFxuICAvLyBQYXJzaW5nXG4gIFBBUlNFX0ZBSUxFRDogJ1BBUlNFX0ZBSUxFRCcsXG4gIENIUk9OT19QQVJTRV9FUlJPUjogJ0NIUk9OT19QQVJTRV9FUlJPUicsXG4gIFxuICAvLyBDb25maWd1cmF0aW9uXG4gIFNFVFRJTkdTX0xPQURfRkFJTEVEOiAnU0VUVElOR1NfTE9BRF9GQUlMRUQnLFxuICBJTlZBTElEX0xBTkdVQUdFOiAnSU5WQUxJRF9MQU5HVUFHRScsXG59IGFzIGNvbnN0O1xuXG4iLCJpbXBvcnQgeyBOb3RpY2UsIE9ic2lkaWFuUHJvdG9jb2xEYXRhLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IERhdGVQaWNrZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvZGF0ZS1waWNrZXJcIjtcbmltcG9ydCBOTERQYXJzZXIsIHsgTkxEUmVzdWx0IH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBOTERTZXR0aW5nc1RhYiwgTkxEU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IERhdGVTdWdnZXN0IGZyb20gXCIuL3N1Z2dlc3QvZGF0ZS1zdWdnZXN0XCI7XG5pbXBvcnQge1xuICBnZXRQYXJzZUNvbW1hbmQsXG4gIGdldEN1cnJlbnREYXRlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudFRpbWVDb21tYW5kLFxuICBnZXROb3dDb21tYW5kLFxufSBmcm9tIFwiLi9jb21tYW5kc1wiO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVEYWlseU5vdGUsIHBhcnNlVHJ1dGh5LCB2YWxpZGF0ZVVyaVBhcmFtLCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IEhpc3RvcnlNYW5hZ2VyIGZyb20gXCIuL2hpc3RvcnktbWFuYWdlclwiO1xuaW1wb3J0IENvbnRleHRBbmFseXplciBmcm9tIFwiLi9jb250ZXh0LWFuYWx5emVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE5MRFBhcnNlRXJyb3IsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBleHRlbmRzIFBsdWdpbiB7XG4gIHB1YmxpYyBwYXJzZXI6IE5MRFBhcnNlcjtcbiAgcHVibGljIHNldHRpbmdzOiBOTERTZXR0aW5ncztcbiAgcHVibGljIGhpc3RvcnlNYW5hZ2VyOiBIaXN0b3J5TWFuYWdlcjtcbiAgcHVibGljIGNvbnRleHRBbmFseXplcjogQ29udGV4dEFuYWx5emVyO1xuICBwcml2YXRlIG1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwgPSA2MDAwMDA7IC8vIFRvdXRlcyBsZXMgMTAgbWludXRlc1xuXG4gIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2VyIGltbWVkaWF0ZWx5IChubyBuZWVkIHRvIHdhaXQgZm9yIG9uTGF5b3V0UmVhZHkpXG4gICAgdGhpcy5yZXNldFBhcnNlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzbWFydCBzdWdnZXN0aW9uIG1hbmFnZXJzXG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlciA9IG5ldyBIaXN0b3J5TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbnRleHRBbmFseXplciA9IG5ldyBDb250ZXh0QW5hbHl6ZXIodGhpcy5hcHAsIHRoaXMpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaGlzdG9yeSBhc3luY2hyb25vdXNseVxuICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuaW5pdGlhbGl6ZSgpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGluaXRpYWxpemluZyBoaXN0b3J5XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXNcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSBkYXRlXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwicmVwbGFjZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXMtbGlua1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIGxpbmspXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwibGlua1wiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZS1jbGVhblwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIHBsYWluIHRleHQpXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwiY2xlYW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBhcnNlLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwidGltZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtbm93XCIsXG4gICAgICBuYW1lOiBcIkluc2VydCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0Tm93Q29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdG9kYXlcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50VGltZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBpY2tlclwiLFxuICAgICAgbmFtZTogXCJEYXRlIHBpY2tlclwiLFxuICAgICAgY2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChjaGVja2luZykge1xuICAgICAgICAgIHJldHVybiAhIWdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBEYXRlUGlja2VyTW9kYWwodGhpcy5hcHAsIHRoaXMpLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE5MRFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gICAgdGhpcy5yZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKFwibmxkYXRlc1wiLCBwYXJhbXMgPT4gdGhpcy5hY3Rpb25IYW5kbGVyKHBhcmFtcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KG5ldyBEYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgLy8gRMOpbWFycmVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0YXJ0TWVtb3J5TW9uaXRvcmluZygpO1xuICB9XG5cbiAgcmVzZXRQYXJzZXIoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcih0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJQYXJzZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIsIHsgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcGFyc2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgTkxEUGFyc2VFcnJvciBcbiAgICAgICAgPyBlcnJvciBcbiAgICAgICAgOiBuZXcgTkxEUGFyc2VFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLFxuICAgICAgICAgICAgRXJyb3JDb2Rlcy5QQVJTRVJfSU5JVF9GQUlMRUQsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgeyBvcmlnaW5hbEVycm9yOiBlcnJvciwgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9XG4gICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlRXJyb3IuY29kZSxcbiAgICAgICAgZXJyb3I6IHBhcnNlRXJyb3IubWVzc2FnZSxcbiAgICAgICAgY29udGV4dDogcGFyc2VFcnJvci5jb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwYXJzZXIgd2l0aCBFbmdsaXNoIGFzIGRlZmF1bHQgaW4gY2FzZSBvZiBlcnJvciB0byBwcmV2ZW50IHBsdWdpbiBmcm9tIGNyYXNoaW5nIGNvbXBsZXRlbHlcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJ10pO1xuICAgICAgICBsb2dnZXIuaW5mbygnUGFyc2VyIGluaXRpYWxpemVkIHdpdGggRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90aWZpZXIgbCd1dGlsaXNhdGV1ciB1bmlxdWVtZW50IHBvdXIgbGVzIGVycmV1cnMgY3JpdGlxdWVzXG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdpdGggc2VsZWN0ZWQgbGFuZ3VhZ2VzLiBVc2luZyBFbmdsaXNoIGFzIGZhbGxiYWNrLicsXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciBldmVuIHdpdGggRW5nbGlzaCBmYWxsYmFjaycsIHsgZXJyb3I6IGZhbGxiYWNrRXJyb3IgfSk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IENyaXRpY2FsIGVycm9yIC0gcGFyc2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gUGxlYXNlIHJlc3RhcnQgT2JzaWRpYW4uJyxcbiAgICAgICAgICAxMDAwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBjb250ZXh0IHBhdHRlcm5zIHdoZW4gbGFuZ3VhZ2VzIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIucmVzZXRQYXR0ZXJucygpO1xuICAgIH1cbiAgfVxuXG4gIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIEFycsOqdGVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0b3BNZW1vcnlNb25pdG9yaW5nKCk7XG4gICAgXG4gICAgLy8gTmV0dG95ZXIgbGVzIHJlc3NvdXJjZXNcbiAgICBpZiAodGhpcy5jb250ZXh0QW5hbHl6ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dEFuYWx5emVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBtb25pdG9yaW5nIHDDqXJpb2RpcXVlIGRlIGwndXRpbGlzYXRpb24gbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIC8vIExvZ2dlciBsZXMgc3RhdGlzdGlxdWVzIHRvdXRlcyBsZXMgMTAgbWludXRlc1xuICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgICB9LCB0aGlzLk1FTU9SWV9NT05JVE9SSU5HX0lOVEVSVkFMKTtcbiAgICBcbiAgICAvLyBMb2dnZXIgaW1tw6lkaWF0ZW1lbnQgYXUgZMOpbWFycmFnZVxuICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RvcE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBsZXMgc3RhdGlzdGlxdWVzIGQndXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBsb2dNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IHtcbiAgICAgICAgcGFyc2luZ0NhY2hlPzogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9O1xuICAgICAgICBjb250ZXh0Q2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGhpc3Rvcnk/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICB9ID0ge307XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBwYXJzaW5nXG4gICAgICBpZiAodGhpcy5wYXJzZXIpIHtcbiAgICAgICAgc3RhdHMucGFyc2luZ0NhY2hlID0gdGhpcy5wYXJzZXIuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgY29udGV4dGVcbiAgICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgICBzdGF0cy5jb250ZXh0Q2FjaGUgPSB0aGlzLmNvbnRleHRBbmFseXplci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZ2V0SGlzdG9yeSgpLnRoZW4oaGlzdG9yeSA9PiB7XG4gICAgICAgICAgc3RhdHMuaGlzdG9yeSA9IHtcbiAgICAgICAgICAgIHNpemU6IE9iamVjdC5rZXlzKGhpc3RvcnkpLmxlbmd0aCxcbiAgICAgICAgICAgIG1heFNpemU6IDEwMCwgLy8gTUFYX0hJU1RPUllfU0laRVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH0pLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICAgIC8vIExvZ2dlciBxdWFuZCBtw6ptZSBsZXMgYXV0cmVzIHN0YXRpc3RpcXVlc1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlV0aWxpc2F0aW9uIG3DqW1vaXJlIGRlcyBjYWNoZXNcIiwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRXJyZXVyIGxvcnMgZHUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWREYXRhID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpIGFzIFBhcnRpYWw8TkxEU2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGxhbmd1YWdlcyBpcyBub3QgZW1wdHkgKHVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB8fCB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzID0gWy4uLkRFRkFVTFRfU0VUVElOR1MubGFuZ3VhZ2VzXTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3luY2hyb25pemUgZmxhZ3Mgd2l0aCBsYW5ndWFnZXMgYXJyYXkgaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zeW5jTGFuZ3VhZ2VGbGFncygpO1xuICB9XG5cbiAgLy8gU3luY2hyb25pemVzIGxhbmd1YWdlIGZsYWdzIChlbmdsaXNoLCBmcmVuY2gsIGV0Yy4pIHdpdGggbGFuZ3VhZ2VzIGFycmF5XG4gIHByaXZhdGUgc3luY0xhbmd1YWdlRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IHsgW2tleTogc3RyaW5nXToga2V5b2YgTkxEU2V0dGluZ3MgfSA9IHtcbiAgICAgICdlbic6ICdlbmdsaXNoJyxcbiAgICAgICdqYSc6ICdqYXBhbmVzZScsXG4gICAgICAnZnInOiAnZnJlbmNoJyxcbiAgICAgICdkZSc6ICdnZXJtYW4nLFxuICAgICAgJ3B0JzogJ3BvcnR1Z3Vlc2UnLFxuICAgICAgJ25sJzogJ2R1dGNoJyxcbiAgICAgICdlcyc6ICdzcGFuaXNoJyxcbiAgICAgICdpdCc6ICdpdGFsaWFuJyxcbiAgICAgICdydSc6ICdydXNzaWFuJyxcbiAgICAgICd1ayc6ICd1a3JhaW5pYW4nLFxuICAgICAgJ3poLmhhbnQnOiAnY2hpbmVzZScsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZXNldCBhbGwgZmxhZ3NcbiAgICB0aGlzLnNldHRpbmdzLmVuZ2xpc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmphcGFuZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5mcmVuY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmdlcm1hbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydHVndWVzZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZHV0Y2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnNwYW5pc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLml0YWxpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnJ1c3NpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnVrcmFpbmlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuY2hpbmVzZSA9IGZhbHNlO1xuICAgIFxuICAgIC8vIEVuYWJsZSBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGxhbmd1YWdlcyBpbiBhcnJheVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgZmxhZ0tleSA9IGxhbmd1YWdlTWFwW2xhbmddO1xuICAgICAgaWYgKGZsYWdLZXkpIHtcbiAgICAgICAgKHRoaXMuc2V0dGluZ3NbZmxhZ0tleV0gYXMgYm9vbGVhbikgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBcbiAgICogVGhpcyBpcyB0aGUgY29yZSBwYXJzaW5nIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBjdXN0b20gZm9ybWF0IHN0cmluZy5cbiAgICogVGhlIGlucHV0IGlzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkIGJlZm9yZSBwYXJzaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gZm9ybWF0IC0gTW9tZW50LmpzIGZvcm1hdCBzdHJpbmcgKGUuZy4sIFwiWVlZWS1NTS1ERFwiLCBcIkREL01NL1lZWVlcIiwgXCJNTU1NIERvLCBZWVlZXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZywgRGF0ZSBvYmplY3QsIGFuZCBNb21lbnQgb2JqZWN0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZShcInRvbW9ycm93XCIsIFwiWVlZWS1NTS1ERFwiKTtcbiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNlwiXG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQyID0gcGx1Z2luLnBhcnNlKFwibmV4dCBNb25kYXlcIiwgXCJkZGRkLCBNTU1NIERvXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiTW9uZGF5LCBKYW51YXJ5IDZ0aFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2UoZGF0ZVN0cmluZzogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgLy8gUGFyc2VyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0KTtcbiAgICBpZiAoIWZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBmb3JtYXQgaW4gcGFyc2UoKVwiLCB7IGZvcm1hdCwgZXJyb3I6IGZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXQgZW4gY2FzIGQnZXJyZXVyXG4gICAgICBmb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2UoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICAvLyBSZXRvdXJuZXIgdW5lIGRhdGUgaW52YWxpZGUgcGx1dMO0dCBxdWUgZGUgcGxhbnRlclxuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkRGF0ZShzYW5pdGl6ZWRJbnB1dCwgdGhpcy5zZXR0aW5ncy53ZWVrU3RhcnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gICAgaWYgKGZvcm1hdHRlZFN0cmluZyA9PT0gXCJJbnZhbGlkIGRhdGVcIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiSW5wdXQgZGF0ZSBjYW4ndCBiZSBwYXJzZWQgYnkgbmxkYXRlc1wiLCB7IGRhdGVTdHJpbmc6IHNhbml0aXplZElucHV0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXR0ZWRTdHJpbmcsXG4gICAgICBkYXRlLFxuICAgICAgbW9tZW50OiBtb21lbnQoZGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGRhdGUgZm9ybWF0LlxuICAgKiBcbiAgICogQXV0b21hdGljYWxseSBkZXRlY3RzIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgb3V0cHV0LlxuICAgKiBVc2VzIHRoZSBmb3JtYXQgZnJvbSBwbHVnaW4gc2V0dGluZ3MgKGRlZmF1bHQ6IFwiWVlZWS1NTS1ERFwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyAoZS5nLiwgXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwibmV4dCBNb25kYXkgYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIElmIHNldHRpbmdzLmZvcm1hdCBpcyBcIllZWVktTU0tRERcIiBhbmQgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlRGF0ZShcInRvbW9ycm93XCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VEYXRlKFwibmV4dCBNb25kYXkgYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNiAxNTowMFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgLy8gVmFsaWRlciBldCBzYW5pdGl6ZXIgbCdlbnRyw6llIHV0aWxpc2F0ZXVyXG4gICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB2YWxpZGF0ZVVyaVBhcmFtKGRhdGVTdHJpbmcsIDIwMCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRJbnB1dCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGlucHV0IGluIHBhcnNlRGF0ZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIGNvbnN0IGludmFsaWREYXRlID0gbmV3IERhdGUoTmFOKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZzogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgZGF0ZTogaW52YWxpZERhdGUsXG4gICAgICAgIG1vbWVudDogbW9tZW50KGludmFsaWREYXRlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgZGF0ZVxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBkYXRlIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy5mb3JtYXQsIGVycm9yOiBkYXRlRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dFxuICAgICAgdGhpcy5zZXR0aW5ncy5mb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyAxLiBBc2sgdGhlIHBhcnNlciBpZiB0aW1lIGlzIGRldGVjdGVkXG4gICAgY29uc3QgaGFzVGltZSA9IHRoaXMucGFyc2VyLmhhc1RpbWVDb21wb25lbnQoc2FuaXRpemVkSW5wdXQpO1xuICAgIGxldCBmb3JtYXRUb1VzZSA9IHRoaXMuc2V0dGluZ3MuZm9ybWF0O1xuXG4gICAgLy8gMi4gSWYgdGltZSBpcyBkZXRlY3RlZC4uLlxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIjtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgdGVtcHNcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGltZUZvcm1hdCk7XG4gICAgICBpZiAoIXRpbWVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGltZUZvcm1hdCwgZXJyb3I6IHRpbWVGb3JtYXRWYWxpZGF0aW9uLmVycm9yIH0pO1xuICAgICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHt0aGlzLnNldHRpbmdzLmZvcm1hdH0gJHtERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRJUDogSGVyZSB3ZSBmb3JtYXQgXCJEYXRlIFRJTUUuXCJcbiAgICAgICAgLy8gQnV0IEJFV0FSRTogaXQgaXMgdGhlIFwiZGF0ZS1zdWdnZXN0LnRzXCIgZmlsZSB0aGF0IHdpbGwgYWRkIHRoZSBbWyBdXS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdG91Y2ggZGF0ZS1zdWdnZXN0LCBpdCB3aWxsIG1ha2UgW1tEYXRlIFRpbWVdXS5cbiAgICAgICAgLy8gVG8gbWFrZSBbW0RhdGVdXSBUaW1lLCB3ZSBoYXZlIHRvIGJlIGNsZXZlci5cbiAgICAgICAgXG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7Zm9ybWF0VG9Vc2V9ICR7dGltZUZvcm1hdH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2Uoc2FuaXRpemVkSW5wdXQsIGZvcm1hdFRvVXNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsImtvIiwibm9ybWFsaXplUGF0aCIsImdldERhaWx5Tm90ZSIsImdldEFsbERhaWx5Tm90ZXMiLCJjcmVhdGVEYWlseU5vdGUiLCJleHRyYWN0VGVybXMiLCJtYXRjaEFueVBhdHRlcm4iLCJPUkRJTkFMX1dPUkRfRElDVElPTkFSWSIsIk9SRElOQUxfTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwiTWFya2Rvd25WaWV3IiwiTW9kYWwiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIldFRUtEQVlfRElDVElPTkFSWSIsIkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZIiwiTU9OVEhfRElDVElPTkFSWSIsIklOVEVHRVJfV09SRF9ESUNUSU9OQVJZIiwiVElNRV9VTklUX0RJQ1RJT05BUlkiLCJOVU1CRVJfUEFUVEVSTiIsInBhcnNlTnVtYmVyUGF0dGVybiIsIllFQVJfUEFUVEVSTiIsInBhcnNlWWVhciIsIlNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiIsIlNJTkdMRV9USU1FX1VOSVRfUkVHRVgiLCJTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTiIsIlRJTUVfVU5JVFNfUEFUVEVSTiIsIlRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIiwicGFyc2VEdXJhdGlvbiIsImNvbGxlY3REYXRlVGltZUZyYWdtZW50IiwiUEFUVEVSTl9XSVRIX1BSRUZJWCIsIkVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIiLCJQQVRURVJOIiwiREFURV9HUk9VUCIsIkRBVEVfVE9fR1JPVVAiLCJNT05USF9OQU1FX0dST1VQIiwiWUVBUl9HUk9VUCIsIkVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIiwiRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIiLCJQUkVGSVhfR1JPVVAiLCJFTk1vbnRoTmFtZVBhcnNlciIsIllFQVJfTlVNQkVSX0dST1VQIiwiTU9OVEhfTlVNQkVSX0dST1VQIiwiREFURV9OVU1CRVJfR1JPVVAiLCJNT05USF9HUk9VUCIsIkVOU2xhc2hNb250aEZvcm1hdFBhcnNlciIsIkhPVVJfR1JPVVAiLCJNSU5VVEVfR1JPVVAiLCJTRUNPTkRfR1JPVVAiLCJBTV9QTV9IT1VSX0dST1VQIiwiRU5UaW1lRXhwcmVzc2lvblBhcnNlciIsIlNUUklDVF9QQVRURVJOIiwiRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkdST1VQX05VTV9USU1FVU5JVFMiLCJFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIiLCJFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciIsIkVOTWVyZ2VEYXRlVGltZVJlZmluZXIiLCJkYXRlcy5pbXBseVNpbWlsYXJEYXRlIiwicmVmZXJlbmNlcy5ub3ciLCJyZWZlcmVuY2VzLnRvZGF5IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXkiLCJyZWZlcmVuY2VzLnRvbW9ycm93IiwicmVmZXJlbmNlcy50b25pZ2h0IiwicmVmZXJlbmNlcy50aGVEYXlBZnRlciIsImNhc3VhbFJlZmVyZW5jZXMuYWZ0ZXJub29uIiwiY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nIiwiY2FzdWFsUmVmZXJlbmNlcy5taWRuaWdodCIsImNhc3VhbFJlZmVyZW5jZXMubW9ybmluZyIsImNhc3VhbFJlZmVyZW5jZXMubm9vbiIsIldFRUtEQVlfR1JPVVAiLCJQT1NURklYX0dST1VQIiwiTU9ESUZJRVJfV09SRF9HUk9VUCIsIlJFTEFUSVZFX1dPUkRfR1JPVVAiLCJQQVRURVJOX05PX0FCQlIiLCJFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUiLCJoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlIiwiY2FzdWFsIiwic3RyaWN0IiwiR0IiLCJwYXJzZSIsInBhcnNlRGF0ZSIsIlNVRkZJWF9HUk9VUCIsIkZJUlNUX1JFR19QQVRURVJOIiwiU0VDT05EX1JFR19QQVRURVJOIiwiVElNRV9HUk9VUCIsImNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24iLCJjcmVhdGVDb25maWd1cmF0aW9uIiwiREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIk5VTUJFUiIsIldFRUtEQVlfT0ZGU0VUIiwiREFZX0dST1VQIiwiemhTdHJpbmdUb051bWJlciIsInpoU3RyaW5nVG9ZZWFyIiwiTlVNQkVSX0dST1VQIiwiVU5JVF9HUk9VUCIsIkRBWV9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8yIiwiREFZX0dST1VQXzMiLCJaSF9BTV9QTV9IT1VSX0dST1VQXzMiLCJOT1dfR1JPVVAiLCJUSU1FX0dST1VQXzEiLCJUSU1FX0dST1VQXzIiLCJUSU1FX0dST1VQXzMiLCJSRUdFWF9QQVJUUyIsInllYXIiLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyIsIkFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmciLCJyZWZlcmVuY2VzLnRoZURheUJlZm9yZSIsInJlZmVyZW5jZXMuZXZlbmluZyIsInJlZmVyZW5jZXMubW9ybmluZyIsInJlZmVyZW5jZXMubm9vbiIsInJlZmVyZW5jZXMubGFzdE5pZ2h0IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nIiwicmVmZXJlbmNlcy5taWRuaWdodCIsIkVOQ2FzdWFsRGF0ZVBhcnNlciIsIkVOQ2FzdWFsVGltZVBhcnNlciIsIkVOV2Vla2RheVBhcnNlciIsIlRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkiLCJlbi5zdHJpY3QiLCJlbi5jYXN1YWwiLCJjaHJvbm8uZW4iLCJFZGl0b3JTdWdnZXN0IiwiQ0xF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QyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDMUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNoRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzdDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUMvQyxDQUFDLEVBQUUsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQzs7QUM1QmxCLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUNNLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFF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QUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztB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QUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNELFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xELFlBQVksUUFBUSxDQUFDLEtBQUssSUFB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UUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQs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SUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsQ0FBQyxDQUFDO0FBQ0ssTUFB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S0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssY0FBYztBQUMvQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGNBQWM7QUFDL0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFD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LENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFdBQVc7QUFDNUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxZQUFZO0FBQzdCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGVBQWU7QUFDaEMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FB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QUFDLENBQUM7S0FDSjs7SUFHTyxlQUFlLEdBQUE7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUkzQyxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkcsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pDLFlBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxF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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcva28udHMiLCJzcmMvbGFuZy9oZWxwZXIudHMiLCJzcmMvdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbW9kYWxzL2RhdGUtcGlja2VyLnRzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3RpbWV6b25lLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3Jlc3VsdHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vdXRpbHMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi95ZWFycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24vd2Vla2RheXMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbmZpZ3VyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jaHJvbm8uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9yZWZpbmVycy9OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9yZWZpbmVycy9FU01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSUNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3JlZmluZXJzL1ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9pbmRleC5qcyIsInNyYy9sb2dnZXIudHMiLCJzcmMvY2hyb25vLnRzIiwic3JjL3RpbWUtZGV0ZWN0b3IudHMiLCJzcmMvbHJ1LWNhY2hlLnRzIiwic3JjL3BhcnNlci50cyIsInNyYy9zdWdnZXN0L2RhdGUtc3VnZ2VzdC50cyIsInNyYy9jb21tYW5kcy50cyIsInNyYy9oaXN0b3J5LW1hbmFnZXIudHMiLCJzcmMvY29udGV4dC1hbmFseXplci50cyIsInNyYy9lcnJvcnMudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBvYnNpZGlhbiA9IHJlcXVpcmUoJ29ic2lkaWFuJyk7XG5cbmNvbnN0IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU0tRERcIjtcbmNvbnN0IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gXCJnZ2dnLVtXXXd3XCI7XG5jb25zdCBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU1cIjtcbmNvbnN0IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gXCJZWVlZLVtRXVFcIjtcbmNvbnN0IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gXCJZWVlZXCI7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhwZXJpb2RpY2l0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IHdpbmRvdy5hcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5bcGVyaW9kaWNpdHldPy5lbmFibGVkO1xufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYGRhaWx5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXREYWlseU5vdGVTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGludGVybmFsUGx1Z2lucywgcGx1Z2lucyB9ID0gd2luZG93LmFwcDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcImRhaWx5XCIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZm9sZGVyLCB0ZW1wbGF0ZSB9ID0gcGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LmRhaWx5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZvbGRlciwgZm9ybWF0LCB0ZW1wbGF0ZSB9ID0gaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoXCJkYWlseS1ub3Rlc1wiKT8uaW5zdGFuY2U/Lm9wdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBmb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gZGFpbHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgd2Vla2x5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIik/Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBlcmlvZGljTm90ZXNTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy53ZWVrbHk7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ3ZWVrbHlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwZXJpb2RpY05vdGVzU2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gY2FsZW5kYXJTZXR0aW5ncyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3Mud2Vla2x5Tm90ZVRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gd2Vla2x5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJtb250aGx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ubW9udGhseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gbW9udGhseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJxdWFydGVybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5xdWFydGVybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gcXVhcnRlcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRZZWFybHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VyID0gd2luZG93LmFwcC5wbHVnaW5zO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcInllYXJseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LnllYXJseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIk5vIGN1c3RvbSB5ZWFybHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG5cbi8vIENyZWRpdDogQGNyZWF0aW9uaXgvcGF0aC5qc1xuZnVuY3Rpb24gam9pbiguLi5wYXJ0U2VnbWVudHMpIHtcbiAgICAvLyBTcGxpdCB0aGUgaW5wdXRzIGludG8gYSBsaXN0IG9mIHBhdGggY29tbWFuZHMuXG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0U2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHBhcnRTZWdtZW50c1tpXS5zcGxpdChcIi9cIikpO1xuICAgIH1cbiAgICAvLyBJbnRlcnByZXQgdGhlIHBhdGggY29tbWFuZHMgdG8gZ2V0IHRoZSBuZXcgcmVzb2x2ZWQgcGF0aC5cbiAgICBjb25zdCBuZXdQYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLy8gQWxzbyByZW1vdmUgXCIuXCIgc2VnbWVudHNcbiAgICAgICAgaWYgKCFwYXJ0IHx8IHBhcnQgPT09IFwiLlwiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIFB1c2ggbmV3IHBhdGggc2VnbWVudHMuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld1BhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIHRoZSBpbml0aWFsIHNsYXNoIGlmIHRoZXJlIHdhcyBvbmUuXG4gICAgaWYgKHBhcnRzWzBdID09PSBcIlwiKVxuICAgICAgICBuZXdQYXJ0cy51bnNoaWZ0KFwiXCIpO1xuICAgIC8vIFR1cm4gYmFjayBpbnRvIGEgc2luZ2xlIHN0cmluZyBwYXRoLlxuICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiL1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2VuYW1lKGZ1bGxQYXRoKSB7XG4gICAgbGV0IGJhc2UgPSBmdWxsUGF0aC5zdWJzdHJpbmcoZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKGJhc2UubGFzdEluZGV4T2YoXCIuXCIpICE9IC0xKVxuICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgIHJldHVybiBiYXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGgpIHtcbiAgICBjb25zdCBkaXJzID0gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gICAgZGlycy5wb3AoKTsgLy8gcmVtb3ZlIGJhc2VuYW1lXG4gICAgaWYgKGRpcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGpvaW4oLi4uZGlycyk7XG4gICAgICAgIGlmICghd2luZG93LmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZGlyKSkge1xuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZGlyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGdldE5vdGVQYXRoKGRpcmVjdG9yeSwgZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgIGZpbGVuYW1lICs9IFwiLm1kXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpO1xuICAgIGF3YWl0IGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKTtcbiAgICByZXR1cm4gcGF0aDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHsgbWV0YWRhdGFDYWNoZSwgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aCh0ZW1wbGF0ZSk7XG4gICAgaWYgKHRlbXBsYXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXCJcIiwgbnVsbF0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBtZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHRlbXBsYXRlUGF0aCwgXCJcIik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdmF1bHQuY2FjaGVkUmVhZCh0ZW1wbGF0ZUZpbGUpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBJRm9sZEluZm8gPSB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLmxvYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgcmV0dXJuIFtjb250ZW50cywgSUZvbGRJbmZvXTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZVBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFtcIlwiLCBudWxsXTtcbiAgICB9XG59XG5cbi8qKlxuICogZGF0ZVVJRCBpcyBhIHdheSBvZiB3ZWVrbHkgaWRlbnRpZnlpbmcgZGFpbHkvd2Vla2x5L21vbnRobHkgbm90ZXMuXG4gKiBUaGV5IGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFudWxhcml0eSB0byBhdm9pZCBhbWJpZ3VpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGVVSUQoZGF0ZSwgZ3JhbnVsYXJpdHkgPSBcImRheVwiKSB7XG4gICAgY29uc3QgdHMgPSBkYXRlLmNsb25lKCkuc3RhcnRPZihncmFudWxhcml0eSkuZm9ybWF0KCk7XG4gICAgcmV0dXJuIGAke2dyYW51bGFyaXR5fS0ke3RzfWA7XG59XG5mdW5jdGlvbiByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcW1teXFxdXSpcXF0vZywgXCJcIik7IC8vIHJlbW92ZSBldmVyeXRoaW5nIHdpdGhpbiBicmFja2V0c1xufVxuLyoqXG4gKiBYWFg6IFdoZW4gcGFyc2luZyBkYXRlcyB0aGF0IGNvbnRhaW4gYm90aCB3ZWVrIG51bWJlcnMgYW5kIG1vbnRocyxcbiAqIE1vbWVudCBjaG9zZXMgdG8gaWdub3JlIHRoZSB3ZWVrIG51bWJlcnMuIEZvciB0aGUgd2VlayBkYXRlVUlELCB3ZVxuICogd2FudCB0aGUgb3Bwb3NpdGUgYmVoYXZpb3IuIFN0cmlwIHRoZSBNTU0gZnJvbSB0aGUgZm9ybWF0IHRvIHBhdGNoLlxuICovXG5mdW5jdGlvbiBpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSB7XG4gICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpICYmXG4gICAgICAgICAgICAoL017MSw0fS8udGVzdChjbGVhbkZvcm1hdCkgfHwgL0R7MSw0fS8udGVzdChjbGVhbkZvcm1hdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21GaWxlKGZpbGUsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZS5iYXNlbmFtZSwgZ3JhbnVsYXJpdHkpO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21QYXRoKHBhdGgsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoYmFzZW5hbWUocGF0aCksIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUsIGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH07XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0U2V0dGluZ3NbZ3JhbnVsYXJpdHldKCkuZm9ybWF0LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBjb25zdCBub3RlRGF0ZSA9IHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgaWYgKCFub3RlRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIFxuICAgICAgICAgICAgICAgIC8vIElmIGZvcm1hdCBjb250YWlucyB3ZWVrLCByZW1vdmUgZGF5ICYgbW9udGggZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC9NezEsNH0vZywgXCJcIikucmVwbGFjZSgvRHsxLDR9L2csIFwiXCIpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdGVEYXRlO1xufVxuXG5jbGFzcyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWlseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xuICAgIGNvbnN0IG1vbWVudCA9IHdpbmRvdy5tb21lbnQ7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgbW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqeWVzdGVyZGF5XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KGZvcm1hdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdG9tb3Jyb3dcXHMqfX0vZ2ksIGRhdGUuY2xvbmUoKS5hZGQoMSwgXCJkXCIpLmZvcm1hdChmb3JtYXQpKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERhaWx5Tm90ZShkYXRlLCBkYWlseU5vdGVzKSB7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbERhaWx5Tm90ZXMoKSB7XG4gICAgLyoqXG4gICAgICogRmluZCBhbGwgZGFpbHkgbm90ZXMgaW4gdGhlIGRhaWx5IG5vdGUgZm9sZGVyXG4gICAgICovXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBkYWlseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFkYWlseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgZGFpbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYWlseU5vdGVzID0ge307XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKGRhaWx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJkYXlcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRhaWx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXM7XG59XG5cbmNsYXNzIFdlZWtseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlaygpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IHdlZWtTdGFydCA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWsuZG93O1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXG4gICAgICAgIFwic3VuZGF5XCIsXG4gICAgICAgIFwibW9uZGF5XCIsXG4gICAgICAgIFwidHVlc2RheVwiLFxuICAgICAgICBcIndlZG5lc2RheVwiLFxuICAgICAgICBcInRodXJzZGF5XCIsXG4gICAgICAgIFwiZnJpZGF5XCIsXG4gICAgICAgIFwic2F0dXJkYXlcIixcbiAgICBdO1xuICAgIHdoaWxlICh3ZWVrU3RhcnQpIHtcbiAgICAgICAgZGF5c09mV2Vlay5wdXNoKGRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgIHdlZWtTdGFydC0tO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c09mV2Vlaztcbn1cbmZ1bmN0aW9uIGdldERheU9mV2Vla051bWVyaWNhbFZhbHVlKGRheU9mV2Vla05hbWUpIHtcbiAgICByZXR1cm4gZ2V0RGF5c09mV2VlaygpLmluZGV4T2YoZGF5T2ZXZWVrTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlZWtseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KVxccyo6KC4qPyl9fS9naSwgKF8sIGRheU9mV2VlaywgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla2RheShkYXkpLmZvcm1hdChtb21lbnRGb3JtYXQudHJpbSgpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZShkYXRlLCB3ZWVrbHlOb3Rlcykge1xuICAgIHJldHVybiB3ZWVrbHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFdlZWtseU5vdGVzKCkge1xuICAgIGNvbnN0IHdlZWtseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB3ZWVrbHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3Qgd2Vla2x5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXdlZWtseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHdlZWtseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih3ZWVrbHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcIndlZWtcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICB3ZWVrbHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG59XG5cbmNsYXNzIE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9udGhseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZShkYXRlLCBtb250aGx5Tm90ZXMpIHtcbiAgICByZXR1cm4gbW9udGhseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vbnRobHlOb3RlcygpIHtcbiAgICBjb25zdCBtb250aGx5Tm90ZXMgPSB7fTtcbiAgICBpZiAoIWFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBtb250aGx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIW1vbnRobHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9udGhseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgbW9udGhseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihtb250aGx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aGx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlcztcbn1cblxuY2xhc3MgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVF1YXJ0ZXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGUoZGF0ZSwgcXVhcnRlcmx5KSB7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseVtnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFF1YXJ0ZXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IHt9O1xuICAgIGlmICghYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gcXVhcnRlcmx5O1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBxdWFydGVybHlGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXF1YXJ0ZXJseUZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBxdWFydGVybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4ocXVhcnRlcmx5Rm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJxdWFydGVyXCIpO1xuICAgICAgICAgICAgICAgIHF1YXJ0ZXJseVtkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVhcnRlcmx5O1xufVxuXG5jbGFzcyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlWWVhcmx5Tm90ZShkYXRlKSB7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IHRlbXBsYXRlLCBmb3JtYXQsIGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZShkYXRlLCB5ZWFybHlOb3Rlcykge1xuICAgIHJldHVybiB5ZWFybHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFllYXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHllYXJseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB5ZWFybHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgeWVhcmx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXllYXJseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHllYXJseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih5ZWFybHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInllYXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB5ZWFybHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG59XG5cbmZ1bmN0aW9uIGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRhaWx5Tm90ZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnNbXCJkYWlseS1ub3Rlc1wiXTtcbiAgICBpZiAoZGFpbHlOb3Rlc1BsdWdpbiAmJiBkYWlseU5vdGVzUGx1Z2luLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LmRhaWx5Py5lbmFibGVkO1xufVxuLyoqXG4gKiBYWFg6IFwiV2Vla2x5IE5vdGVzXCIgbGl2ZSBpbiBlaXRoZXIgdGhlIENhbGVuZGFyIHBsdWdpbiBvciB0aGUgcGVyaW9kaWMtbm90ZXMgcGx1Z2luLlxuICogQ2hlY2sgYm90aCB1bnRpbCB0aGUgd2Vla2x5IG5vdGVzIGZlYXR1cmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDYWxlbmRhciBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LndlZWtseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/Lm1vbnRobHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnF1YXJ0ZXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwZXJpb2RpY05vdGVzID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8ueWVhcmx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MoZ3JhbnVsYXJpdHkpIHtcbiAgICBjb25zdCBnZXRTZXR0aW5ncyA9IHtcbiAgICAgICAgZGF5OiBnZXREYWlseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgd2VlazogZ2V0V2Vla2x5Tm90ZVNldHRpbmdzLFxuICAgICAgICBtb250aDogZ2V0TW9udGhseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgcXVhcnRlcjogZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB5ZWFyOiBnZXRZZWFybHlOb3RlU2V0dGluZ3MsXG4gICAgfVtncmFudWxhcml0eV07XG4gICAgcmV0dXJuIGdldFNldHRpbmdzKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQZXJpb2RpY05vdGUoZ3JhbnVsYXJpdHksIGRhdGUpIHtcbiAgICBjb25zdCBjcmVhdGVGbiA9IHtcbiAgICAgICAgZGF5OiBjcmVhdGVEYWlseU5vdGUsXG4gICAgICAgIG1vbnRoOiBjcmVhdGVNb250aGx5Tm90ZSxcbiAgICAgICAgd2VlazogY3JlYXRlV2Vla2x5Tm90ZSxcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVGbltncmFudWxhcml0eV0oZGF0ZSk7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuYXBwSGFzRGFpbHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuY3JlYXRlRGFpbHlOb3RlID0gY3JlYXRlRGFpbHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVNb250aGx5Tm90ZSA9IGNyZWF0ZU1vbnRobHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVQZXJpb2RpY05vdGUgPSBjcmVhdGVQZXJpb2RpY05vdGU7XG5leHBvcnRzLmNyZWF0ZVF1YXJ0ZXJseU5vdGUgPSBjcmVhdGVRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVXZWVrbHlOb3RlID0gY3JlYXRlV2Vla2x5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlWWVhcmx5Tm90ZSA9IGNyZWF0ZVllYXJseU5vdGU7XG5leHBvcnRzLmdldEFsbERhaWx5Tm90ZXMgPSBnZXRBbGxEYWlseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxNb250aGx5Tm90ZXMgPSBnZXRBbGxNb250aGx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFF1YXJ0ZXJseU5vdGVzID0gZ2V0QWxsUXVhcnRlcmx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFdlZWtseU5vdGVzID0gZ2V0QWxsV2Vla2x5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFllYXJseU5vdGVzID0gZ2V0QWxsWWVhcmx5Tm90ZXM7XG5leHBvcnRzLmdldERhaWx5Tm90ZSA9IGdldERhaWx5Tm90ZTtcbmV4cG9ydHMuZ2V0RGFpbHlOb3RlU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0RGF0ZUZyb21GaWxlID0gZ2V0RGF0ZUZyb21GaWxlO1xuZXhwb3J0cy5nZXREYXRlRnJvbVBhdGggPSBnZXREYXRlRnJvbVBhdGg7XG5leHBvcnRzLmdldERhdGVVSUQgPSBnZXREYXRlVUlEO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZSA9IGdldE1vbnRobHlOb3RlO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZVNldHRpbmdzID0gZ2V0TW9udGhseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MgPSBnZXRQZXJpb2RpY05vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UXVhcnRlcmx5Tm90ZSA9IGdldFF1YXJ0ZXJseU5vdGU7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0VGVtcGxhdGVJbmZvID0gZ2V0VGVtcGxhdGVJbmZvO1xuZXhwb3J0cy5nZXRXZWVrbHlOb3RlID0gZ2V0V2Vla2x5Tm90ZTtcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZVNldHRpbmdzID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzO1xuZXhwb3J0cy5nZXRZZWFybHlOb3RlID0gZ2V0WWVhcmx5Tm90ZTtcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZVNldHRpbmdzID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzO1xuIiwiLy8gT2JzaWRpYW4gYnVuZGxlcyBtb21lbnQuanMgYW5kIGV4cG9zZXMgaXQgYXMgd2luZG93Lm1vbWVudCBhdCBydW50aW1lLlxuLy8gSXRzIHR5cGUgaXMgZGVjbGFyZWQgZ2xvYmFsbHkgdmlhIFwiZGVjbGFyZSBnbG9iYWxcIiBpbiB0eXBlcy5kLnRzLCB3aGljaFxuLy8gd29ya3MgZmluZSBmb3Igd2hvbGUtcHJvamVjdCB0eXBlLWNoZWNraW5nICh0aGlzIHByb2plY3QncyBvd24gdHNjb25maWcsXG4vLyB0ZXN0cywgYnVpbGQpIGJ1dCBub3QgZm9yIHRvb2xzIHRoYXQgdHlwZS1jaGVjayBmaWxlcyBpbiBpc29sYXRpb24gLS1cbi8vIHRob3NlIG5ldmVyIHNlZSB0aGUgYW1iaWVudCBhdWdtZW50YXRpb24gZnJvbSB0aGF0IHNlcGFyYXRlIGZpbGUsIHNvXG4vLyBldmVyeSB3aW5kb3cubW9tZW50IHVzYWdlIHNpbGVudGx5IHJlc29sdmVzIHRvIGBhbnlgIHRoZXJlLCBjYXNjYWRpbmdcbi8vIGludG8gdW5zYWZlLSogbGludCB3YXJuaW5ncyBvbiBldmVyeSBsaW5lIHRoYXQgdG91Y2hlcyBpdHMgcmV0dXJuIHZhbHVlLlxuLy9cbi8vIFJlLWV4cG9ydGluZyB0aHJvdWdoIGEgcmVhbCBFUyBpbXBvcnQgc2lkZXN0ZXBzIHRoYXQ6IGEgbW9kdWxlIGltcG9ydCdzXG4vLyB0eXBlIGlzIHJlc29sdmVkIGZyb20gdGhpcyBmaWxlJ3Mgb3duIGRlY2xhcmVkIHR5cGUgcmVnYXJkbGVzcyBvZiBhbWJpZW50XG4vLyBkZWNsYXJhdGlvbiB2aXNpYmlsaXR5IGVsc2V3aGVyZS5cbi8vXG4vLyBVc2VzIGEgUHJveHkgaW5zdGVhZCBvZiBjYXB0dXJpbmcgd2luZG93Lm1vbWVudCBkaXJlY3RseSBhdCBtb2R1bGUtbG9hZFxuLy8gdGltZSwgc28gbGF0ZXIgbXV0YXRpb25zIG9mIHdpbmRvdy5tb21lbnQgYXJlIHN0aWxsIHJlZmxlY3RlZCAtLSBzb21lXG4vLyB0ZXN0cyBpbnRlbnRpb25hbGx5IG1vbmtleS1wYXRjaCB3aW5kb3cubW9tZW50IG1pZC10ZXN0ICh0byBleGVyY2lzZVxuLy8gZXJyb3ItaGFuZGxpbmcgYnJhbmNoZXMgYXJvdW5kIGEgdGhyb3dpbmcgLmZvcm1hdCgpKSwgYW5kIGEgcGxhaW5cbi8vIGNhcHR1cmVkIHJlZmVyZW5jZSB3b3VsZCBrZWVwIHBvaW50aW5nIGF0IHRoZSBwcmUtbW9jayBmdW5jdGlvbi5cbmNvbnN0IG1vbWVudDogdHlwZW9mIGltcG9ydChcIm1vbWVudFwiKSA9IG5ldyBQcm94eShcbiAgKCgpOiB1bmRlZmluZWQgPT4gdW5kZWZpbmVkKSBhcyB1bmtub3duIGFzIHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIiksXG4gIHtcbiAgICBhcHBseTogKF90YXJnZXQsIHRoaXNBcmcsIGFyZ3M6IHVua25vd25bXSkgPT5cbiAgICAgIFJlZmxlY3QuYXBwbHkod2luZG93Lm1vbWVudCBhcyB1bmtub3duIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24sIHRoaXNBcmcsIGFyZ3MpLFxuICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biA9PiBSZWZsZWN0LmdldCh3aW5kb3cubW9tZW50LCBwcm9wLCByZWNlaXZlciksXG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudDtcbiIsIi8qKlxuICogTW9kdWxlIHBvdXIgbGUgZm9ybWF0YWdlIGRlIGRhdGVzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vKipcbiAqIENsYXNzZSBwb3VyIGZvcm1hdGVyIGRlcyBkYXRlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIHNlbG9uIGxlIGZvcm1hdCBzcMOpY2lmacOpXG4gICAqIEBwYXJhbSBkYXRlIExhIGRhdGUgw6AgZm9ybWF0ZXJcbiAgICogQHBhcmFtIGZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZSAoZm9ybWF0IE1vbWVudC5qcylcbiAgICogQHJldHVybnMgTGEgZGF0ZSBmb3JtYXTDqWUgZW4gc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdGUgdW5lIGRhdGUgYXZlYyBoZXVyZVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IExlIGZvcm1hdCBkZSBkYXRlXG4gICAqIEBwYXJhbSB0aW1lRm9ybWF0IExlIGZvcm1hdCBkJ2hldXJlXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgTGUgc8OpcGFyYXRldXIgZW50cmUgZGF0ZSBldCBoZXVyZSAoZMOpZmF1dDogXCIgXCIpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGF2ZWMgbCdoZXVyZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFdpdGhUaW1lKFxuICAgIGRhdGU6IERhdGUsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIHRpbWVGb3JtYXQ6IHN0cmluZyxcbiAgICBzZXBhcmF0b3IgPSBcIiBcIlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgdGltZUZvcm1hdCk7XG4gICAgcmV0dXJuIGAke2RhdGVTdHJ9JHtzZXBhcmF0b3J9JHt0aW1lU3RyfWA7XG4gIH1cbn1cblxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjYuMlxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9O1xuXG4gIChmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgcmV0dXJuIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiAhPT0gbnVsbCA/IHNlbGYgOiB0aGlzKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIFRyYW5zbGF0b3IsIGkxOG4sIHRyYW5zbGF0b3I7XG5cbiAgICBUcmFuc2xhdG9yID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gVHJhbnNsYXRvcigpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSBfX2JpbmQodGhpcy50cmFuc2xhdGUsIHRoaXMpOyAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0LCBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nLCBudW1PckZvcm1hdHRpbmdPckNvbnRleHQsIGZvcm1hdHRpbmdPckNvbnRleHQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRUZXh0LCBmb3JtYXR0aW5nLCBpc09iamVjdCwgbnVtO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgdmFyIHR5cGU7XG5cbiAgICAgICAgICB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGUgPT09IFwib2JqZWN0XCIgJiYgISFvYmo7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc09iamVjdChkZWZhdWx0TnVtT3JGb3JtYXR0aW5nKSkge1xuICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICBudW0gPSBudWxsO1xuICAgICAgICAgIGZvcm1hdHRpbmcgPSBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nO1xuICAgICAgICAgIGNvbnRleHQgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdE51bU9yRm9ybWF0dGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVmYXVsdFRleHQgPSBudWxsO1xuICAgICAgICAgICAgbnVtID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0ID0gZm9ybWF0dGluZ09yQ29udGV4dCB8fCB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IGZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodGV4dCkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodGV4dFsnaTE4biddKSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRbJ2kxOG4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSGFzaCh0ZXh0LCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0KHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBjLCBrLCB2LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuXG4gICAgICAgIGlmICgoZC52YWx1ZXMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmID0gZC52YWx1ZXM7XG4gICAgICAgICAgZm9yIChrIGluIF9yZWYpIHtcbiAgICAgICAgICAgIHYgPSBfcmVmW2tdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnZhbHVlc1trXSA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoZC5jb250ZXh0cyAhPSBudWxsKSkge1xuICAgICAgICAgIF9yZWYxID0gZC5jb250ZXh0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIGMgPSBfcmVmMVtfaV07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGF0YS5jb250ZXh0cy5wdXNoKGMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb24gPSBleHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jbGVhckNvbnRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0Q29udGV4dCgpO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUucmVzZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdmFsdWVzOiB7fSxcbiAgICAgICAgICBjb250ZXh0czogW11cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0ID0ge307XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVIYXNoID0gZnVuY3Rpb24oaGFzaCwgY29udGV4dCkge1xuICAgICAgICB2YXIgaywgdjtcblxuICAgICAgICBmb3IgKGsgaW4gaGFzaCkge1xuICAgICAgICAgIHYgPSBoYXNoW2tdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaGFzaFtrXSA9IHRoaXMudHJhbnNsYXRlVGV4dCh2LCBudWxsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0LCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGV4dERhdGEsIHJlc3VsdDtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0RGF0YSA9IHRoaXMuZ2V0Q29udGV4dERhdGEodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNvbnRleHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHREYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZFRyYW5zbGF0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgdGhpcy5kYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5maW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGRhdGEsIGRlZmF1bHRUZXh0KSB7XG4gICAgICAgIHZhciBhLCBiLCBjLCBkLCBlLCByZXN1bHQsIHRyaXBsZSwgdmFsdWUsIF9pLCBfbGVuO1xuXG4gICAgICAgIHZhbHVlID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbiAmJiB0eXBlb2YgdGhpcy5leHRlbnNpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmV4dGVuc2lvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hcHBseU51bWJlcnModmFsdWUsIG51bSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG51bSA9PSBudWxsKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYSA9IG51bSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gdmFsdWUubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgdHJpcGxlID0gdmFsdWVbX2ldO1xuICAgICAgICAgICAgICBiID0gdHJpcGxlWzBdID09PSBudWxsO1xuICAgICAgICAgICAgICBjID0gdHJpcGxlWzFdID09PSBudWxsO1xuICAgICAgICAgICAgICBkID0gbnVtID49IHRyaXBsZVswXTtcbiAgICAgICAgICAgICAgZSA9IG51bSA8PSB0cmlwbGVbMV07XG4gICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgYyB8fCAhYSAmJiAoIWIgJiYgZCAmJiAoYyB8fCBlKSB8fCBiICYmICFjICYmIGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hcHBseUZvcm1hdHRpbmcodHJpcGxlWzJdLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcocmVzdWx0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseU51bWJlcnMgPSBmdW5jdGlvbihzdHIsIG51bSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIi0lblwiLCBTdHJpbmcoLW51bSkpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmdldENvbnRleHREYXRhID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCkge1xuICAgICAgICB2YXIgYywgZXF1YWwsIGtleSwgdmFsdWUsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTtcblxuICAgICAgICBpZiAoZGF0YS5jb250ZXh0cyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX3JlZiA9IGRhdGEuY29udGV4dHM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGMgPSBfcmVmW19pXTtcbiAgICAgICAgICBlcXVhbCA9IHRydWU7XG4gICAgICAgICAgX3JlZjEgPSBjLm1hdGNoZXM7XG4gICAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgdmFsdWUgPT09IGNvbnRleHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS51c2VPcmlnaW5hbFRleHQgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgaWYgKG51bSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmFwcGx5Rm9ybWF0dGluZyA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZykge1xuICAgICAgICB2YXIgaW5kLCByZWdleDtcblxuICAgICAgICBmb3IgKGluZCBpbiBmb3JtYXR0aW5nKSB7XG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKFwiJXtcIiArIGluZCArIFwifVwiLCBcImdcIik7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZm9ybWF0dGluZ1tpbmRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdG9yO1xuXG4gICAgfSkoKTtcbiAgICB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICBpMThuID0gdHJhbnNsYXRvci50cmFuc2xhdGU7XG4gICAgaTE4bi50cmFuc2xhdG9yID0gdHJhbnNsYXRvcjtcbiAgICBpMThuLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB0cmFucztcblxuICAgICAgdHJhbnMgPSBuZXcgVHJhbnNsYXRvcigpO1xuICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICB0cmFucy5hZGQoZGF0YSk7XG4gICAgICB9XG4gICAgICB0cmFucy50cmFuc2xhdGUuY3JlYXRlID0gaTE4bi5jcmVhdGU7XG4gICAgICB0cmFucy50cmFuc2xhdGUudHJhbnNsYXRvciA9IHRyYW5zO1xuICAgICAgcmV0dXJuIHRyYW5zLnRyYW5zbGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIlRvZGF5XCIsXG4gIHRvbW9ycm93OiBcIlRvbW9ycm93XCIsXG4gIHllc3RlcmRheTogXCJZZXN0ZXJkYXlcIixcbiAgbmV4dDogXCJOZXh0XCIsXG4gIGxhc3Q6IFwiTGFzdFwiLFxuICB0aGlzOiBcIlRoaXNcIixcbiAgaW46IFwiSW5cIixcbiAgc3VuZGF5OiBcIlN1bmRheVwiLFxuICBtb25kYXk6IFwiTW9uZGF5XCIsXG4gIHR1ZXNkYXk6IFwiVHVlc2RheVwiLFxuICB3ZWRuZXNkYXk6IFwiV2VkbmVzZGF5XCIsXG4gIHRodXJzZGF5OiBcIlRodXJzZGF5XCIsXG4gIGZyaWRheTogXCJGcmlkYXlcIixcbiAgc2F0dXJkYXk6IFwiU2F0dXJkYXlcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IGhvdXJzXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gZGF5c1wiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSB3ZWVrc1wiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gbW9udGhzXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRheXMgYWdvXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWVrcyBhZ29cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtb250aHMgYWdvXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZXMgYWdvXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBob3VycyBhZ29cIixcbiAgdGltZTogXCJUaW1lXCIsXG4gIG5vdzogXCJOb3dcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvdXJcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJIb3VyfEhvdXJzfGh8aHJ8aHJzfGhcIixcbiAgZGF5OiBcIkRheXxEYXlzfGRcIixcbiAgd2VlazogXCJXZWVrfFdlZWtzfHdcIixcbiAgbW9udGg6IFwiTW9udGh8TW9udGhzfE18bW9cIixcbiAgeWVhcjogXCJZZWFyfFllYXJzfHl8eXJ8eXJzXCIsXG4gIGFuZDogXCJBbmRcIixcbiAgYXQ6IFwiQXRcIixcbiAgZnJvbTogXCJGcm9tXCIsXG4gIHRvOiBcIlRvfFVudGlsfFRpbGxcIixcbiAgb2Y6IFwib2ZcIixcbiAgZmlyc3Q6IFwiZmlyc3RcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLku4rml6VcIixcbiAgdG9tb3Jyb3c6IFwi5piO5pelXCIsXG4gIHllc3RlcmRheTogXCLmmKjml6VcIixcbiAgbmV4dDogXCLmrKF857+MfOadpVwiLCAvLyBcIlRzdWdpL1lva3UvUmFpXCIgKGV4OiBSYWktc2h1ID0gU2VtYWluZSBwcm9jaGFpbmUpXG4gIGxhc3Q6IFwi5YmNfOWOu3zlhYh85pioXCIsIC8vIFwiTWFlL0t5by9TZW4vU2FrdVwiIChleDogU2VuLXNodSA9IFNlbWFpbmUgZGVybmnDqHJlKVxuICB0aGlzOiBcIuS7inzmnKx85b2TXCIsIC8vIFwiSW1hL0hvbi9Ub1wiIChleDogS29uLXNodSA9IENldHRlIHNlbWFpbmUpXG4gIGluOiBcIuOBguOBqHxhdG9cIiwgLy8gXCJBdG9cIiAoUG91ciBkaXJlIFwiRGFucyBYIG1pbnV0ZXNcIiAtPiBcIkF0byBYIGZ1blwiKVxuICBzdW5kYXk6IFwi5pel5puc5pelXCIsXG4gIG1vbmRheTogXCLmnIjmm5zml6VcIixcbiAgdHVlc2RheTogXCLngavmm5zml6VcIixcbiAgd2VkbmVzZGF5OiBcIuawtOabnOaXpVwiLFxuICB0aHVyc2RheTogXCLmnKjmm5zml6VcIixcbiAgZnJpZGF5OiBcIumHkeabnOaXpVwiLFxuICBzYXR1cmRheTogXCLlnJ/mm5zml6VcIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhuW+jFwiLCAvLyBYIG1pbnV0ZXMgYWZ0ZXJcbiAgaW5ob3VyczogXCIle3RpbWVEZWx0YX3mmYLplpPlvoxcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeaXpeW+jFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfemAsemWk+W+jFwiLFxuICBpbm1vbnRoczogXCIle3RpbWVEZWx0YX3jg7bmnIjlvoxcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3ml6XliY1cIiwgLy8gWCBkYXlzIGFnb1xuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHplpPliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeODtuaciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhuWJjVwiLCAvLyBYIG1pbnV0ZXMgYWdvXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeaZgumWk+WJjVwiLCAvLyBYIGhvdXJzIGFnb1xuICB0aW1lOiBcIuaZgumWk1wiLFxuICBub3c6IFwi5LuKXCIsIC8vIEltYSAoTWFpbnRlbmFudClcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSDliIZcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0g5YiGXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0g5pmC6ZaTXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51dGU6IFwi5YiGfOOBteOCk3zjgbfjgpN8ZnVuXCIsXG4gIGhvdXI6IFwi5pmC6ZaTfOOBmOOBi+OCk3zmmYJ844GYXCIsXG4gIGRheTogXCLml6V844Gr44GhXCIsXG4gIHdlZWs6IFwi6YCxfOmAsemWk3zjgZfjgoXjgYZ844GX44KF44GG44GL44KTXCIsXG4gIG1vbnRoOiBcIuaciHzjg7bmnIh844GL44GS44GkfOOBjOOBpFwiLFxuICB5ZWFyOiBcIuW5tHzjga3jgpNcIixcbiAgb2Y6IFwi44GuXCIsXG4gIGZpcnN0OiBcIuacgOWInXznrKzkuIB85YidfOacgOWIneOBrlwiLFxuICBhbmQ6IFwi44GofOOBiuOCiOOBs1wiLFxuICBhdDogXCLjgat844GnXCIsXG4gIGZyb206IFwi44GL44KJfOOCiOOCilwiLFxuICB0bzogXCLjgb7jgad844G+44Gn44GrXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0OyIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkF1am91cmQnaHVpXCIsXG4gIHRvbW9ycm93OiBcIkRlbWFpblwiLFxuICB5ZXN0ZXJkYXk6IFwiSGllclwiLFxuICBuZXh0OiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIsXG4gIGxhc3Q6IFwiZGVybmllcnxkZXJuacOocmV8cGFzc8OpfHBhc3PDqWVcIixcbiAgdGhpczogXCJjZXxjZXR0ZXxjZXRcIixcbiAgaW46IFwiZGFuc1wiLFxuICBzdW5kYXk6IFwiRGltYW5jaGVcIixcbiAgbW9uZGF5OiBcIkx1bmRpXCIsXG4gIHR1ZXNkYXk6IFwiTWFyZGlcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNyZWRpXCIsXG4gIHRodXJzZGF5OiBcIkpldWRpXCIsXG4gIGZyaWRheTogXCJWZW5kcmVkaVwiLFxuICBzYXR1cmRheTogXCJTYW1lZGlcIixcbiAgaW5taW51dGVzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgaW5ob3VyczogXCJkYW5zICV7dGltZURlbHRhfSBoZXVyZXNcIixcbiAgaW5kYXlzOiBcImRhbnMgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIGlud2Vla3M6IFwiZGFucyAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgaW5tb250aHM6IFwiZGFucyAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBkYXlzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gam91cnNcIixcbiAgd2Vla3NhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBzZW1haW5lc1wiLFxuICBtb250aHNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtb2lzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGhvdXJzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIHRpbWU6IFwiaGV1cmVcIixcbiAgbm93OiBcIm1haW50ZW5hbnRcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51dGU6IFwibWludXRlfG1pbnV0ZXN8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhldXJlfGhldXJlc3xoXCIsXG4gIGRheTogXCJqb3VyfGpvdXJzfGp8ZFwiLFxuICB3ZWVrOiBcInNlbWFpbmV8c2VtYWluZXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1vaXN8TXxtb1wiLFxuICB5ZWFyOiBcImFubsOpZXxhbm7DqWVzfGFufGFuc3xhfHlcIixcbiAgYW5kOiBcImV0XCIsXG4gIGF0OiBcIsOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXB1aXN8ZHVcIixcbiAgdG86IFwiw6B8YXxqdXNxdSfDoHxqdXNxdSdhdXxhdVwiLFxuICBvZjogXCJkdXxkZVwiLFxuICBmaXJzdDogXCJwcmVtaWVyfHByZW1pw6hyZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIb2plXCIsXG4gIHRvbW9ycm93OiBcIkFtYW5ow6NcIixcbiAgeWVzdGVyZGF5OiBcIk9udGVtXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2VndWludGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzc2Fkb3xwYXNzYWRhXCIsXG4gIHRoaXM6IFwiZXN0ZXxlc3RhXCIsXG4gIGluOiBcImVtfGRhcXVpIGF8ZGFxdWlcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIlNlZ3VuZGEtZmVpcmFcIixcbiAgdHVlc2RheTogXCJUZXLDp2EtZmVpcmFcIixcbiAgd2VkbmVzZGF5OiBcIlF1YXJ0YS1mZWlyYVwiLFxuICB0aHVyc2RheTogXCJRdWludGEtZmVpcmFcIixcbiAgZnJpZGF5OiBcIlNleHRhLWZlaXJhXCIsXG4gIHNhdHVyZGF5OiBcIlPDoWJhZG9cIixcbiAgaW5taW51dGVzOiBcImVtICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGluaG91cnM6IFwiZW0gJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGluZGF5czogXCJlbSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICBpbndlZWtzOiBcImVtICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVtICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICB3ZWVrc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaG91cnNhZ286IFwiaMOhICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWdvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImRpYXxkaWFzfGRcIixcbiAgd2VlazogXCJzZW1hbmF8c2VtYW5hc3xzfHdcIixcbiAgbW9udGg6IFwibcOqc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYW5vfGFub3N8YXx5XCIsXG4gIGFuZDogXCJlXCIsXG4gIGF0OiBcIsOgc3xhc3zDoHxhXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXTDqXxhb3zDoFwiLFxuICBvZjogXCJkb3xkYXxkZVwiLFxuICBmaXJzdDogXCJwcmltZWlyb3xwcmltZWlyYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIZXV0ZVwiLFxuICB0b21vcnJvdzogXCJNb3JnZW5cIixcbiAgeWVzdGVyZGF5OiBcIkdlc3Rlcm5cIixcbiAgbmV4dDogXCJuw6RjaHN0ZXJ8bsOkY2hzdGV8bsOkY2hzdGVzfG7DpGNoc3RlblwiLFxuICBsYXN0OiBcImxldHp0ZXJ8bGV0enRlfGxldHp0ZXNcIixcbiAgdGhpczogXCJkaWVzZXJ8ZGllc2V8ZGllc2VzXCIsXG4gIGluOiBcImluXCIsXG4gIHN1bmRheTogXCJTb25udGFnXCIsXG4gIG1vbmRheTogXCJNb250YWdcIixcbiAgdHVlc2RheTogXCJEaWVuc3RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwiTWl0dHdvY2hcIixcbiAgdGh1cnNkYXk6IFwiRG9ubmVyc3RhZ1wiLFxuICBmcmlkYXk6IFwiRnJlaXRhZ1wiLFxuICBzYXR1cmRheTogXCJTYW1zdGFnXCIsXG4gIGlubWludXRlczogXCJpbiAle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBpbmhvdXJzOiBcImluICV7dGltZURlbHRhfSBTdHVuZGVuXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gVGFnZW5cIixcbiAgaW53ZWVrczogXCJpbiAle3RpbWVEZWx0YX0gV29jaGVuXCIsXG4gIGlubW9udGhzOiBcImluICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIGRheXNhZ286IFwidm9yICV7dGltZURlbHRhfSBUYWdlblwiLFxuICB3ZWVrc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFdvY2hlblwiLFxuICBtb250aHNhZ286IFwidm9yICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIG1pbnV0ZXNhZ286IFwidm9yICV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIGhvdXJzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gU3R1bmRlblwiLFxuICB0aW1lOiBcIlplaXRcIixcbiAgbm93OiBcImpldHp0XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gU3R1bmRlXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IFN0dW5kZVwiLFxuICBtaW51dGU6IFwiTWludXRlfE1pbnV0ZW58bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIlN0dW5kZXxTdHVuZGVufFN0ZHxoXCIsXG4gIGRheTogXCJUYWd8VGFnZXxkfHRcIixcbiAgd2VlazogXCJXb2NoZXxXb2NoZW58d1wiLFxuICBtb250aDogXCJNb25hdHxNb25hdGV8TW9uYXRzfE18bW9cIixcbiAgeWVhcjogXCJKYWhyfEphaHJlfGp8eVwiLFxuICBhbmQ6IFwidW5kXCIsXG4gIGF0OiBcInVtXCIsXG4gIGZyb206IFwidm9ufGFiXCIsXG4gIHRvOiBcImJpc3xiaXMgenVtXCIsXG4gIG9mOiBcImRlc3x2b21cIixcbiAgZmlyc3Q6IFwiZXJzdGVyfGVyc3RlfGVyc3Rlc1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJWYW5kYWFnXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2lzdGVyZW5cIixcbiAgbmV4dDogXCJ2b2xnZW5kZVwiLFxuICBsYXN0OiBcInZvcmlnZXxsYWF0c3RlXCIsXG4gIHRoaXM6IFwiZGV6ZXxkaXRcIixcbiAgaW46IFwib3ZlclwiLFxuICBzdW5kYXk6IFwiem9uZGFnXCIsXG4gIG1vbmRheTogXCJtYWFuZGFnXCIsXG4gIHR1ZXNkYXk6IFwiZGluc2RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwid29lbnNkYWdcIixcbiAgdGh1cnNkYXk6IFwiZG9uZGVyZGFnXCIsXG4gIGZyaWRheTogXCJ2cmlqZGFnXCIsXG4gIHNhdHVyZGF5OiBcInphdGVyZGFnXCIsXG4gIGlubWludXRlczogXCJvdmVyICV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIGluaG91cnM6IFwib3ZlciAle3RpbWVEZWx0YX0gdXJlblwiLFxuICBpbmRheXM6IFwib3ZlciAle3RpbWVEZWx0YX0gZGFnZW5cIixcbiAgaW53ZWVrczogXCJvdmVyICV7dGltZURlbHRhfSB3ZWtlblwiLFxuICBpbm1vbnRoczogXCJvdmVyICV7dGltZURlbHRhfSBtYWFuZGVuXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRhZ2VuIGdlbGVkZW5cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHdla2VuIGdlbGVkZW5cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtYWFuZGVuIGdlbGVkZW5cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRlbiBnZWxlZGVuXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSB1cmVuIGdlbGVkZW5cIixcbiAgdGltZTogXCJ0aWpkXCIsXG4gIG5vdzogXCJudVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IHV1clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXRlOiBcIm1pbnV1dHxtaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJ1dXJ8dXJlbnx1fGhcIixcbiAgZGF5OiBcImRhZ3xkYWdlbnxkXCIsXG4gIHdlZWs6IFwid2Vla3x3ZWtlbnx3XCIsXG4gIG1vbnRoOiBcIm1hYW5kfG1hYW5kZW58TXxtb1wiLFxuICB5ZWFyOiBcImphYXJ8amFyZW58anx5XCIsXG4gIGFuZDogXCJlblwiLFxuICBhdDogXCJvbVwiLFxuICBmcm9tOiBcInZhbnx2YW5hZlwiLFxuICB0bzogXCJ0b3R8dG90IGVuIG1ldFwiLFxuICBvZjogXCJ2YW5cIixcbiAgZmlyc3Q6IFwiZWVyc3RlXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG95XCIsXG4gIHRvbW9ycm93OiBcIk1hw7FhbmFcIixcbiAgeWVzdGVyZGF5OiBcIkF5ZXJcIixcbiAgbmV4dDogXCJwcsOzeGltb3xwcsOzeGltYXxzaWd1aWVudGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzYWRvfHBhc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbnxkZW50cm8gZGVcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIkx1bmVzXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVzXCIsXG4gIHdlZG5lc2RheTogXCJNacOpcmNvbGVzXCIsXG4gIHRodXJzZGF5OiBcIkp1ZXZlc1wiLFxuICBmcmlkYXk6IFwiVmllcm5lc1wiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbiAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVuICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW4gJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIGlud2Vla3M6IFwiZW4gJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgaW5tb250aHM6IFwiZW4gJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIGRheXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gZMOtYXNcIixcbiAgd2Vla3NhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBtb250aHNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGFnb3N1ZmZpeDogXCJhdHLDoXN8YXRyYXNcIixcbiAgdGltZTogXCJob3JhXCIsXG4gIG5vdzogXCJhaG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0b3N8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhvcmF8aG9yYXN8aFwiLFxuICBkYXk6IFwiZMOtYXxkw61hc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYcOxb3xhw7Fvc3xhfHlcIixcbiAgYW5kOiBcInlcIixcbiAgYXQ6IFwiYSBsYXN8YSBsYXxhfGVuXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXxoYXN0YVwiLFxuICBvZjogXCJkZXxkZWxcIixcbiAgZmlyc3Q6IFwicHJpbWVyfHByaW1lcmFcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG5cbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIk9nZ2lcIixcbiAgdG9tb3Jyb3c6IFwiRG9tYW5pXCIsXG4gIHllc3RlcmRheTogXCJJZXJpXCIsXG4gIG5leHQ6IFwicHJvc3NpbW98cHJvc3NpbWF8c2VndWVudGVcIixcbiAgbGFzdDogXCJ1bHRpbW98dWx0aW1hfHNjb3Jzb3xzY29yc2F8cGFzc2F0b3xwYXNzYXRhXCIsXG4gIHRoaXM6IFwicXVlc3RvfHF1ZXN0YVwiLFxuICBpbjogXCJpbnx0cmFcIixcbiAgc3VuZGF5OiBcIkRvbWVuaWNhXCIsXG4gIG1vbmRheTogXCJMdW5lZMOsXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVkw6xcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNvbGVkw6xcIixcbiAgdGh1cnNkYXk6IFwiR2lvdmVkw6xcIixcbiAgZnJpZGF5OiBcIlZlbmVyZMOsXCIsXG4gIHNhdHVyZGF5OiBcIlNhYmF0b1wiLFxuICBpbm1pbnV0ZXM6IFwidHJhICV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgaW5ob3VyczogXCJ0cmEgJXt0aW1lRGVsdGF9IG9yZVwiLFxuICBpbmRheXM6IFwidHJhICV7dGltZURlbHRhfSBnaW9ybmlcIixcbiAgaW53ZWVrczogXCJ0cmEgJXt0aW1lRGVsdGF9IHNldHRpbWFuZVwiLFxuICBpbm1vbnRoczogXCJ0cmEgJXt0aW1lRGVsdGF9IG1lc2lcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0gZ2lvcm5pIGZhXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSBzZXR0aW1hbmUgZmFcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtZXNpIGZhXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0aSBmYVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gb3JlIGZhXCIsXG4gIHRpbWU6IFwib3JhXCIsXG4gIG5vdzogXCJhZGVzc298b3JhXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IG9yYVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dGl8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIm9yYXxvcmV8aFwiLFxuICBkYXk6IFwiZ2lvcm5vfGdpb3JuaXxnfGRcIixcbiAgd2VlazogXCJzZXR0aW1hbmF8c2V0dGltYW5lfHN8d1wiLFxuICBtb250aDogXCJtZXNlfG1lc2l8TXxtb1wiLFxuICB5ZWFyOiBcImFubm98YW5uaXxhfHlcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiYWxsZXxhbGxhfGFcIixcbiAgZnJvbTogXCJkYXxkYWx8ZGFsbGFcIixcbiAgdG86IFwiYXxmaW5vIGF8ZmlubyBhbHxmaW5vIGFsbGFcIixcbiAgb2Y6IFwiZGVsfGRlbGxhfGRpXCIsXG4gIGZpcnN0OiBcInByaW1vfHByaW1hXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLQodC10LPQvtC00L3Rj1wiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQtdGA0LBcIixcbiAgbmV4dDogXCLRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnQsNGPfNGB0LvQtdC00YPRjtGJ0LXQtXzRgdC70LXQtNGD0Y7RidC40LVcIixcbiAgbGFzdDogXCLQv9C+0YHQu9C10LTQvdC40Ll80L/QvtGB0LvQtdC00L3Rj9GPfNC/0L7RgdC70LXQtNC90LXQtXzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0Ll80L/RgNC+0YjQu9Cw0Y980L/RgNC+0YjQu9C+0LV80L/RgNC+0YjQu9GL0LVcIixcbiAgdGhpczogXCLRjdGC0L7RgnzRjdGC0LB80Y3RgtC+fNGN0YLQuFwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQktC+0YHQutGA0LXRgdC10L3RjNC1fNCS0L7RgdC60YDQtdGB0LXQvdGM0Y9cIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTQtdC70YzQvdC40Lp80J/QvtC90LXQtNC10LvRjNC90LjQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRgtC+0YDQvdC40Lp80JLRgtC+0YDQvdC40LrQsFwiLFxuICB3ZWRuZXNkYXk6IFwi0KHRgNC10LTQsHzQodGA0LXQtNGLXCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgNCzfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCf0Y/RgtC90LjRhtCwfNCf0Y/RgtC90LjRhtGLXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdCx0L7RgtCwfNCh0YPQsdCx0L7RgtGLXCIsXG4gIGlubWludXRlczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgaW5ob3VyczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5XCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0L3QtdC00LXQu9GOfNC90LXQtNC10LvQuHzQvdC10LTQtdC70YxcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5INC90LDQt9Cw0LRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMINC90LDQt9Cw0LRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0XCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QsiDQvdCw0LfQsNC0XCIsXG4gIHRpbWU6IFwi0LLRgNC10LzRj1wiLFxuICBub3c6IFwi0YHQtdC50YfQsNGBXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnV0ZTogXCLQvNC40L3Rg9GC0LB80LzQuNC90YPRgtGLfNC80LjQvdGD0YJ80LzQuNC9fNC8XCIsXG4gIGhvdXI6IFwi0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJ80YdcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3Rj3zQtNC90LXQuXzQtFwiLFxuICB3ZWVrOiBcItC90LXQtNC10LvRj3zQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMfNC9fNC90LXQtFwiLFxuICBtb250aDogXCLQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsnzQvNC10YF80LxcIixcbiAgeWVhcjogXCLQs9C+0LR80LPQvtC00LB80LvQtdGCfNCzfNC7XCIsXG4gIGFuZDogXCLQuFwiLFxuICBhdDogXCLQslwiLFxuICBmcm9tOiBcItGBfNC+0YJcIixcbiAgdG86IFwi0LTQvnzQulwiLFxuICBvZjogXCLQuNC3fNC+0YJcIixcbiAgZmlyc3Q6IFwi0L/QtdGA0LLRi9C5fNC/0LXRgNCy0LDRj3zQv9C10YDQstC+0LV80L/QtdGA0LLRi9C1XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi0KHRjNC+0LPQvtC00L3RllwiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQvtGA0LBcIixcbiAgbmV4dDogXCLQvdCw0YHRgtGD0L/QvdC40Ll80L3QsNGB0YLRg9C/0L3QsHzQvdCw0YHRgtGD0L/QvdC1fNC90LDRgdGC0YPQv9C90ZZcIixcbiAgbGFzdDogXCLQvtGB0YLQsNC90L3RltC5fNC+0YHRgtCw0L3QvdGPfNC+0YHRgtCw0L3QvdGUfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvQuNC5fNC80LjQvdGD0LvQsHzQvNC40L3Rg9C70LV80LzQuNC90YPQu9GWXCIsXG4gIHRoaXM6IFwi0YbQtdC5fNGG0Y980YbQtXzRhtGWXCIsXG4gIGluOiBcItGH0LXRgNC10LdcIixcbiAgc3VuZGF5OiBcItCd0LXQtNGW0LvRj3zQndC10LTRltC70ZZcIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTRltC70L7QunzQn9C+0L3QtdC00ZbQu9C60LBcIixcbiAgdHVlc2RheTogXCLQktGW0LLRgtC+0YDQvtC6fNCS0ZbQstGC0L7RgNC60LBcIixcbiAgd2VkbmVzZGF5OiBcItCh0LXRgNC10LTQsHzQodC10YDQtdC00LhcIixcbiAgdGh1cnNkYXk6IFwi0KfQtdGC0LLQtdGAfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCfJ9GP0YLQvdC40YbRj3zQnyfRj9GC0L3QuNGG0ZZcIixcbiAgc2F0dXJkYXk6IFwi0KHRg9Cx0L7RgtCwfNCh0YPQsdC+0YLQuFwiLFxuICBpbm1pbnV0ZXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIGluaG91cnM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIGluZGF5czogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LJcIixcbiAgaW53ZWVrczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRgtC40LbQtNC10L3RjHzRgtC40LbQvdGWfNGC0LjQttC90ZbQslwiLFxuICBpbm1vbnRoczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3RlnzQtNC90ZbQsiDRgtC+0LzRg1wiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LIg0YLQvtC80YNcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyINGC0L7QvNGDXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvSDRgtC+0LzRg1wiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9INGC0L7QvNGDXCIsXG4gIHRpbWU6IFwi0YfQsNGBXCIsXG4gIG5vdzogXCLQt9Cw0YDQsNC3XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXRlOiBcItGF0LLQuNC70LjQvdCwfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvXzRhdCyfNC8XCIsXG4gIGhvdXI6IFwi0LPQvtC00LjQvdCwfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9fNCz0L7QtHzQs1wiLFxuICBkYXk6IFwi0LTQtdC90Yx80LTQvdGWfNC00L3RltCyfNC0XCIsXG4gIHdlZWs6IFwi0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJ80YJ80YLQuNC2XCIsXG4gIG1vbnRoOiBcItC80ZbRgdGP0YbRjHzQvNGW0YHRj9GG0ZZ80LzRltGB0Y/RhtGW0LJ80LzRltGBfNC8XCIsXG4gIHllYXI6IFwi0YDRltC6fNGA0L7QutC4fNGA0L7QutGW0LJ80YBcIixcbiAgYW5kOiBcItGWXCIsXG4gIGF0OiBcItC+XCIsXG4gIGZyb206IFwi0Ld80LLRltC0XCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0Ld80LLRltC0XCIsXG4gIGZpcnN0OiBcItC/0LXRgNGI0LjQuXzQv9C10YDRiNCwfNC/0LXRgNGI0LV80L/QtdGA0YjRllwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuS7iuWkqVwiLFxuICB0b21vcnJvdzogXCLmmI7lpKlcIixcbiAgeWVzdGVyZGF5OiBcIuaYqOWkqVwiLFxuICAvLyBGb3JtYWwgKFwi5LiL5LiA5YCLXCIvXCLkuIvkuIDkuKpcIikgYW5kIHNob3J0IHByZWZpeCAoXCLkuItcIiwgZS5nLiBcIuS4i+aYn+acn+S4gFwiL1wi5LiL5ZGo5LiAXCIpIGZvcm1zLFxuICAvLyBjb3ZlcmluZyBib3RoIFRyYWRpdGlvbmFsIGFuZCBTaW1wbGlmaWVkIHNjcmlwdC5cbiAgbmV4dDogXCLkuIvkuIDlgIt85LiL5LiA5LiqfOS4i1wiLFxuICAvLyBcIuacgOW+jC/mnIDlkI5cIiAoXCJsYXN0XCIgaW4gZ2VuZXJhbCksIFwi5LiK5LiA5YCLL+S4iuS4gOS4qlwiIChcInByZXZpb3VzXCIpLCBhbmQgc2hvcnQgXCLkuIpcIlxuICAvLyAoZS5nLiBcIuS4iuaYn+acn+S4gFwiL1wi5LiK5ZGo5LiAXCIpLlxuICBsYXN0OiBcIuacgOW+jHzmnIDlkI585LiK5LiA5YCLfOS4iuS4gOS4qnzkuIpcIixcbiAgLy8gXCLpgJnlgIsv6L+Z5LiqXCIgKGZvcm1hbCkgYW5kIHNob3J0IFwi6YCZL+i/mVwiIChlLmcuIFwi6YCZ5pif5pyf5LiAXCIvXCLov5nlkajkuIBcIikuXG4gIHRoaXM6IFwi6YCZ5YCLfOi/meS4qnzpgJl86L+ZXCIsXG4gIGluOiBcIuWcqFwiLFxuICAvLyBcIuemruaLnC/npLzmi5xcIiAoY29sbG9xdWlhbCwgb3JpZ2luYWxseSBcIndvcnNoaXAgZGF5XCIpIGlzIGFsc28gZXh0cmVtZWx5IGNvbW1vblxuICAvLyBmb3Igd2Vla2RheXMsIGUuZy4gXCLnpq7mi5zkuIBcIi9cIuekvOaLnOS4gFwiIGZvciBNb25kYXkuXG4gIHN1bmRheTogXCLmmJ/mnJ/ml6V85ZGo5pelfOmAseaXpXzmmJ/mnJ/lpKl856au5ouc5pelfOekvOaLnOaXpXznpq7mi5zlpKl856S85ouc5aSpXCIsXG4gIG1vbmRheTogXCLmmJ/mnJ/kuIB85ZGo5LiAfOmAseS4gHznpq7mi5zkuIB856S85ouc5LiAXCIsXG4gIHR1ZXNkYXk6IFwi5pif5pyf5LqMfOWRqOS6jHzpgLHkuox856au5ouc5LqMfOekvOaLnOS6jFwiLFxuICB3ZWRuZXNkYXk6IFwi5pif5pyf5LiJfOWRqOS4iXzpgLHkuIl856au5ouc5LiJfOekvOaLnOS4iVwiLFxuICB0aHVyc2RheTogXCLmmJ/mnJ/lm5t85ZGo5ZubfOmAseWbm3znpq7mi5zlm5t856S85ouc5ZubXCIsXG4gIGZyaWRheTogXCLmmJ/mnJ/kupR85ZGo5LqUfOmAseS6lHznpq7mi5zkupR856S85ouc5LqUXCIsXG4gIHNhdHVyZGF5OiBcIuaYn+acn+WFrXzlkajlha186YCx5YWtfOemruaLnOWFrXznpLzmi5zlha1cIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhumQmOW+jFwiLFxuICBpbmhvdXJzOiBcIiV7dGltZURlbHRhfeWwj+aZguW+jFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF95aSp5b6MXCIsXG4gIGlud2Vla3M6IFwiJXt0aW1lRGVsdGF96YCx5b6MXCIsXG4gIGlubW9udGhzOiBcIiV7dGltZURlbHRhfeWAi+aciOW+jFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeWkqeWJjVwiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeWAi+aciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhumQmOWJjVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3lsI/mmYLliY1cIixcbiAgLy8gTm90IHVzZWQgZm9yIGRpc3BsYXksIG9ubHkgZm9yIG1hdGNoaW5nIFwiTiB1bml0XCIgKyB0aGlzIG1hcmtlciAoZS5nLlxuICAvLyBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiA9IFwiMiBkYXlzXCIgKyBcIuW+jFwiL1wi5ZCOXCIgPSBcIjIgZGF5cyBsYXRlclwiKS4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIHRoZSAle3RpbWVEZWx0YX0gdGVtcGxhdGVzIGFib3ZlICh3aGljaCBhcmUgYWxzbyB1c2VkIHZlcmJhdGltIGluXG4gIC8vIGF1dG9zdWdnZXN0IGxhYmVscyBhbmQgZG9uJ3Qgc3VwcG9ydCBcInxcIiBhbHRlcm5hdGl2ZXMgdGhlIHNhbWUgd2F5KS5cbiAgLy8gXCLkuYvlvowv5LmL5ZCOXCIgYW5kIFwi5Lul5b6ML+S7peWQjlwiIGFyZSBlcXVhbGx5IGNvbW1vbiBhbHRlcm5hdGl2ZXMgdG8gYmFyZSBcIuW+jC/lkI5cIlxuICAvLyAoZS5nLiBcIjLlpKnkuYvlvoxcIiwgXCIz5YCL5pyI5Lul5b6MXCIpLlxuICBsYXRlcjogXCLlvox85ZCOfOS5i+W+jHzkuYvlkI585Lul5b6MfOS7peWQjlwiLFxuICB0aW1lOiBcIuaZgumWk3zml7bpl7RcIixcbiAgbm93OiBcIuePvuWcqHznjrDlnKhcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfeWIhumQmFwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfeWIhumQmFwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnV0ZTogXCLliIbpkJh85YiG6ZKffOWIhlwiLFxuICBob3VyOiBcIuWwj+aZgnzlsI/ml7Z85pmCfOaXtlwiLFxuICBkYXk6IFwi5aSpfOaXpVwiLFxuICB3ZWVrOiBcIumAsXzlkah85pif5pyffOWAi+aYn+acn3zkuKrmmJ/mnJ9856au5oucfOekvOaLnHzlgIvnpq7mi5x85Liq56S85oucXCIsXG4gIG1vbnRoOiBcIuaciHzlgIvmnIh85Liq5pyIXCIsXG4gIHllYXI6IFwi5bm0XCIsXG4gIGFuZDogXCLlkoxcIixcbiAgYXQ6IFwi5ZyoXCIsXG4gIGZyb206IFwi5b6efOS7jnzoh6pcIixcbiAgdG86IFwi5YiwfOiHs1wiLFxuICBvZjogXCLnmoRcIixcbiAgZmlyc3Q6IFwi56ys5LiAfOesrOS4gOWAi3znrKzkuIDkuKpcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCIvLyBLb3JlYW4gc3VwcG9ydC4gVm9jYWJ1bGFyeSBmb3IgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCB3ZWVrZGF5cyxcbi8vIHRoaXMvbmV4dC9sYXN0LCB0aGUgaG91ci9taW51dGUvZGF5L3dlZWsvbW9udGgveWVhciB1bml0cywgYW5kIHRoZVxuLy8gXCJsYXRlclwiL1wiYWdvc3VmZml4XCIgcmVsYXRpdmUtZXhwcmVzc2lvbiBtYXJrZXJzIGlzIHRha2VuIGRpcmVjdGx5IGZyb21cbi8vIENyZWFtTnV0cycgdHJhbnNsYXRlS29yZWFuVG9FbmdsaXNoKCkgZGljdGlvbmFyeVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9DcmVhbU51dHMvbmxkYXRlcy1vYnNpZGlhbi1rb3JlYW4sIE1JVCksIHNpbmNlIGl0J3Ncbi8vIHZvY2FidWxhcnkgYSByZWFsIEtvcmVhbi1zcGVha2luZyB1c2VyIGJhc2UgaGFzIGFscmVhZHkgYmVlbiB1c2luZy5cbi8vXG4vLyBLb3JlYW4gcGhyYXNlcyBudW1iZXJzIGluIGEgc3VmZml4IHBvc2l0aW9uIChudW1iZXIgKyB1bml0ICsgbWFya2VyLCBlLmcuXG4vLyBcIjPsnbwg7ZuEXCIgPSBcIjMgZGF5c1wiICsgXCLtm4RcIiAoXCJsYXRlclwiKSA9IFwiaW4gMyBkYXlzXCIpLCBub3QgRW5nbGlzaCdzIHByZWZpeFxuLy8gXCJpbiAzIGRheXNcIiAtLSBzbyBpbm1pbnV0ZXMvaW5kYXlzL2V0Yy4gYW5kIGRheXNhZ28vd2Vla3NhZ28vZXRjLiBiZWxvdyBhcmVcbi8vIGJ1aWx0IHN1ZmZpeC1zdHlsZSwgdGhlIHNhbWUgbWVjaGFuaXNtIGFscmVhZHkgdXNlZCBmb3IgQ2hpbmVzZSAoc2VlXG4vLyB6aC50cydzIFwibGF0ZXJcIi9cImFnb3N1ZmZpeFwiIGNvbW1lbnRzKSwgcmF0aGVyIHRoYW4gbWlycm9yaW5nIHRoZSBFbmdsaXNoXG4vLyB0ZW1wbGF0ZSBsaXRlcmFsbHkuXG4vL1xuLy8gVU5WRVJJRklFRDogXCJhbmRcIi9cImF0XCIvXCJmcm9tXCIvXCJ0b1wiL1wib2ZcIiBiZWxvdyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgaW5cbi8vIENyZWFtTnV0cycgZmlsZSAoaGlzIHRyYW5zbGF0b3IgZG9lc24ndCBzdXBwb3J0IGNvbWJpbmVkIGR1cmF0aW9ucyxcbi8vIHdlZWtkYXkrdGltZSwgb3IgZGF0ZSByYW5nZXMpIGFuZCBhcmUgbXkgb3duIGJlc3QtZWZmb3J0IHBpY2tzLCBub3Rcbi8vIGNoZWNrZWQgYnkgYSBLb3JlYW4gc3BlYWtlci4gS29yZWFuIG5vcm1hbGx5IGF0dGFjaGVzIHBhcnRpY2xlcyBsaWtlIOyXkFxuLy8gKFwiYXRcIikv67aA7YSwKFwiZnJvbVwiKS/quYzsp4AoXCJ0b1wiKS/snZgoXCJvZlwiKSBkaXJlY3RseSB0byB0aGUgcHJldmlvdXMgd29yZCB3aXRoXG4vLyBubyBzcGFjZSwgd2hpbGUgdGhpcyBwbHVnaW4ncyByZWdleCBwYXR0ZXJucyByZXF1aXJlIHRoZW0gYXMgYVxuLy8gc3BhY2Utc2VwYXJhdGVkIHN0YW5kYWxvbmUgd29yZCAtLSBzbyBcIm5leHQgTW9uZGF5IGF0IDNwbVwiLSwgXCJmcm9tIE1vbmRheVxuLy8gdG8gRnJpZGF5XCItLCBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiLSwgYW5kIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiLXN0eWxlXG4vLyBjb21iaW5lZCBleHByZXNzaW9ucyBtYXkgbm90IG1hdGNoIG5hdHVyYWwgS29yZWFuIHBocmFzaW5nIGV2ZW4gdGhvdWdoIHRoZVxuLy8gc2ltcGxlIGV4cHJlc3Npb25zIGFib3ZlIGRvLiBUcmFja2VkIGluICM0MC5cbmNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuyYpOuKmFwiLFxuICB0b21vcnJvdzogXCLrgrTsnbxcIixcbiAgeWVzdGVyZGF5OiBcIuyWtOygnFwiLFxuICBuZXh0OiBcIuuLpOydjFwiLFxuICBsYXN0OiBcIuyngOuCnFwiLFxuICB0aGlzOiBcIuydtOuyiFwiLFxuICBpbjogXCLslZ7snLzroZxcIixcbiAgc3VuZGF5OiBcIuydvOyalOydvFwiLFxuICBtb25kYXk6IFwi7JuU7JqU7J28XCIsXG4gIHR1ZXNkYXk6IFwi7ZmU7JqU7J28XCIsXG4gIHdlZG5lc2RheTogXCLsiJjsmpTsnbxcIixcbiAgdGh1cnNkYXk6IFwi66qp7JqU7J28XCIsXG4gIGZyaWRheTogXCLquIjsmpTsnbxcIixcbiAgc2F0dXJkYXk6IFwi7Yag7JqU7J28XCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3rtoQg7ZuEXCIsXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF97Iuc6rCEIO2bhFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF97J28IO2bhFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfeyjvCDtm4RcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF96rCc7JuUIO2bhFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeydvCDsoIRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF97KO8IOyghFwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF96rCc7JuUIOyghFwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeu2hCDsoIRcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF97Iuc6rCEIOyghFwiLFxuICAvLyBTdWZmaXggbWFya2VycyBmb3IgXCJOIHVuaXRcIiArIG1hcmtlciAoZS5nLiBcIjPsnbwg7ZuEXCIgPSBcImluIDMgZGF5c1wiLFxuICAvLyBcIjLso7wg7KCEXCIgPSBcIjIgd2Vla3MgYWdvXCIpIC0tIHZlcmlmaWVkIGFnYWluc3QgQ3JlYW1OdXRzJyBoYW5kbGVOYXRpdmVEYXRlRXhwcmVzc2lvbnMoKS9wcm9jZXNzTnVtYmVyUGF0dGVybigpLlxuICBsYXRlcjogXCLtm4R865KkXCIsXG4gIGFnb3N1ZmZpeDogXCLsoIRcIixcbiAgdGltZTogXCLsi5zqsIRcIixcbiAgbm93OiBcIuyngOq4iFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF967aEXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF967aEXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXRlOiBcIuu2hFwiLFxuICBob3VyOiBcIuyLnOqwhFwiLFxuICBkYXk6IFwi7J28XCIsXG4gIHdlZWs6IFwi7KO8XCIsXG4gIG1vbnRoOiBcIuqwnOyblHzri6xcIixcbiAgeWVhcjogXCLrhYRcIixcbiAgYW5kOiBcIuq3uOumrOqzoFwiLFxuICBhdDogXCLsl5BcIixcbiAgZnJvbTogXCLrtoDthLBcIixcbiAgdG86IFwi6rmM7KeAXCIsXG4gIG9mOiBcIuydmFwiLFxuICBmaXJzdDogXCLssqtcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJpbXBvcnQgaTE4biBmcm9tICdyb2RkZWgtaTE4bic7XG5cbmltcG9ydCBlbiBmcm9tICcuL2VuJztcbmltcG9ydCBqYSBmcm9tICcuL2phJztcbmltcG9ydCBmciBmcm9tICcuL2ZyJztcbmltcG9ydCBwdCBmcm9tICcuL3B0JztcbmltcG9ydCBkZSBmcm9tICcuL2RlJztcbmltcG9ydCBubCBmcm9tICcuL25sJztcbmltcG9ydCBlcyBmcm9tICcuL2VzJztcbmltcG9ydCBpdCBmcm9tICcuL2l0JztcbmltcG9ydCBydSBmcm9tICcuL3J1JztcbmltcG9ydCB1ayBmcm9tICcuL3VrJztcbmltcG9ydCB6aCBmcm9tICcuL3poJztcbmltcG9ydCBrbyBmcm9tICcuL2tvJztcblxuY29uc3Qgbm90Rm91bmREZWZhdWx0ID0gXCJOT1RGT1VORFwiIGFzIGNvbnN0O1xuXG50eXBlIFRyYW5zbGF0b3IgPSAoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbi8vIENhY2hlIGRlcyB0cmFkdWN0ZXVycyBwb3VyIMOpdml0ZXIgZGUgbGVzIHJlY3LDqWVyIMOgIGNoYXF1ZSBhcHBlbFxuLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiB0cmFuc2xhdG9ycyBhcmUgY3JlYXRlZCBvbmNlIGFuZCByZXVzZWRcbmNvbnN0IHRyYW5zbGF0b3JDYWNoZTogUmVjb3JkPHN0cmluZywgVHJhbnNsYXRvcj4gPSB7fTtcblxuLy8gU2hhcGUgc2hhcmVkIGJ5IGV2ZXJ5IGxhbmd1YWdlIGRpY3Q6IHNhbWUga2V5cyBhcyBgZW5gLCBidXQgZWFjaCBsYW5ndWFnZVxuLy8gaGFzIGl0cyBvd24gc3RyaW5nIHZhbHVlcyAobm90IGBlbmAncyBleGFjdCBsaXRlcmFsIHRleHQpIC0tIHVzaW5nXG4vLyBgdHlwZW9mIGVuYCBkaXJlY3RseSBoZXJlIHdvdWxkIGNvbXBhcmUgZXZlcnkgb3RoZXIgbGFuZ3VhZ2UncyB0ZXh0XG4vLyBhZ2FpbnN0IGBlbmAncyBsaXRlcmFsIEVuZ2xpc2ggc3RyaW5ncyBhbmQgYWx3YXlzIGZhaWwuXG50eXBlIExhbmdEaWN0ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgZW5dOiBzdHJpbmcgfTtcblxuLy8gTWFwIGRlcyBtb2R1bGVzIGRlIGxhbmd1ZSBwb3VyIGZhY2lsaXRlciBsJ2FjY8Ooc1xuY29uc3QgbGFuZ3VhZ2VNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBMYW5nRGljdD4gPSB7XG4gIGVuLFxuICBqYSxcbiAgZnIsXG4gIHB0LFxuICBkZSxcbiAgbmwsXG4gIGVzLFxuICBpdCxcbiAgcnUsXG4gIHVrLFxuICAnemguaGFudCc6IHpoLFxuICBrbyxcbn07XG5cbi8qKlxuICogT2J0aWVudCB1biB0cmFkdWN0ZXVyIHBvdXIgdW5lIGxhbmd1ZSBkb25uw6llIChhdmVjIGNhY2hlKVxuICogR2V0cyBhIHRyYW5zbGF0b3IgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgKGNhY2hlZClcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcihsYW5nOiBzdHJpbmcpOiBUcmFuc2xhdG9yIHtcbiAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbbGFuZ10pIHtcbiAgICBjb25zdCBsYW5ndWFnZU1vZHVsZSA9IGxhbmd1YWdlTW9kdWxlc1tsYW5nXTtcbiAgICBpZiAobGFuZ3VhZ2VNb2R1bGUpIHtcbiAgICAgIC8vIHJvZGRlaC1pMThuJ3Mgc2hpcHBlZCB0eXBlcyBkZWNsYXJlIHRoZSAybmQgY2FsbCBhcmd1bWVudCBhc1xuICAgICAgLy8gYG51bWJlciB8IEZvcm1hdHRpbmdDb250ZXh0YCwgYnV0IGl0cyBhY3R1YWwgcnVudGltZSBBUEkgKHVzZWRcbiAgICAgIC8vIHRocm91Z2hvdXQgdGhpcyBmaWxlKSBhbHNvIGFjY2VwdHMgYSBwbGFpbiBzdHJpbmcgZGVmYXVsdCB2YWx1ZSAtLVxuICAgICAgLy8gdGhhdCBvdmVybG9hZCBqdXN0IGlzbid0IHJlZmxlY3RlZCBpbiBpdHMgLmQudHMsIGhlbmNlIHRoZSBjYXN0LlxuICAgICAgdHJhbnNsYXRvckNhY2hlW2xhbmddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGxhbmd1YWdlTW9kdWxlIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuZ2xhaXMgc2kgbGEgbGFuZ3VlIG4nZXN0IHBhcyB0cm91dsOpZVxuICAgICAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbJ2VuJ10pIHtcbiAgICAgICAgdHJhbnNsYXRvckNhY2hlWydlbiddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGVuIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbJ2VuJ107XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbbGFuZ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHQoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IGxhbmdUcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihsYW5nKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSBsYW5nVHJhbnNsYXRvcihrZXksIG5vdEZvdW5kRGVmYXVsdCwgdmFyaWFibGVzKTtcbiAgXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gbm90Rm91bmREZWZhdWx0KSB7XG4gICAgY29uc3QgZW5UcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihcImVuXCIpO1xuICAgIHJldHVybiBlblRyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufSIsImltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYW5kIGNhY2hlcyB0cmFuc2xhdGVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsYW5ndWFnZXMsIGFuZCBidWlsZHNcbiAqIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0uXG4gKlxuICogRXZlcnkgc3VwcG9ydGVkIGxhbmd1YWdlIGNhbiBkZWZpbmUgc2V2ZXJhbCB2YXJpYW50cyBmb3IgdGhlIHNhbWUgY29uY2VwdFxuICogKGUuZy4gRnJlbmNoIFwibmV4dFwiOiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIpLCBhbmQgZXZlcnlcbiAqIGZlYXR1cmUgb2YgdGhlIHBhcnNlciBuZWVkcyB0byBnYXRoZXIgdGhvc2UgdmFyaWFudHMgYWNyb3NzICphbGwqIGFjdGl2ZVxuICogbGFuZ3VhZ2VzIGJlZm9yZSBidWlsZGluZyBhIHJlZ2V4IG91dCBvZiB0aGVtLiBUaGlzIGNsYXNzIGNlbnRyYWxpemVzIHRoYXRcbiAqIFwibG9vayB1cCBhIHRyYW5zbGF0aW9uIGtleSBpbiBldmVyeSBhY3RpdmUgbGFuZ3VhZ2UsIHNwbGl0IG11bHRpLXZhcmlhbnRcbiAqIGVudHJpZXMgb24gJ3wnLCB0cmltLCBkZWR1cGVcIiBwYXR0ZXJuLCB3aGljaCB1c2VkIHRvIGJlIHJlcGVhdGVkIGlubGluZVxuICogcm91Z2hseSBmaWZ0ZWVuIHRpbWVzIHRocm91Z2hvdXQgTkxEUGFyc2VyIChhbmQsIGxlc3MgZXhoYXVzdGl2ZWx5LCBpblxuICogQ29udGV4dEFuYWx5emVyIGFuZCB1dGlscy50cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXM6IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gd2l0aCBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhbmd9OiR7a2V5fWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50cmFuc2xhdGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdChrZXksIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHRyYW5zbGF0ZWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV2ZXJ5IHZhcmlhbnQgb2YgYGtleWAncyB0cmFuc2xhdGlvbiBhY3Jvc3MgYWxsIGFjdGl2ZSBsYW5ndWFnZXMsXG4gICAqIHNwbGl0dGluZyBtdWx0aS12YXJpYW50IGVudHJpZXMgKGUuZy4gXCJhfGJ8Y1wiKSBvbiBcInxcIiwgdHJpbW1pbmcsIGFuZFxuICAgKiBkZS1kdXBsaWNhdGluZy4gRW50cmllcyB0aGF0IGFyZW4ndCBmb3VuZCBmb3IgYSBnaXZlbiBsYW5ndWFnZSBhcmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRyYW5zbGF0aW9uIGtleSAoZS5nLiBcIm5leHRcIiwgXCJtb25kYXlcIiwgXCJpbmRheXNcIilcbiAgICogQHBhcmFtIG9wdGlvbnMubG93ZXJjYXNlIC0gTG93ZXJjYXNlIGVhY2ggdmFyaWFudCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBjb2xsZWN0V29yZHMoa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMudHJhbnNsYXRlKGtleSwgbGFuZyk7XG4gICAgICBpZiAoIXRyYW5zbGF0aW9uIHx8IHRyYW5zbGF0aW9uID09PSBcIk5PVEZPVU5EXCIpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YXJpYW50LnRyaW0oKTtcbiAgICAgICAgLy8gTm8gY3VycmVudCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGVudHJ5IGhhcyBhbiBlbXB0eSBcInx8XCIgc2VnbWVudCBvclxuICAgICAgICAvLyBhIHRyYWlsaW5nL2xlYWRpbmcgXCJ8XCIsIHNvIHRoaXMgZ3VhcmQgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2l0aFxuICAgICAgICAvLyByZWFsIGRhdGEgLS0ga2VwdCBpbiBjYXNlIGEgZnV0dXJlIGRpY3Rpb25hcnkgZW50cnkgaXMgbWFsZm9ybWVkLlxuICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgIHdvcmRzLnB1c2gob3B0aW9ucy5sb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCBhbHRlcm5hdGlvbiAoXCJhfGJ8Y1wiKSBmcm9tIGEgbGlzdCBvZiB3b3JkcywgZXNjYXBpbmcgcmVnZXhcbiAgICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBMb25nZXN0IHdvcmRzIGFyZSBzb3J0ZWQgZmlyc3Q6IG90aGVyd2lzZSBhIHNob3J0ZXIgd29yZCB0aGF0IGlzIGEgcHJlZml4XG4gICAqIG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdFxuICAgKiBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlIG1pcy1jYXB0dXJlZCBieSB3aGF0ZXZlciBjb21lcyBuZXh0XG4gICAqIGluIHRoZSBwYXR0ZXJuLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbih3b3Jkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAubWFwKGVzY2FwZVJlZ2V4KVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZTogY29sbGVjdFdvcmRzKGtleSkgZm9sbG93ZWQgYnkgYnVpbGRBbHRlcm5hdGlvbigpIGluIG9uZSBjYWxsLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbkZvcihrZXk6IHN0cmluZywgb3B0aW9uczogeyBsb3dlcmNhc2U/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRBbHRlcm5hdGlvbih0aGlzLmNvbGxlY3RXb3JkcyhrZXksIG9wdGlvbnMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIEVkaXRvclJhbmdlLCBFZGl0b3JQb3NpdGlvbiwgbm9ybWFsaXplUGF0aCwgVEZpbGUsIE1hcmtkb3duVmlldywgV29ya3NwYWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYWlseU5vdGUsXG4gIGdldEFsbERhaWx5Tm90ZXMsXG4gIGdldERhaWx5Tm90ZSxcbn0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIE1vbWVudCBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFVzaW5nIHRoZSB0eXBlIGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IHR5cGVzIHNpbmNlIG1vbWVudCBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFRoZSBtb21lbnQgcGFja2FnZSBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW4sIGJ1dCB0aGUgTW9tZW50IHR5cGUgaXMgbm90IGV4cG9ydGVkIGZyb20gb2JzaWRpYW4gbW9kdWxlXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmNvbnN0IGRheXNPZldlZWs6IE9taXQ8RGF5T2ZXZWVrLCBcImxvY2FsZS1kZWZhdWx0XCI+W10gPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcjogRWRpdG9yKTogRWRpdG9yUmFuZ2Uge1xuICBjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cbiAgY29uc3QgcG9zID0gZWRpdG9yLnBvc1RvT2Zmc2V0KGN1cnNvcik7XG4gIGNvbnN0IGVkaXRvcldpdGhDTSA9IGVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBzdGF0ZTogeyB3b3JkQXQ6IChwb3M6IG51bWJlcikgPT4geyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSB8IG51bGwgfSB9IH07XG4gIC8vIHdvcmRBdCgpIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW5zaWRlL2FkamFjZW50IHRvIGEgd29yZFxuICAvLyAoZW1wdHkgbGluZSwgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24tb25seSB0ZXh0KSAtLSBmYWxsIGJhY2sgdG8gYVxuICAvLyB6ZXJvLXdpZHRoIHJhbmdlIGF0IHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgY29uc3Qgd29yZCA9IGVkaXRvcldpdGhDTS5jbT8uc3RhdGUud29yZEF0KHBvcyk7XG4gIGlmICghd29yZCkge1xuICAgIHJldHVybiB7IGZyb206IGN1cnNvciwgdG86IGN1cnNvciB9O1xuICB9XG4gIGNvbnN0IHdvcmRTdGFydCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLmZyb20pO1xuICBjb25zdCB3b3JkRW5kID0gZWRpdG9yLm9mZnNldFRvUG9zKHdvcmQudG8pO1xuICByZXR1cm4ge1xuICAgIGZyb206IHdvcmRTdGFydCxcbiAgICB0bzogd29yZEVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkVGV4dChlZGl0b3I6IEVkaXRvcik6IHN0cmluZyB7XG4gIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJpZXMgPSBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3IpO1xuICAgIC8vIFNlbGVjdCB0aGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24gdG8gZW5hYmxlIHRleHQgcmVwbGFjZW1lbnRcbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGRhdGUgcGFyc2luZyBjb21tYW5kcyB0byB3b3JrIGNvcnJlY3RseVxuICAgIGVkaXRvci5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuZnJvbSwgd29yZEJvdW5kYXJpZXMudG8pO1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdEN1cnNvcihcbiAgZWRpdG9yOiBFZGl0b3IsXG4gIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gIG5ld1N0cjogc3RyaW5nLFxuICBvbGRTdHI6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvck9mZnNldCA9IG5ld1N0ci5sZW5ndGggLSBvbGRTdHIubGVuZ3RoO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICBjaDogY3Vyc29yLmNoICsgY3Vyc29yT2Zmc2V0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBsZSBjb2RlIGV4aXN0YW50XG4gKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBEYXRlRm9ybWF0dGVyLmZvcm1hdCgpIGRpcmVjdGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF5T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRydXRoeShmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFtcInlcIiwgXCJ5ZXNcIiwgXCIxXCIsIFwidFwiLCBcInRydWVcIl0uaW5kZXhPZihmbGFnLnRvTG93ZXJDYXNlKCkpID49IDA7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIGZvcm1hdCBNb21lbnQuanMgZXQgcmV0b3VybmUgdW4gcsOpc3VsdGF0IGF2ZWMgcHLDqXZpc3VhbGlzYXRpb25cbiAqIEBwYXJhbSBmb3JtYXQgLSBMZSBmb3JtYXQgTW9tZW50LmpzIMOgIHZhbGlkZXJcbiAqIEByZXR1cm5zIFVuIG9iamV0IGNvbnRlbmFudCB2YWxpZCAoYm9vbMOpZW4pLCBlcnJvciAob3B0aW9ubmVsKSwgcHJldmlldyAob3B0aW9ubmVsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcHJldmlldz86IHN0cmluZyB9IHtcbiAgaWYgKCFmb3JtYXQgfHwgdHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlXCIgfTtcbiAgfVxuXG4gIC8vIExpbWl0ZXIgbGEgbG9uZ3VldXIgZHUgZm9ybWF0IHBvdXIgw6l2aXRlciBsZXMgYXR0YXF1ZXNcbiAgY29uc3QgTUFYX0ZPUk1BVF9MRU5HVEggPSAxMDA7XG4gIGlmIChmb3JtYXQubGVuZ3RoID4gTUFYX0ZPUk1BVF9MRU5HVEgpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBgTGUgZm9ybWF0IG5lIHBldXQgcGFzIGTDqXBhc3NlciAke01BWF9GT1JNQVRfTEVOR1RIfSBjYXJhY3TDqHJlc2AgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVzdERhdGUgPSBtb21lbnQoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0ZXN0RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBcbiAgICAvLyBWw6lyaWZpZXIgcXVlIGxlIGZvcm1hdCBwcm9kdWl0IHF1ZWxxdWUgY2hvc2UgZGUgdmFsaWRlXG4gICAgaWYgKCFmb3JtYXR0ZWQgfHwgZm9ybWF0dGVkID09PSBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFwiRm9ybWF0IGludmFsaWRlIG91IG5vbiByZWNvbm51XCIgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgbmUgY29udGllbnQgcGFzIGRlIGNhcmFjdMOocmVzIGRhbmdlcmV1eFxuICAgIC8vIE1vbWVudC5qcyB1dGlsaXNlIGRlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXgsIG1haXMgb24gdmV1dCDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgLy8gTGVzIGZvcm1hdHMgTW9tZW50LmpzIHZhbGlkZXMgY29udGllbm5lbnQgcHJpbmNpcGFsZW1lbnQgZGVzIGxldHRyZXMsIGNoaWZmcmVzIGV0IGNhcmFjdMOocmVzIGRlIHBvbmN0dWF0aW9uXG4gICAgY29uc3QgZGFuZ2Vyb3VzUGF0dGVybiA9IC9bPD5cIidgXS87XG4gICAgaWYgKGRhbmdlcm91c1BhdHRlcm4udGVzdChmb3JtYXQpKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBjb250aWVudCBkZXMgY2FyYWN0w6hyZXMgbm9uIGF1dG9yaXPDqXNcIiB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcHJldmlldzogZm9ybWF0dGVkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkVycmV1ciBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZHUgZm9ybWF0XCIgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIGV0IHZhbGlkZSB1bmUgZW50csOpZSB1dGlsaXNhdGV1ciBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBpbnB1dCAtIEwnZW50csOpZSDDoCBzYW5pdGl6ZXJcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBMb25ndWV1ciBtYXhpbWFsZSBhdXRvcmlzw6llIChkw6lmYXV0OiAyMDApXG4gKiBAcmV0dXJucyBMJ2VudHLDqWUgc2FuaXRpesOpZSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAyMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyXG4gIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG4gIFxuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJlamV0ZXIgbGVzIGNhcmFjdMOocmVzIGRlIGNvbnRyw7RsZSBldCBsZXMgY2FyYWN0w6hyZXMgc2FucyB1c2FnZSBsw6lnaXRpbWUgZGFucyB1bmVcbiAgLy8gZXhwcmVzc2lvbiBkZSBkYXRlIGVuIGxhbmdhZ2UgbmF0dXJlbCAoZXg6IFwiPFwiLCBcIj5cIiwgXCJgXCIpLiBPbiBuJ3V0aWxpc2UgcGFzIGRlIHdoaXRlbGlzdFxuICAvLyBkZSBzY3JpcHRzIGNhciBsZXMgZGF0ZXMgZW4gbGFuZ2FnZSBuYXR1cmVsIHV0aWxpc2VudCBkZXMgbGV0dHJlcyBkZSB0b3V0ZXMgbGVzIGxhbmd1ZXNcbiAgLy8gc3VwcG9ydMOpZXMgKGxhdGluLCBjeXJpbGxpcXVlLCBqYXBvbmFpcywgY2hpbm9pcy4uLiksIGFpbnNpIHF1ZSBsJ2Fwb3N0cm9waGVcbiAgLy8gKGV4OiBcIkF1am91cmQnaHVpXCIgZW4gZnJhbsOnYWlzLCBcItCfJ9GP0YLQvdC40YbRllwiIGVuIHVrcmFpbmllbikuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIGludGVudGlvbmFsOiB0aGlzIHJhbmdlIGlzIHRoZSBhY3R1YWwgc2FuaXRpemF0aW9uIHRhcmdldCwgbm90IGEgdHlwby5cbiAgY29uc3QgaW52YWxpZENoYXJzUGF0dGVybiA9IC9bPD5gXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXS87XG5cbiAgaWYgKGludmFsaWRDaGFyc1BhdHRlcm4udGVzdCh0cmltbWVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIHBhcmFtw6h0cmUgVVJJIHBvdXIgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICogQHBhcmFtIHBhcmFtIC0gTGUgcGFyYW3DqHRyZSDDoCB2YWxpZGVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMTAwKVxuICogQHJldHVybnMgTGUgcGFyYW3DqHRyZSB2YWxpZMOpIG91IG51bGwgc2kgaW52YWxpZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXJpUGFyYW0ocGFyYW06IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsIG1heExlbmd0aCA9IDEwMCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gc2FuaXRpemVJbnB1dChwYXJhbSwgbWF4TGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF5T2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzT2ZXZWVrLmluZGV4T2YoZGF5T2ZXZWVrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVdlZWtTdGFydCgpOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPiB7XG4gIGNvbnN0IGxvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YSgpIGFzIHsgX3dlZWs/OiB7IGRvdzogbnVtYmVyIH0gfTtcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBsb2NhbGVEYXRhLl93ZWVrPy5kb3cgPz8gMDtcbiAgcmV0dXJuIGRheXNPZldlZWtbc3RhcnRPZldlZWtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsoYXBwOiBBcHAsIHN1YnBhdGg6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmF1bHRXaXRoQ29uZmlnID0gYXBwLnZhdWx0IGFzIHR5cGVvZiBhcHAudmF1bHQgJiB7IGdldENvbmZpZzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH07XG4gIGNvbnN0IHVzZU1hcmtkb3duTGlua3MgPSB2YXVsdFdpdGhDb25maWcuZ2V0Q29uZmlnKFwidXNlTWFya2Rvd25MaW5rc1wiKTtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoc3VicGF0aCk7XG5cbiAgaWYgKHVzZU1hcmtkb3duTGlua3MpIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgWyR7YWxpYXN9XSgke3BhdGgucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbJHtzdWJwYXRofV0oJHtwYXRofSlgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgW1ske3BhdGh9fCR7YWxpYXN9XV1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofV1dYDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRGFpbHlOb3RlKGRhdGU6IE1vbWVudCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG4gIC8vIEJvcnJvd2VkIGZyb20gdGhlIFNsYXRlZCBwbHVnaW46XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90Z3Jvc2luZ2VyL3NsYXRlZC1vYnNpZGlhbi9ibG9iL21haW4vc3JjL3ZhdWx0LnRzI0wxN1xuICBjb25zdCBkZXNpcmVkTm90ZSA9IGdldERhaWx5Tm90ZShkYXRlLCBnZXRBbGxEYWlseU5vdGVzKCkpO1xuICBpZiAoZGVzaXJlZE5vdGUpIHtcbiAgICByZXR1cm4gZGVzaXJlZE5vdGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZURhaWx5Tm90ZShkYXRlKTtcbn1cblxuLy8gU291cmNlIGBjaHJvbm9gOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dhbmFzaXQvY2hyb25vL2Jsb2IvNDdmMTFkYTZiNjU2Y2Q1Y2I2MWYyNDZlOGNjYTcwNjk4MzIwOGRlZC9zcmMvdXRpbHMvcGF0dGVybi50cyNMOFxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LCBXYW5hc2l0IFRhbmFraXRydW5ncnVhbmdcbnR5cGUgRGljdGlvbmFyeUxpa2UgPSBzdHJpbmdbXSB8IHsgW3dvcmQ6IHN0cmluZ106IHVua25vd24gfSB8IE1hcDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBUaGUgQXJyYXkvTWFwIGJyYW5jaGVzIGJlbG93IGFyZSB1bnJlYWNoYWJsZSB3aXRoIHRoaXMgZmlsZSdzIG9ubHkgY2FsbGVyXG4vLyAobWF0Y2hBbnlQYXR0ZXJuKCkgaXMgb25seSBldmVyIGludm9rZWQgd2l0aCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSwgYVxuLy8gcGxhaW4gb2JqZWN0KSAtLSBrZXB0IGJlY2F1c2UgdGhleSdyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbSBjaHJvbm8tbm9kZSdzXG4vLyBtb3JlIGdlbmVyaWNhbGx5LXVzZWQgb3JpZ2luYWwsIG5vdCBiZWNhdXNlIHRoZXkncmUgY3VycmVudGx5IGV4ZXJjaXNlZC5cbmZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgfSBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAga2V5cyA9IEFycmF5LmZyb20oZGljdGlvbmFyeS5rZXlzKCkpO1xuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlMaWtlKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAuam9pbihcInxcIilcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cbiAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuXG5jb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWTogeyBbd29yZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZpcnN0OiAxLFxuICBzZWNvbmQ6IDIsXG4gIHRoaXJkOiAzLFxuICBmb3VydGg6IDQsXG4gIGZpZnRoOiA1LFxuICBzaXh0aDogNixcbiAgc2V2ZW50aDogNyxcbiAgZWlnaHRoOiA4LFxuICBuaW50aDogOSxcbiAgdGVudGg6IDEwLFxuICBlbGV2ZW50aDogMTEsXG4gIHR3ZWxmdGg6IDEyLFxuICB0aGlydGVlbnRoOiAxMyxcbiAgZm91cnRlZW50aDogMTQsXG4gIGZpZnRlZW50aDogMTUsXG4gIHNpeHRlZW50aDogMTYsXG4gIHNldmVudGVlbnRoOiAxNyxcbiAgZWlnaHRlZW50aDogMTgsXG4gIG5pbmV0ZWVudGg6IDE5LFxuICB0d2VudGlldGg6IDIwLFxuICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgXCJ0d2VudHktZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICBcInR3ZW50eSB0aGlyZFwiOiAyMyxcbiAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHktZm91cnRoXCI6IDI0LFxuICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5IHNpeHRoXCI6IDI2LFxuICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHktc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gIFwidHdlbnR5IG5pbnRoXCI6IDI5LFxuICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgdGhpcnRpZXRoOiAzMCxcbiAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gIFwidGhpcnR5LWZpcnN0XCI6IDMxLFxufTtcblxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oXG4gIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZXG4pfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGh8w6htZXzDqG1lfGVyfGV8ZXJ8ZXxcXFxcLik/KWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG9yZGluYWwgc3VmZml4ZXM6IHN0LCBuZCwgcmQsIHRoLCDDqG1lLCBlciwgZSwgYW5kIHRyYWlsaW5nIGRvdFxuICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGh8w6htZXxlcnxlfFxcLikkL2ksIFwiXCIpO1xuICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cblxuLyoqXG4gKiBEw6l0ZXJtaW5lIHNpIHVuZSBleHByZXNzaW9uIHRlbXBvcmVsbGUgcmVsYXRpdmUgY291cnRlIChtaW51dGVzL2hldXJlcykgZGV2cmFpdCBvbWV0dHJlIGxhIGRhdGVcbiAqIGNhciBlbGxlIHJlc3RlIGRhbnMgbGEgbcOqbWUgam91cm7DqWUgKGF1am91cmQnaHVpKVxuICogQHBhcmFtIHRleHQgLSBMZSB0ZXh0ZSBkZSBsJ2V4cHJlc3Npb24gdGVtcG9yZWxsZSAoZXg6IFwiZGFucyAxNSBtaW5cIiwgXCJpbiAyIGhvdXJzXCIsIFwiMzDliIbpkJjlvoxcIilcbiAqIEBwYXJhbSBsYW5ndWFnZXMgLSBMZXMgbGFuZ3VlcyBzdXBwb3J0w6llcyBwb3VyIGTDqXRlY3RlciBsZXMgcGF0dGVybnNcbiAqIEByZXR1cm5zIHRydWUgc2kgYydlc3QgdW5lIGV4cHJlc3Npb24gcmVsYXRpdmUgY291cnRlIHF1aSByZXN0ZSBhdWpvdXJkJ2h1aVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHRleHQ6IHN0cmluZywgbGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlclRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBjb25zdCB0YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuXG4gIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJpblwiKTtcbiAgY29uc3QgbWludXRlUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJtaW51dGVcIik7XG4gIGNvbnN0IGhvdXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImhvdXJcIik7XG4gIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCIpIG1hcmsgXCJsYXRlclwiIGluc3RlYWQgb2ZcbiAgLy8gcHJlZml4aW5nIHdpdGggXCJpblwiOyBzZWUgdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIC8gcGFyc2VyLnRzIGZvciB3aHkgdGhpc1xuICAvLyBpcyBhIHNlcGFyYXRlIGtleSBmcm9tIHRoZSBkYXkvaG91ci9taW51dGUgd29yZCBsaXN0cy5cbiAgY29uc3QgbGF0ZXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImxhdGVyXCIpO1xuXG4gIGNvbnN0IHNob3J0UmVsYXRpdmVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyBtaW51dGUvaG91ciB0b2dldGhlclxuICAvLyB3aXRoIGluL2xhdGVyLCBzbyB0aGUgbmVzdGVkIGBpZiAobWludXRlUGF0dGVybilgL2BpZiAoaG91clBhdHRlcm4pYFxuICAvLyBjaGVja3MgYmVsb3cgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgdGhlaXIgZW5jbG9zaW5nIGBpZmAgaXMgdHJ1ZVxuICAvLyAtLSBubyBjb21iaW5hdGlvbiBvZiByZWFsIChvciB1bmtub3duKSBsYW5ndWFnZSBjb2RlcyBwcm9kdWNlcyBcImluXCIgb3JcbiAgLy8gXCJsYXRlclwiIHdpdGhvdXQgYWxzbyBwcm9kdWNpbmcgXCJtaW51dGVcIiBhbmQgXCJob3VyXCIuIEtlcHQgYXMgYSBndWFyZCBpblxuICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG5cbiAgLy8gUHJlZml4IHN0eWxlOiBcImluIFggbWludXRlc1wiL1wiZGFucyBYIG1pblwiLy4uLlxuICBpZiAoaW5QYXR0ZXJuKSB7XG4gICAgaWYgKG1pbnV0ZVBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF4oPzoke2luUGF0dGVybn0pXFxcXHMrXFxcXGQrXFxcXHMrKD86JHttaW51dGVQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7aG91clBhdHRlcm59KWAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1ZmZpeCBzdHlsZTogXCJYIG1pbnV0ZXNcIiArIFwibGF0ZXJcIiBtYXJrZXIsIGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCJcbiAgaWYgKGxhdGVyUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHttaW51dGVQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgICBpZiAoaG91clBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF5cXFxcZCtcXFxccyooPzoke2hvdXJQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydFJlbGF0aXZlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChsb3dlclRleHQpKTtcbn1cblxuLyoqXG4gKiBPYnRpZW50IGwnw6lkaXRldXIgYWN0aWYgZGUgbWFuacOocmUgZmxleGlibGUsIGNvbXBhdGlibGUgYXZlYyBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2luc1xuICogRXNzYWllIHBsdXNpZXVycyBtw6l0aG9kZXMgcG91ciB0cm91dmVyIGwnw6lkaXRldXIgYWN0aWZcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBMJ2luc3RhbmNlIFdvcmtzcGFjZSBkJ09ic2lkaWFuXG4gKiBAcmV0dXJucyBMJ8OpZGl0ZXVyIGFjdGlmIG91IG51bGwgc2kgYXVjdW4gbidlc3QgdHJvdXbDqVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZTogV29ya3NwYWNlKTogRWRpdG9yIHwgbnVsbCB7XG4gIC8vIE3DqXRob2RlIDE6IFV0aWxpc2VyIGFjdGl2ZUVkaXRvciBzaSBkaXNwb25pYmxlIChPYnNpZGlhbiByw6ljZW50KVxuICBjb25zdCB3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yID0gd29ya3NwYWNlIGFzIHR5cGVvZiB3b3Jrc3BhY2UgJiB7IGFjdGl2ZUVkaXRvcj86IHsgZWRpdG9yPzogRWRpdG9yIH0gfTtcbiAgaWYgKHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yPy5lZGl0b3IpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvci5hY3RpdmVFZGl0b3IuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMjogVXRpbGlzZXIgZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpIChtw6l0aG9kZSBzdGFuZGFyZClcbiAgY29uc3QgYWN0aXZlVmlldyA9IHdvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGlmIChhY3RpdmVWaWV3Py5lZGl0b3IpIHtcbiAgICByZXR1cm4gYWN0aXZlVmlldy5lZGl0b3I7XG4gIH1cblxuICAvLyBNw6l0aG9kZSAzOiBDaGVyY2hlciBkYW5zIHRvdXMgbGVzIGxlYWZzIHBvdXIgdHJvdXZlciB1biDDqWRpdGV1ciBhY3RpZlxuICAvLyBVdGlsZSBwb3VyIFF1aWNrQWRkIGV0IGF1dHJlcyBwbHVnaW5zIHF1aSBjcsOpZW50IGRlcyDDqWRpdGV1cnMgcGVyc29ubmFsaXPDqXNcbiAgY29uc3QgYWN0aXZlTGVhZiA9IHdvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoYWN0aXZlTGVhZikge1xuICAgIGNvbnN0IHZpZXcgPSBhY3RpdmVMZWFmLnZpZXc7XG4gICAgLy8gVsOpcmlmaWVyIHNpIGxhIHZ1ZSBhIHVuIMOpZGl0ZXVyXG4gICAgY29uc3Qgdmlld1dpdGhFZGl0b3IgPSB2aWV3IGFzIHR5cGVvZiB2aWV3ICYgeyBlZGl0b3I/OiBFZGl0b3IgfTtcbiAgICBpZiAodmlld1dpdGhFZGl0b3IuZWRpdG9yKSB7XG4gICAgICByZXR1cm4gdmlld1dpdGhFZGl0b3IuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRob2RlcyA0IGV0IDU6IFBhcmNvdXJpciB0b3VzIGxlcyBsZWFmcyBtYXJrZG93biwgZW4gcHLDqWbDqXJhbnQgY2VsdWkgcXVpXG4gIC8vIGEgbGUgZm9jdXMsIHNpbm9uIGxlIHByZW1pZXIgw6lkaXRldXIgZGlzcG9uaWJsZSBlbiBkZXJuaWVyIHJlY291cnMuXG4gIGxldCBmaXJzdEF2YWlsYWJsZUVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgbGVhZiBvZiB3b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFwibWFya2Rvd25cIikpIHtcbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9ICh2aWV3LmVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBoYXNGb2N1cz86ICgpID0+IGJvb2xlYW4gfSB9KS5jbTtcbiAgICAgIGlmIChlZGl0b3JFbD8uaGFzRm9jdXM/LigpKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGZpcnN0QXZhaWxhYmxlRWRpdG9yID0gZmlyc3RBdmFpbGFibGVFZGl0b3IgPz8gdmlldy5lZGl0b3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpcnN0QXZhaWxhYmxlRWRpdG9yO1xufVxuXG4vLyBFeHRyYWN0cyBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhIGNhdWdodCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuIFBsYWluXG4vLyBgU3RyaW5nKGUpYCBpcyB1bnNhZmUgZm9yIGFyYml0cmFyeSB1bmtub3duIHZhbHVlcyAoYSB0aHJvd24gcGxhaW4gb2JqZWN0XG4vLyB3b3VsZCBzdHJpbmdpZnkgdG8gdGhlIHVzZWxlc3MgXCJbb2JqZWN0IE9iamVjdF1cIiksIGJ1dCBibGFua2V0XG4vLyBgSlNPTi5zdHJpbmdpZnkoZSlgIGlzbid0IHJpZ2h0IGVpdGhlciAtLSBpdCB3b3VsZCB3cmFwIHRocm93biBzdHJpbmdzIGluXG4vLyBsaXRlcmFsIHF1b3RlcywgY2hhbmdpbmcgd2hhdCBhbHJlYWR5LXRocm93bi1zdHJpbmcgY2FsbCBzaXRlcyBsb2cuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgaWYgKHR5cGVvZiBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgLy8gVHdvLWNsaWNrIGNvbmZpcm1hdGlvbiBmb3IgXCJDbGVhciBhbGxcIjogZmlyc3QgY2xpY2sgYXJtcyBpdCwgc2Vjb25kXG4gIC8vIGNsaWNrIChvbiB0aGUgc2FtZSByZW5kZXIpIGFjdHVhbGx5IGNsZWFycyAtLSBhdm9pZHMgd2lwaW5nIHRoZSB3aG9sZVxuICAvLyBoaXN0b3J5IGZyb20gYSBzaW5nbGUgYWNjaWRlbnRhbCBjbGljaywgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBhXG4gIC8vIHNlcGFyYXRlIGNvbmZpcm1hdGlvbiBtb2RhbCBvciBhIHRpbWVvdXQgdG8gcmVzZXQgdGhlIGFybWluZyBzdGF0ZS5cbiAgcHJpdmF0ZSBjbGVhckFsbEFybWVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaGVkIGJlZm9yZSB0b3VjaGluZyB0aGUgRE9NIHNvIHRoZSBtb2RhbCBkb2Vzbid0IGZsYXNoIGFuXG4gICAgLy8gZW1wdHkvaGVhZGVyLW9ubHkgc3RhdGUgd2hpbGUgdGhlIChhc3luYykgaGlzdG9yeSBsb2FkIGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTtcblxuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1oaXN0b3J5LW1hbmFnZXItbW9kYWxcIik7XG5cbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWFuYWdlIHN1Z2dlc3Rpb24gaGlzdG9yeVwiIH0pO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJObyBoaXN0b3J5IHlldC4gU3VnZ2VzdGlvbnMgeW91IHNlbGVjdCBmcm9tIHRoZSBhdXRvc3VnZ2VzdCBwb3B1cCB3aWxsIGFwcGVhciBoZXJlLlwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgIC5zZXROYW1lKFwiQ2xlYXIgYWxsIGhpc3RvcnlcIilcbiAgICAgIC5zZXREZXNjKHRoaXMuY2xlYXJBbGxBcm1lZFxuICAgICAgICA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybSAtLSB0aGlzIGNhbm5vdCBiZSB1bmRvbmUuXCJcbiAgICAgICAgOiBgUmVtb3ZlIGFsbCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzLmApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jbGVhckFsbEFybWVkID8gXCJDbGljayBhZ2FpbiB0byBjb25maXJtXCIgOiBcIkNsZWFyIGFsbFwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgIGJ1dHRvbi5zZXRXYXJuaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5jbGVhckFsbEFybWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuY2xlYXJIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgbGFzdFVzZWRUZXh0ID0gbW9tZW50KGVudHJ5Lmxhc3RVc2VkKS5mcm9tTm93KCk7XG4gICAgICBjb25zdCB0aW1lc1RleHQgPSBlbnRyeS5jb3VudCA9PT0gMSA/IFwiMSB0aW1lXCIgOiBgJHtlbnRyeS5jb3VudH0gdGltZXNgO1xuXG4gICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKGVudHJ5LmRpc3BsYXkpXG4gICAgICAgIC5zZXREZXNjKGBVc2VkICR7dGltZXNUZXh0fSDCtyBsYXN0IHVzZWQgJHtsYXN0VXNlZFRleHR9YClcbiAgICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlbW92ZSB0aGlzIGVudHJ5XCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgc2luZ2xlIGVudHJ5IGlzIGEgZGlmZmVyZW50IGFjdGlvbiBmcm9tIFwiQ2xlYXJcbiAgICAgICAgICAgICAgLy8gYWxsXCIgLS0gZG9uJ3QgbGVhdmUgdGhhdCBidXR0b24gYXJtZWQgZnJvbSBhbiBlYXJsaWVyIGNsaWNrLFxuICAgICAgICAgICAgICAvLyB3aGVyZSBhIGxhdGVyLCB1bnJlbGF0ZWQgXCJDbGVhciBhbGxcIiBjbGljayB3b3VsZCB0aGVuIHdpcGVcbiAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyB3aXRob3V0IHRoZSB1c2VyIHJlLWNvbmZpcm1pbmcgdGhhdCBzcGVjaWZpYyBpbnRlbnQuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZW1vdmVFbnRyeShlbnRyeS5rZXkpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcbmltcG9ydCBIaXN0b3J5TWFuYWdlck1vZGFsIGZyb20gXCIuL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWxcIjtcblxuLyoqXG4gKiBEYXkgb2YgdGhlIHdlZWsgdHlwZSBmb3Igd2VlayBzdGFydCBwcmVmZXJlbmNlLlxuICogQ2FuIGJlIGEgc3BlY2lmaWMgZGF5IG9yIFwibG9jYWxlLWRlZmF1bHRcIiB0byB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gKi9cbmV4cG9ydCB0eXBlIERheU9mV2VlayA9XG4gIHwgXCJzdW5kYXlcIlxuICB8IFwibW9uZGF5XCJcbiAgfCBcInR1ZXNkYXlcIlxuICB8IFwid2VkbmVzZGF5XCJcbiAgfCBcInRodXJzZGF5XCJcbiAgfCBcImZyaWRheVwiXG4gIHwgXCJzYXR1cmRheVwiXG4gIHwgXCJsb2NhbGUtZGVmYXVsdFwiO1xuXG4vKipcbiAqIFBsdWdpbiBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBDb250YWlucyBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTmF0dXJhbCBMYW5ndWFnZSBEYXRlcyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEU2V0dGluZ3Mge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IHN0cmluZztcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHRpbWVGb3JtYXQ6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogRGF5T2ZXZWVrO1xuICBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuXG4gIGVuZ2xpc2g6IGJvb2xlYW47XG4gIGphcGFuZXNlOiBib29sZWFuO1xuICBmcmVuY2g6IGJvb2xlYW47XG4gIGdlcm1hbjogYm9vbGVhbjtcbiAgcG9ydHVndWVzZTogYm9vbGVhbjtcbiAgZHV0Y2g6IGJvb2xlYW47XG4gIHNwYW5pc2g6IGJvb2xlYW47XG4gIGl0YWxpYW46IGJvb2xlYW47XG4gIHJ1c3NpYW46IGJvb2xlYW47XG4gIHVrcmFpbmlhbjogYm9vbGVhbjtcbiAgY2hpbmVzZTogYm9vbGVhbjtcbiAga29yZWFuOiBib29sZWFuO1xuXG4gIG1vZGFsVG9nZ2xlTGluazogYm9vbGVhbjtcbiAgLy8gRGF0ZS1vbmx5OiB0aGUgRGF0ZSBQaWNrZXIgZGVsaWJlcmF0ZWx5IG5ldmVyIHN1cmZhY2VzIGEgdGltZSAtLSB0aGVyZSdzXG4gIC8vIG5vIHRpbWUtb2YtZGF5IGNvbnRyb2wgYW55d2hlcmUgaW4gdGhhdCBtb2RhbCdzIFVJLCBzbyBhIGZvcm1hdFxuICAvLyBpbmNsdWRpbmcgdGltZSB0b2tlbnMgd291bGQgb25seSBldmVyIGRpc3BsYXkgYSBtZWFuaW5nbGVzcyBjb25zdGFudFxuICAvLyAodGhlIHBpY2tlZCBkYXRlIG5vcm1hbGl6ZWQgdG8gbWlkbmlnaHQpLiBVc2UgdGhlIFwiSW5zZXJ0IHRoZSBjdXJyZW50XG4gIC8vIGRhdGUgYW5kIHRpbWVcIiBjb21tYW5kLCBvciB0eXBlIGEgZnVsbCBleHByZXNzaW9uIGludG8gdGhlIGF1dG9zdWdnZXN0LFxuICAvLyBmb3IgYW55dGhpbmcgdGhhdCBhY3R1YWxseSBuZWVkcyBhIHRpbWUuXG4gIG1vZGFsTW9tZW50Rm9ybWF0OiBzdHJpbmc7XG5cbiAgLy8gU21hcnQgc3VnZ2VzdGlvbnNcbiAgZW5hYmxlU21hcnRTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zOiBib29sZWFuO1xuICBlbmFibGVDb250ZXh0U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG5cbiAgLy8gU21hcnQgZGF0ZSBmb3JtYXR0aW5nXG4gIG9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE5MRFNldHRpbmdzID0ge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IHRydWUsXG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IFwiQFwiLFxuICBpc0F1dG9zdWdnZXN0RW5hYmxlZDogdHJ1ZSxcblxuICBmb3JtYXQ6IFwiWVlZWS1NTS1ERFwiLFxuICB0aW1lRm9ybWF0OiBcIkhIOm1tXCIsXG4gIHNlcGFyYXRvcjogXCIgXCIsXG4gIHdlZWtTdGFydDogXCJsb2NhbGUtZGVmYXVsdFwiLFxuICBsYW5ndWFnZXM6IFtcImVuXCJdLFxuXG4gIGVuZ2xpc2g6IHRydWUsICAvLyBTeW5jaHJvbml6ZWQgd2l0aCBsYW5ndWFnZXM6IFtcImVuXCJdXG4gIGphcGFuZXNlOiBmYWxzZSxcbiAgZnJlbmNoOiBmYWxzZSxcbiAgZ2VybWFuOiBmYWxzZSxcbiAgcG9ydHVndWVzZTogZmFsc2UsXG4gIGR1dGNoOiBmYWxzZSxcbiAgc3BhbmlzaDogZmFsc2UsXG4gIGl0YWxpYW46IGZhbHNlLFxuICBydXNzaWFuOiBmYWxzZSxcbiAgdWtyYWluaWFuOiBmYWxzZSxcbiAgY2hpbmVzZTogZmFsc2UsXG4gIGtvcmVhbjogZmFsc2UsXG5cbiAgbW9kYWxUb2dnbGVMaW5rOiBmYWxzZSxcbiAgbW9kYWxNb21lbnRGb3JtYXQ6IFwiWVlZWS1NTS1ERFwiLFxuXG4gIC8vIFNtYXJ0IHN1Z2dlc3Rpb25zXG4gIGVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnM6IHRydWUsXG4gIGVuYWJsZUhpc3RvcnlTdWdnZXN0aW9uczogdHJ1ZSxcbiAgZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zOiB0cnVlLFxuXG4gIC8vIFNtYXJ0IGRhdGUgZm9ybWF0dGluZ1xuICBvbWl0RGF0ZUZvclNob3J0UmVsYXRpdmU6IHRydWUsXG59O1xuXG5jb25zdCB3ZWVrZGF5cyA9IFtcbiAgXCJzdW5kYXlcIixcbiAgXCJtb25kYXlcIixcbiAgXCJ0dWVzZGF5XCIsXG4gIFwid2VkbmVzZGF5XCIsXG4gIFwidGh1cnNkYXlcIixcbiAgXCJmcmlkYXlcIixcbiAgXCJzYXR1cmRheVwiLFxuXTtcblxuZXhwb3J0IGNsYXNzIE5MRFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHAsIHBsdWdpbik7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gIH1cblxuICBkaXNwbGF5KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG4gICAgY29uc3QgbG9jYWxpemVkV2Vla2RheXMgPSBtb21lbnQud2Vla2RheXMoKTtcbiAgICBjb25zdCBsb2NhbGVXZWVrU3RhcnQgPSBnZXRMb2NhbGVXZWVrU3RhcnQoKTtcblxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJOYXR1cmFsIGxhbmd1YWdlIGRhdGVzXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiUGFyc2VyIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgZGF0ZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldERlZmF1bHRGb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkLnZhbGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCA9IHZhbHVlIHx8IFwiWVlZWS1NTS1ERFwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbi5cbiAgICAgICAgICAgICAgLy8gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0IGd1YXJhbnRlZXMgcHJldmlldyBpcyBzZXRcbiAgICAgICAgICAgICAgLy8gd2hlbmV2ZXIgdmFsaWQgaXMgdHJ1ZSwgc28gdGhlIFwiOiAnJ1wiIGZhbGxiYWNrIGJlbG93IGlzXG4gICAgICAgICAgICAgIC8vIHVucmVhY2hhYmxlIHdpdGggcmVhbCBkYXRhLlxuICAgICAgICAgICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBZmZpY2hlciBsJ2VycmV1ciBkYW5zIGxhIGRlc2NyaXB0aW9uLiBFdmVyeSBpbnZhbGlkLWZvcm1hdFxuICAgICAgICAgICAgICAvLyByZXR1cm4gZnJvbSB2YWxpZGF0ZU1vbWVudEZvcm1hdCgpIGFsd2F5cyBzZXRzIGVycm9yLCBzbyB0aGVcbiAgICAgICAgICAgICAgLy8gXCJGb3JtYXQgaW52YWxpZGVcIiBmYWxsYmFjayBiZWxvdyBpcyB1bnJlYWNoYWJsZSB3aXRoIHJlYWwgZGF0YS5cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAgIC8vIE5lIHBhcyBzYXV2ZWdhcmRlciBsZSBmb3JtYXQgaW52YWxpZGUsIHJlc3RhdXJlciBsZSBwcsOpY8OpZGVudFxuICAgICAgICAgICAgICB0ZXh0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgaWYgKGluaXRpYWxWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxWYWxpZGF0aW9uLnByZXZpZXcpIHtcbiAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiV2VlayBzdGFydHMgb25cIilcbiAgICAgIC5zZXREZXNjKFwiV2hpY2ggZGF5IHRvIGNvbnNpZGVyIGFzIHRoZSBzdGFydCBvZiB0aGUgd2Vla1wiKVxuICAgICAgLmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oXCJsb2NhbGUtZGVmYXVsdFwiLCBgTG9jYWxlIGRlZmF1bHQgKCR7U3RyaW5nKGxvY2FsZVdlZWtTdGFydCl9KWApO1xuICAgICAgICBsb2NhbGl6ZWRXZWVrZGF5cy5mb3JFYWNoKChkYXksIGkpID0+IHtcbiAgICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24od2Vla2RheXNbaV0sIGRheSk7XG4gICAgICAgIH0pO1xuICAgICAgICBkcm9wZG93bi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGRyb3Bkb3duLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZTogRGF5T2ZXZWVrKSA9PiB7XG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0ID0gdmFsdWU7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJMYW5ndWFnZSBzZXR0aW5nc1wiKTtcblxuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkVuZ2xpc2hcIiwgXCJlbmdsaXNoXCIsIFwiZW5cIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiSmFwYW5lc2VcIiwgXCJqYXBhbmVzZVwiLCBcImphXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkZyZW5jaFwiLCBcImZyZW5jaFwiLCBcImZyXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkdlcm1hblwiLCBcImdlcm1hblwiLCBcImRlXCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJQb3J0dWd1ZXNlXCIsIFwicG9ydHVndWVzZVwiLCBcInB0XCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJEdXRjaFwiLCBcImR1dGNoXCIsIFwibmxcIiwgXCJ1bmRlciBkZXZlbG9wbWVudFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJTcGFuaXNoXCIsIFwic3BhbmlzaFwiLCBcImVzXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkl0YWxpYW5cIiwgXCJpdGFsaWFuXCIsIFwiaXRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiUnVzc2lhblwiLCBcInJ1c3NpYW5cIiwgXCJydVwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJVa3JhaW5pYW5cIiwgXCJ1a3JhaW5pYW5cIiwgXCJ1a1wiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJDaGluZXNlIChUcmFkaXRpb25hbClcIiwgXCJjaGluZXNlXCIsIFwiemguaGFudFwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiS29yZWFuXCIsIFwia29yZWFuXCIsIFwia29cIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiSG90a2V5IGZvcm1hdHRpbmcgc2V0dGluZ3NcIik7XG5cbiAgICBjb25zdCB0aW1lRm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUaW1lIGZvcm1hdFwiKVxuICAgICAgLnNldERlc2MoXCJGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldERlZmF1bHRGb3JtYXQoXCJISDptbVwiKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlIHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkLnZhbGlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgPSB2YWx1ZSB8fCBcIkhIOm1tXCI7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAvLyBNZXR0cmUgw6Agam91ciBsYSBkZXNjcmlwdGlvbiBhdmVjIGxhIHByw6l2aXN1YWxpc2F0aW9uIChzZWVcbiAgICAgICAgICAgICAgLy8gdGhlIGRhdGUtZm9ybWF0IHNldHRpbmcgYWJvdmU6IHRoZSBcIjogJydcIiBmYWxsYmFjayBoZXJlIGlzXG4gICAgICAgICAgICAgIC8vIHNpbWlsYXJseSB1bnJlYWNoYWJsZSBnaXZlbiB2YWxpZGF0ZU1vbWVudEZvcm1hdCgpJ3MgY29udHJhY3QpLlxuICAgICAgICAgICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWZmaWNoZXIgbCdlcnJldXIgZGFucyBsYSBkZXNjcmlwdGlvbiAodW5yZWFjaGFibGUgZmFsbGJhY2ssXG4gICAgICAgICAgICAgIC8vIHNhbWUgcmVhc29uaW5nIGFzIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlKS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICBcbiAgICAvLyBBZmZpY2hlciBsYSBwcsOpdmlzdWFsaXNhdGlvbiBpbml0aWFsZVxuICAgIGNvbnN0IGluaXRpYWxUaW1lVmFsaWRhdGlvbiA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVGltZVZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnByZXZpZXcpIHtcbiAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgKFByZXZpZXc6ICR7aW5pdGlhbFRpbWVWYWxpZGF0aW9uLnByZXZpZXd9KWApO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJTZXBhcmF0b3JcIilcbiAgICAgIC5zZXREZXNjKFwiU2VwYXJhdG9yIGJldHdlZW4gZGF0ZSBhbmQgdGltZSBmb3IgZW50cmllcyB0aGF0IGhhdmUgYm90aFwiKVxuICAgICAgLmFkZFRleHQoKHRleHQpID0+XG4gICAgICAgIHRleHRcbiAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJTZXBhcmF0b3IgaXMgZW1wdHlcIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvciA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGF1dG9zdWdnZXN0XCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkVuYWJsZSBkYXRlIGF1dG9zdWdnZXN0XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgYElucHV0IGRhdGVzIHdpdGggbmF0dXJhbCBsYW5ndWFnZS4gT3BlbiB0aGUgc3VnZ2VzdCBtZW51IHdpdGggJHt0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlfWBcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJBZGQgZGF0ZXMgYXMgbGluaz9cIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIklmIGVuYWJsZWQsIGRhdGVzIGNyZWF0ZWQgdmlhIGF1dG9zdWdnZXN0IHdpbGwgYmUgd3JhcHBlZCBpbiBbW3dpa2lsaW5rc11dXCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmF1dG9zdWdnZXN0VG9nZ2xlTGluaylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmsgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgY29uc3QgdHJpZ2dlclBocmFzZURlc2MgPSBcIkNoYXJhY3RlcihzKSB0aGF0IHdpbGwgY2F1c2UgdGhlIGRhdGUgYXV0b3N1Z2dlc3QgdG8gb3BlblwiO1xuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VTZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIlRyaWdnZXIgcGhyYXNlXCIpXG4gICAgICAuc2V0RGVzYyh0cmlnZ2VyUGhyYXNlRGVzYylcbiAgICAgIC5hZGRNb21lbnRGb3JtYXQoKHRleHQpID0+XG4gICAgICAgIHRleHRcbiAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoREVGQVVMVF9TRVRUSU5HUy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlIHx8IFwiQFwiKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlID0gdHJpbW1lZDtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIHRyaWdnZXJQaHJhc2VTZXR0aW5nLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQW4gZW1wdHkgdHJpZ2dlciBwaHJhc2UgbWFrZXMgb25UcmlnZ2VyKCknc1xuICAgICAgICAgICAgICAvLyBxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpIGFsd2F5cyB0cnVlLCBzbyB0aGVcbiAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QgcG9wdXAgd291bGQgZmlyZSBvbiB2aXJ0dWFsbHkgZXZlcnkga2V5c3Ryb2tlLlxuICAgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gc2F2ZSBpdCwgbWF0Y2hpbmcgdGhlIERhdGUvVGltZSBmb3JtYXQgZmllbGRzIGFib3ZlLlxuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKGAke3RyaWdnZXJQaHJhc2VEZXNjfSAtIOKaoO+4jyBUcmlnZ2VyIHBocmFzZSBjYW5ub3QgYmUgZW1wdHlgKTtcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlIHx8IFwiQFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIlNtYXJ0IHN1Z2dlc3Rpb25zXCIpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkVuYWJsZSBzbWFydCBzdWdnZXN0aW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiRW5hYmxlIGludGVsbGlnZW50IHN1Z2dlc3Rpb25zIGJhc2VkIG9uIHlvdXIgdXNhZ2UgaGlzdG9yeSBhbmQgZG9jdW1lbnQgY29udGV4dFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkhpc3RvcnktYmFzZWQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkxlYXJuIGZyb20geW91ciBmcmVxdWVudGx5IHVzZWQgZGF0ZSBwYXR0ZXJucyBhbmQgcHJpb3JpdGl6ZSB0aGVtIGluIHN1Z2dlc3Rpb25zXCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkNvbnRleHQtYmFzZWQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIlN1Z2dlc3QgZGF0ZXMgYmFzZWQgb24gZGF0ZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjdXJyZW50IGRvY3VtZW50XCJcbiAgICAgIClcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJWaWV3IHlvdXIgc3VnZ2VzdGlvbiBoaXN0b3J5IGFuZCByZW1vdmUgaW5kaXZpZHVhbCBlbnRyaWVzLCBvciBjbGVhciBpdCBlbnRpcmVseVwiXG4gICAgICApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+XG4gICAgICAgIGJ1dHRvblxuICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiTWFuYWdlIGhpc3RvcnlcIilcbiAgICAgICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgICAgICBuZXcgSGlzdG9yeU1hbmFnZXJNb2RhbCh0aGlzLmFwcCwgdGhpcy5wbHVnaW4pLm9wZW4oKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkRhdGUgZm9ybWF0dGluZ1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJPbWl0IGRhdGUgZm9yIHNob3J0IHJlbGF0aXZlIGV4cHJlc3Npb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJXaGVuIGVuYWJsZWQsIHNob3J0IHJlbGF0aXZlIGV4cHJlc3Npb25zIGZvciB0b2RheSAoZS5nLiwgJ2luIDE1IG1pbicsICdkYW5zIDIgaGV1cmVzJykgd2lsbCBkaXNwbGF5IG9ubHkgdGhlIHRpbWUgKGUuZy4sICcxNDozMCcpIGluc3RlYWQgb2YgJ1tbMjAyNC0wMS0xNV1dIDE0OjMwJ1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5vbWl0RGF0ZUZvclNob3J0UmVsYXRpdmUpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCB0ZXh0OiBzdHJpbmcsIHNldHRpbmdLZXk6IGtleW9mIE5MRFNldHRpbmdzLCBjb2RlOiBzdHJpbmcsIG5vdGU/OiBzdHJpbmcpIDogU2V0dGluZyB7XG4gICAgbm90ZSA9IG5vdGUgPyBgICgke25vdGV9KWAgOiBcIlwiO1xuICAgIHJldHVybiBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKHRleHQpXG4gICAgICAuc2V0RGVzYyhgV2hldGhlciB0byBwYXJzZSAke3RleHR9IG9yIG5vdGAgKyBub3RlKVxuICAgICAgLmFkZFRvZ2dsZShsID0+XG4gICAgICAgIGxcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Nbc2V0dGluZ0tleV0gYXMgYm9vbGVhbilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHYpID0+IHtcbiAgICAgICAgICAgICh0aGlzLnBsdWdpbi5zZXR0aW5nc1tzZXR0aW5nS2V5XSBhcyBib29sZWFuKSA9IHY7XG4gICAgICAgICAgICB0aGlzLmVkaXRMYW5ndWFnZXMoY29kZSwgdik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlc2V0UGFyc2VyKCk7XG4gICAgICAgICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVkaXRMYW5ndWFnZXMoY29kZTogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5wdXNoKGNvZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5pbmRleE9mKGNvZGUpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IHsgQXBwLCBNb2RhbCwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIGdldExvY2FsZVdlZWtTdGFydCwgdmFsaWRhdGVNb21lbnRGb3JtYXQsIGdldEFjdGl2ZUVkaXRvciB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi4vc2V0dGluZ3NcIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi4vd2luZG93LW1vbWVudFwiO1xuXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVQaWNrZXJNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgcHJpdmF0ZSBzZWxlY3RlZERhdGU6IE1vbWVudDtcbiAgcHJpdmF0ZSBjdXJyZW50TW9udGg6IE1vbWVudDtcbiAgcHJpdmF0ZSBjYWxlbmRhckVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHF1aWNrQnV0dG9uc0VsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByZXZpZXdFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBkYXRlSW5wdXRFbDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzRGFya01vZGU6IGJvb2xlYW47XG4gIHByaXZhdGUgdGhlbWVPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGtleWJvYXJkSGFuZGxlcjogKChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRGF0ZUZuOiAoKGRhdGU6IE1vbWVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgLy8gTm9ybWFsaXplZCB0byBtaWRuaWdodDogdGhpcyBpcyBhIGRhdGUgcGlja2VyLCBub3QgYSB0aW1lIHBpY2tlciwgYW5kXG4gICAgLy8gbm90aGluZyBpbiB0aGUgVUkgbGV0cyB0aGUgdXNlciBzZXQgYSB0aW1lLW9mLWRheS4gQ2FycnlpbmcgdGhlIHJlYWxcbiAgICAvLyBjdXJyZW50IHdhbGwtY2xvY2sgdGltZSBoZXJlIChtb21lbnQoKSkgbWVhbnQgdGhhdCBvcGVuaW5nIHRoZSBtb2RhbFxuICAgIC8vIGFuZCBpbW1lZGlhdGVseSBpbnNlcnRpbmcgcHJvZHVjZWQgd2hhdGV2ZXIgdGhlIGNsb2NrIGhhcHBlbmVkIHRvXG4gICAgLy8gcmVhZCwgbm90IGEgY2xlYW4gZGF0ZSAtLSBhbmQgZ2V0RGF0ZVN0cigpIGJlbG93IGZvcm1hdHMgKnNvbWUqXG4gICAgLy8gbW9tZW50IHdpdGggYSBmb3JtYXQgc3RyaW5nIHRoYXQgaW5jbHVkZXMgXCJISDptbVwiIGJ5IGRlZmF1bHQuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBtb21lbnQoKS5zdGFydE9mKFwiZGF5XCIpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgLy8gRMOpdGVjdGVyIGxlIG1vZGUgc29tYnJlXG4gICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1kYXRlLXBpY2tlci1tb2RhbFwiKTtcblxuICAgIC8vIEFqb3V0ZXIgbGVzIHN0eWxlcyBwb3VyIGxlIG1vZGUgc29tYnJlXG4gICAgaWYgKHRoaXMuaXNEYXJrTW9kZSkge1xuICAgICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgbW9tZW50Rm9ybWF0ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQ7XG4gICAgbGV0IGluc2VydEFzTGluayA9IHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsVG9nZ2xlTGluaztcbiAgICBsZXQgZGF0ZUlucHV0ID0gXCJcIjtcblxuICAgIC8vIFN0cmlwcyB0aGUgdHJhaWxpbmcgXCJ8XCIgdGhhdCBtYXJrcyBcImtlZXAgYXMgYWxpYXNcIiAoc2VlIHNob3VsZEluY2x1ZGVBbGlhc1xuICAgIC8vIGJlbG93KSAtLSBzaGFyZWQgc28gdGhlIGlucHV0J3Mgb25DaGFuZ2UgaGFuZGxlciBhbmQgZ2V0RGF0ZVN0cigpIGFncmVlXG4gICAgLy8gb24gZXhhY3RseSB3aGF0IHRleHQgZ2V0cyBwYXJzZWQvY2FjaGVkLlxuICAgIGNvbnN0IHN0cmlwQWxpYXNTdWZmaXggPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgICB0ZXh0LmVuZHNXaXRoKFwifFwiKSA/IHRleHQuc2xpY2UoMCwgLTEpIDogdGV4dDtcblxuICAgIGxldCBjYWNoZWRNYW51YWxQYXJzZTogeyBpbnB1dDogc3RyaW5nOyBtb21lbnQ6IE1vbWVudCB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBQYXJzZXMgbWFudWFsbHktdHlwZWQgdGV4dCB2aWEgdGhlIE5MUCBwYXJzZXIsIGNhY2hpbmcgdGhlIHJlc3VsdC5cbiAgICAvLyBDYWxsZWQgZnJvbSBib3RoIHRoZSBpbnB1dCdzIG9uQ2hhbmdlIGhhbmRsZXIgKHRvIHZhbGlkYXRlL3VwZGF0ZSB0aGVcbiAgICAvLyBjYWxlbmRhciBzZWxlY3Rpb24pIGFuZCBnZXREYXRlU3RyKCkgKHRvIGJ1aWxkIHRoZSBwcmV2aWV3L291dHB1dCkgLS1cbiAgICAvLyB3aXRob3V0IHRoZSBjYWNoZSwgdHlwaW5nIGEgc2luZ2xlIGNoYXJhY3RlciBpbnZva2VkXG4gICAgLy8gcGx1Z2luLnBhcnNlRGF0ZSgpIDItMyB0aW1lcyAob25DaGFuZ2UncyBvd24gdmFsaWRhdGlvbiBjYWxsLCB0aGVuXG4gICAgLy8gdXBkYXRlU2VsZWN0ZWREYXRlIC0+IHVwZGF0ZVByZXZpZXcgLT4gZ2V0RGF0ZVN0ciwgcGx1cyBvbkNoYW5nZSdzXG4gICAgLy8gdHJhaWxpbmcgdXBkYXRlUHJldmlldygpIGNhbGwpLCB3aGljaCBtYXR0ZXJzIHNpbmNlIE5MUCBwYXJzaW5nIGlzbid0XG4gICAgLy8gZnJlZS5cbiAgICBjb25zdCBwYXJzZU1hbnVhbElucHV0ID0gKGNsZWFuVGV4dDogc3RyaW5nKTogTW9tZW50ID0+IHtcbiAgICAgIGlmIChjYWNoZWRNYW51YWxQYXJzZSAmJiBjYWNoZWRNYW51YWxQYXJzZS5pbnB1dCA9PT0gY2xlYW5UZXh0KSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRNYW51YWxQYXJzZS5tb21lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWRNb21lbnQgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGUoY2xlYW5UZXh0KS5tb21lbnQ7XG4gICAgICBjYWNoZWRNYW51YWxQYXJzZSA9IHsgaW5wdXQ6IGNsZWFuVGV4dCwgbW9tZW50OiBwYXJzZWRNb21lbnQgfTtcbiAgICAgIHJldHVybiBwYXJzZWRNb21lbnQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldERhdGVTdHIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzaG91bGRJbmNsdWRlQWxpYXMgPSBkYXRlSW5wdXQuZW5kc1dpdGgoXCJ8XCIpO1xuICAgICAgY29uc3QgY2xlYW5EYXRlSW5wdXQgPSBzdHJpcEFsaWFzU3VmZml4KGRhdGVJbnB1dCk7XG5cbiAgICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGF2YW50IHV0aWxpc2F0aW9uXG4gICAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgIGNvbnN0IGZvcm1hdFRvVXNlID0gZm9ybWF0VmFsaWRhdGlvbi52YWxpZCA/IG1vbWVudEZvcm1hdCA6IERFRkFVTFRfU0VUVElOR1MubW9kYWxNb21lbnRGb3JtYXQ7XG5cbiAgICAgIC8vIE9ubHkgcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBOTFAgcGFyc2VyIHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgdHlwZWRcbiAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgbWFudWFsIGZpZWxkIChlLmcuIFwibmV4dCBmcmlkYXlcIikgLS0gdGhpcy5zZWxlY3RlZERhdGVcbiAgICAgIC8vIChjYWxlbmRhciBjbGlja3MsIHF1aWNrLXNlbGVjdCBidXR0b25zKSBpcyBhbHJlYWR5IGEgcmVzb2x2ZWQgbW9tZW50XG4gICAgICAvLyB3aXRoIG5vdGhpbmcgbGVmdCB0byBwYXJzZS5cbiAgICAgIGNvbnN0IHBhcnNlZE1vbWVudCA9IGNsZWFuRGF0ZUlucHV0XG4gICAgICAgID8gcGFyc2VNYW51YWxJbnB1dChjbGVhbkRhdGVJbnB1dClcbiAgICAgICAgOiB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgICAgLy8gVGhpcyBpcyBhIGRhdGUgcGlja2VyLCBub3QgYSB0aW1lIHBpY2tlciAtLSB0aGVyZSdzIG5vIHRpbWUtb2YtZGF5XG4gICAgICAvLyBjb250cm9sIGFueXdoZXJlIGluIHRoaXMgbW9kYWwncyBVSSwgc28gYW55IHRpbWUgdGhlIE5MUCBwYXJzZXJcbiAgICAgIC8vIG1pZ2h0IGhhdmUgaW5mZXJyZWQgZnJvbSB0eXBlZCB0ZXh0IChlLmcuIFwidG9kYXkgYXQgM3BtXCIpIGlzXG4gICAgICAvLyBkZWxpYmVyYXRlbHkgZGlzY2FyZGVkIGhlcmUsIG5vdCBqdXN0IGxlZnQgYXQgd2hhdGV2ZXIgZGVmYXVsdFxuICAgICAgLy8gY2hyb25vLW5vZGUgaGFwcGVuZWQgdG8gcHJvZHVjZS4gQ2xvbmVkIGZpcnN0OiBwYXJzZWRNb21lbnQgbWF5IGJlXG4gICAgICAvLyB0aGUgY2FjaGVkIHJlc3VsdCBmcm9tIHBhcnNlTWFudWFsSW5wdXQoKSwgYW5kIG1vbWVudCdzIG11dGF0aW5nXG4gICAgICAvLyAuc3RhcnRPZigpIHdvdWxkIG90aGVyd2lzZSBjb3JydXB0IHRoYXQgY2FjaGUgZW50cnkuXG4gICAgICBjb25zdCBtb21lbnRUb0Zvcm1hdCA9IHBhcnNlZE1vbWVudC5pc1ZhbGlkKCkgPyBwYXJzZWRNb21lbnQuY2xvbmUoKS5zdGFydE9mKFwiZGF5XCIpIDogcGFyc2VkTW9tZW50O1xuXG4gICAgICBsZXQgcGFyc2VkRGF0ZVN0cmluZyA9IG1vbWVudFRvRm9ybWF0LmlzVmFsaWQoKVxuICAgICAgICA/IG1vbWVudFRvRm9ybWF0LmZvcm1hdChmb3JtYXRUb1VzZSlcbiAgICAgICAgOiBcIlwiO1xuXG4gICAgICBpZiAoaW5zZXJ0QXNMaW5rKSB7XG4gICAgICAgIHBhcnNlZERhdGVTdHJpbmcgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICBwYXJzZWREYXRlU3RyaW5nLFxuICAgICAgICAgIHNob3VsZEluY2x1ZGVBbGlhcyA/IGNsZWFuRGF0ZUlucHV0IDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWREYXRlU3RyaW5nO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJldmlld0VsKSB7XG4gICAgICAgIHRoaXMucHJldmlld0VsLnNldFRleHQoZ2V0RGF0ZVN0cigpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc3luY0lucHV0IGNvbnRyb2xzIHdoZXRoZXIgdGhlIHJhdyB0ZXh0IGZpZWxkIGdldHMgb3ZlcndyaXR0ZW4gd2l0aFxuICAgIC8vIHRoZSBmb3JtYXR0ZWQgZGF0ZS4gQ2FsZW5kYXIgY2xpY2tzL3F1aWNrIGJ1dHRvbnMva2V5Ym9hcmQgbmF2IHdhbnRcbiAgICAvLyB0aGF0IChpdCdzIGhvdyB0aGUgZmllbGQgcmVmbGVjdHMgdGhlIHNlbGVjdGlvbiksIGJ1dCB0aGUgZmllbGQncyBvd25cbiAgICAvLyBvbkNoYW5nZSBoYW5kbGVyIG11c3QgTk9UIHN5bmMgaXRzZWxmIHdoaWxlIHRoZSB1c2VyIGlzIHN0aWxsIHR5cGluZ1xuICAgIC8vIGludG8gaXQgLS0gZ2V0RGF0ZVN0cigpL3VwZGF0ZVByZXZpZXcoKSBhbHJlYWR5IHNob3cgYSBsaXZlIHByZXZpZXdcbiAgICAvLyBvZiB0aGUgcGFyc2VkIHJlc3VsdCBzZXBhcmF0ZWx5LCB3aXRob3V0IHRvdWNoaW5nIHdoYXQncyBiZWluZyB0eXBlZC5cbiAgICBjb25zdCB1cGRhdGVTZWxlY3RlZERhdGUgPSAoZGF0ZTogTW9tZW50LCBzeW5jSW5wdXQgPSB0cnVlKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgIGlmIChzeW5jSW5wdXQgJiYgdGhpcy5kYXRlSW5wdXRFbCkge1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEVsLnZhbHVlID0gZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgfVxuICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgIH07XG5cbiAgICAvLyBTdG9ja2VyIGxhIGZvbmN0aW9uIHBvdXIgcXUnZWxsZSBzb2l0IGFjY2Vzc2libGUgZGVwdWlzIHJlbmRlckNhbGVuZGFyXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZERhdGVGbiA9IHVwZGF0ZVNlbGVjdGVkRGF0ZTtcblxuICAgIC8vIENvbnRhaW5lciBwcmluY2lwYWxcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50RWwuY3JlYXRlRGl2KFwibmxkLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiKTtcblxuICAgIC8vIFNlY3Rpb24gZGVzIGJvdXRvbnMgcmFwaWRlc1xuICAgIHRoaXMucXVpY2tCdXR0b25zRWwgPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnNcIik7XG4gICAgdGhpcy5yZW5kZXJRdWlja0J1dHRvbnModXBkYXRlU2VsZWN0ZWREYXRlKTtcblxuICAgIC8vIFNlY3Rpb24gZHUgY2FsZW5kcmllclxuICAgIGNvbnN0IGNhbGVuZGFyU2VjdGlvbiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItc2VjdGlvblwiKTtcbiAgICBcbiAgICAvLyBOYXZpZ2F0aW9uIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBuYXZFbCA9IGNhbGVuZGFyU2VjdGlvbi5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItbmF2XCIpO1xuICAgIGNvbnN0IHByZXZNb250aEJ0biA9IG5hdkVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsczogXCJubGQtbmF2LWJ0blwiLFxuICAgICAgdGV4dDogXCLigLlcIixcbiAgICAgIGF0dHI6IHsgXCJhcmlhLWxhYmVsXCI6IFwiTW9pcyBwcsOpY8OpZGVudFwiIH1cbiAgICB9KTtcbiAgICBcbiAgICBjb25zdCBtb250aFllYXJFbCA9IG5hdkVsLmNyZWF0ZURpdihcIm5sZC1tb250aC15ZWFyXCIpO1xuICAgIFxuICAgIGNvbnN0IG5leHRNb250aEJ0biA9IG5hdkVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgIGNsczogXCJubGQtbmF2LWJ0blwiLFxuICAgICAgdGV4dDogXCLigLpcIixcbiAgICAgIGF0dHI6IHsgXCJhcmlhLWxhYmVsXCI6IFwiTW9pcyBzdWl2YW50XCIgfVxuICAgIH0pO1xuXG4gICAgcHJldk1vbnRoQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIG5leHRNb250aEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgLy8gU8OpbGVjdGV1ciBkJ2FubsOpZSAoZHJvcGRvd24pXG4gICAgY29uc3QgeWVhclNlbGVjdCA9IG5hdkVsLmNyZWF0ZUVsKFwic2VsZWN0XCIsIHsgY2xzOiBcIm5sZC15ZWFyLXNlbGVjdFwiIH0pO1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdGhpcy5jdXJyZW50TW9udGgueWVhcigpO1xuICAgIGZvciAobGV0IHllYXIgPSBjdXJyZW50WWVhciAtIDEwOyB5ZWFyIDw9IGN1cnJlbnRZZWFyICsgMTA7IHllYXIrKykge1xuICAgICAgY29uc3Qgb3B0aW9uID0geWVhclNlbGVjdC5jcmVhdGVFbChcIm9wdGlvblwiLCB7IHRleHQ6IFN0cmluZyh5ZWFyKSwgdmFsdWU6IFN0cmluZyh5ZWFyKSB9KTtcbiAgICAgIGlmICh5ZWFyID09PSBjdXJyZW50WWVhcikge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB5ZWFyU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgdGhpcy5jdXJyZW50TW9udGgueWVhcihwYXJzZUludCh0YXJnZXQudmFsdWUpKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICAvLyBTw6lsZWN0ZXVyIGRlIG1vaXMgKGRyb3Bkb3duKVxuICAgIGNvbnN0IG1vbnRoU2VsZWN0ID0gbmF2RWwuY3JlYXRlRWwoXCJzZWxlY3RcIiwgeyBjbHM6IFwibmxkLW1vbnRoLXNlbGVjdFwiIH0pO1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBtb21lbnQubW9udGhzKCk7XG4gICAgbW9udGhOYW1lcy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG1vbnRoU2VsZWN0LmNyZWF0ZUVsKFwib3B0aW9uXCIsIHsgdGV4dDogbW9udGgsIHZhbHVlOiBTdHJpbmcoaW5kZXgpIH0pO1xuICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmN1cnJlbnRNb250aC5tb250aCgpKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9udGhTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5tb250aChwYXJzZUludCh0YXJnZXQudmFsdWUpKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuXG4gICAgLy8gQ2FsZW5kcmllclxuICAgIHRoaXMuY2FsZW5kYXJFbCA9IGNhbGVuZGFyU2VjdGlvbi5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXJcIik7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuXG4gICAgLy8gU2VjdGlvbiBkZSBzYWlzaWUgbWFudWVsbGVcbiAgICBjb25zdCBpbnB1dFNlY3Rpb24gPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLWlucHV0LXNlY3Rpb25cIik7XG4gICAgY29uc3QgZGF0ZUlucHV0RWwgPSBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkRhdGVcIilcbiAgICAgIC5zZXREZXNjKFwiXCIpXG4gICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgIHRleHRFbC5zZXRQbGFjZWhvbGRlcihcIlRvZGF5XCIpO1xuICAgICAgICB0ZXh0RWwuc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0RWwgPSB0ZXh0RWwuaW5wdXRFbDtcblxuICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgZGF0ZUlucHV0ID0gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRNb21lbnQgPSBwYXJzZU1hbnVhbElucHV0KHN0cmlwQWxpYXNTdWZmaXgodmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZVNlbGVjdGVkRGF0ZSgpIGFscmVhZHkgY2FsbHMgdXBkYXRlUHJldmlldygpIGl0c2VsZjtcbiAgICAgICAgICAgICAgLy8gYW4gdW5jb25kaXRpb25hbCBjYWxsIGJlbG93IG9uIHRvcCBvZiB0aGlzIHdvdWxkIGp1c3RcbiAgICAgICAgICAgICAgLy8gcmUtcnVuIGdldERhdGVTdHIoKSAoYW5kLCBiZWZvcmUgcGFyc2VNYW51YWxJbnB1dCgpJ3NcbiAgICAgICAgICAgICAgLy8gY2FjaGluZywgcmUtaW52b2tlIHRoZSBOTFAgcGFyc2VyKSBmb3Igbm8gcmVhc29uLlxuICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUocGFyc2VkTW9tZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0ZXh0RWwuaW5wdXRFbC5mb2N1cygpLCAxMCk7XG4gICAgICB9KTtcbiAgICB0aGlzLnByZXZpZXdFbCA9IGRhdGVJbnB1dEVsLmRlc2NFbDtcbiAgICB1cGRhdGVQcmV2aWV3KCk7XG5cbiAgICAvLyBPcHRpb25zIGRlIGZvcm1hdFxuICAgIGNvbnN0IGZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXG4gICAgICAuc2V0RGVzYyhcIk1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZFwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgobW9tZW50RWwpID0+IHtcbiAgICAgICAgbW9tZW50RWwuc2V0UGxhY2Vob2xkZXIoXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICBtb21lbnRFbC5zZXRWYWx1ZShtb21lbnRGb3JtYXQpO1xuICAgICAgICBtb21lbnRFbC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZS50cmltKCkgfHwgXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgIGlmICh2YWxpZGF0ZWQudmFsaWQpIHtcbiAgICAgICAgICAgIG1vbWVudEZvcm1hdCA9IHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tRERcIjtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsTW9tZW50Rm9ybWF0ID0gbW9tZW50Rm9ybWF0O1xuICAgICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHVwZGF0ZVByZXZpZXcoKTtcbiAgICAgICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxhIGRlc2NyaXB0aW9uIGF2ZWMgbGEgcHLDqXZpc3VhbGlzYXRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBZmZpY2hlciBsJ2VycmV1ciBkYW5zIGxhIGRlc2NyaXB0aW9uXG4gICAgICAgICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICBtb21lbnRFbC5zZXRWYWx1ZShtb21lbnRGb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBcbiAgICAvLyBBZmZpY2hlciBsYSBwcsOpdmlzdWFsaXNhdGlvbiBpbml0aWFsZVxuICAgIGNvbnN0IGluaXRpYWxWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFZhbGlkYXRpb24ucHJldmlldykge1xuICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQgKFByZXZpZXc6ICR7aW5pdGlhbFZhbGlkYXRpb24ucHJldmlld30pYCk7XG4gICAgfVxuXG4gICAgbmV3IFNldHRpbmcoaW5wdXRTZWN0aW9uKVxuICAgICAgLnNldE5hbWUoXCJBZGQgYXMgbGluaz9cIilcbiAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZUVsKSA9PiB7XG4gICAgICAgIHRvZ2dsZUVsLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1vZGFsVG9nZ2xlTGluaykub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0QXNMaW5rID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rID0gaW5zZXJ0QXNMaW5rO1xuICAgICAgICAgIHZvaWQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgLy8gQm91dG9ucyBkJ2FjdGlvblxuICAgIGlucHV0U2VjdGlvbi5jcmVhdGVEaXYoXCJtb2RhbC1idXR0b24tY29udGFpbmVyXCIsIChidXR0b25Db250YWluZXJFbCkgPT4ge1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWxcbiAgICAgICAgLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHsgYXR0cjogeyB0eXBlOiBcImJ1dHRvblwiIH0sIHRleHQ6IFwiTmV2ZXIgbWluZFwiIH0pXG4gICAgICAgIC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICAgIGJ1dHRvbkNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgYXR0cjogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIGNsczogXCJtb2QtY3RhXCIsXG4gICAgICAgIHRleHQ6IFwiSW5zZXJ0IGRhdGVcIixcbiAgICAgIH0pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5zZXJ0RGF0ZShnZXREYXRlU3RyKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSYWNjb3VyY2lzIGNsYXZpZXJcbiAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IHRoaXMuY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKHByZXZNb250aEJ0biwgbmV4dE1vbnRoQnRuLCB1cGRhdGVTZWxlY3RlZERhdGUpO1xuICAgIHRoaXMuY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmRIYW5kbGVyKTtcblxuICAgIC8vIE9ic2VydmVyIGxlcyBjaGFuZ2VtZW50cyBkZSB0aMOobWVcbiAgICB0aGlzLnNldHVwVGhlbWVPYnNlcnZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJRdWlja0J1dHRvbnModXBkYXRlU2VsZWN0ZWREYXRlOiAoZGF0ZTogTW9tZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnF1aWNrQnV0dG9uc0VsKSByZXR1cm47XG5cbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmVtcHR5KCk7XG4gICAgdGhpcy5xdWlja0J1dHRvbnNFbC5jcmVhdGVEaXYoeyBjbHM6IFwibmxkLXF1aWNrLWJ1dHRvbnMtbGFiZWxcIiwgdGV4dDogXCJRdWljayBzZWxlY3Q6XCIgfSk7XG5cbiAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCBcImVuXCI7XG4gICAgXG4gICAgLy8gRm9uY3Rpb24gaGVscGVyIHBvdXIgb2J0ZW5pciBsYSBwcmVtacOocmUgdmFyaWFudGUgZCd1bmUgdHJhZHVjdGlvblxuICAgIGNvbnN0IGdldEZpcnN0VmFyaWFudCA9IChrZXk6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHQoa2V5LCBwcmltYXJ5TGFuZyk7XG4gICAgICBpZiAodHJhbnNsYXRpb24gPT09IFwiTk9URk9VTkRcIikge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgICAgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGUgc2kgcGx1c2lldXJzIChzw6lwYXLDqWVzIHBhciB8KVxuICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uLnNwbGl0KFwifFwiKVswXS50cmltKCk7XG4gICAgfTtcblxuICAgIC8vIC5zdGFydE9mKFwiZGF5XCIpIG9uIGV2ZXJ5IG9wdGlvbjogd2l0aG91dCBpdCB0aGVzZSBjYXJyaWVkIHRoZSByZWFsXG4gICAgLy8gY3VycmVudCB3YWxsLWNsb2NrIHRpbWUgKGUuZy4gY2xpY2tpbmcgXCJUb21vcnJvd1wiIGF0IDE0OjMyIHNlbGVjdGVkXG4gICAgLy8gdG9tb3Jyb3cgYXQgMTQ6MzIsIG5vdCBhIGNsZWFuIGRhdGUpLCBpbmNvbnNpc3RlbnQgd2l0aCBjYWxlbmRhci1ncmlkXG4gICAgLy8gY2xpY2tzIChhbHJlYWR5IG1pZG5pZ2h0LWJhc2VkKSBhbmQgbGlhYmxlIHRvIHRoZSBzYW1lIFwidW5leHBlY3RlZFxuICAgIC8vIHRpbWUgYmFrZWQgaW50byB0aGUgb3V0cHV0XCIgY29uZnVzaW9uIGFzIHRoZSBnZXREYXRlU3RyKCkgYnVnIGFib3ZlLlxuICAgIGNvbnN0IHF1aWNrT3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvZGF5XCIpLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBnZXRGaXJzdFZhcmlhbnQoXCJ0b21vcnJvd1wiKSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJkYXlcIikuc3RhcnRPZihcImRheVwiKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInllc3RlcmRheVwiKSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCBcImRheVwiKS5zdGFydE9mKFwiZGF5XCIpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJ3ZWVrXCIpfWAsXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwid2Vla1wiKS5zdGFydE9mKFwiZGF5XCIpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJtb250aFwiKX1gLFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcIm1vbnRoXCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiBgJHtnZXRGaXJzdFZhcmlhbnQoXCJuZXh0XCIpfSAke2dldEZpcnN0VmFyaWFudChcInllYXJcIil9YCxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ5ZWFyXCIpLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdihcIm5sZC1xdWljay1idXR0b25zLWdyaWRcIik7XG5cbiAgICBxdWlja09wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBidXR0b24gPSBidXR0b25zQ29udGFpbmVyLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgY2xzOiBcIm5sZC1xdWljay1idG5cIixcbiAgICAgICAgdGV4dDogb3B0aW9uLmxhYmVsLFxuICAgICAgfSk7XG5cbiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUob3B0aW9uLm1vbWVudCk7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gb3B0aW9uLm1vbWVudC5jbG9uZSgpO1xuICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyRWwpIHJldHVybjtcblxuICAgIHRoaXMuY2FsZW5kYXJFbC5lbXB0eSgpO1xuXG4gICAgLy8gRW4tdMOqdGVzIGRlcyBqb3VycyBkZSBsYSBzZW1haW5lXG4gICAgY29uc3Qgd2Vla1N0YXJ0ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0ID09PSBcImxvY2FsZS1kZWZhdWx0XCJcbiAgICAgID8gZ2V0TG9jYWxlV2Vla1N0YXJ0KClcbiAgICAgIDogdGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0O1xuICAgIFxuICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gd2Vla1N0YXJ0ID09PSBcInN1bmRheVwiID8gMCA6IDE7XG4gICAgY29uc3Qgd2Vla2RheXMgPSBtb21lbnQud2Vla2RheXNTaG9ydCgpO1xuICAgIGNvbnN0IG9yZGVyZWRXZWVrZGF5cyA9IFtcbiAgICAgIC4uLndlZWtkYXlzLnNsaWNlKHdlZWtTdGFydEluZGV4KSxcbiAgICAgIC4uLndlZWtkYXlzLnNsaWNlKDAsIHdlZWtTdGFydEluZGV4KSxcbiAgICBdO1xuXG4gICAgY29uc3QgaGVhZGVyUm93ID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1oZWFkZXJcIik7XG4gICAgb3JkZXJlZFdlZWtkYXlzLmZvckVhY2goKGRheSkgPT4ge1xuICAgICAgY29uc3QgZGF5SGVhZGVyID0gaGVhZGVyUm93LmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1kYXktaGVhZGVyXCIpO1xuICAgICAgZGF5SGVhZGVyLnNldFRleHQoZGF5KTtcbiAgICB9KTtcblxuICAgIC8vIEdyaWxsZSBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuY2FsZW5kYXJFbC5jcmVhdGVEaXYoXCJubGQtY2FsZW5kYXItZ3JpZFwiKTtcblxuICAgIGNvbnN0IHN0YXJ0T2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuc3RhcnRPZihcIm1vbnRoXCIpO1xuICAgIGNvbnN0IGVuZE9mTW9udGggPSB0aGlzLmN1cnJlbnRNb250aC5jbG9uZSgpLmVuZE9mKFwibW9udGhcIik7XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGUgZMOpYnV0IGRlIGxhIHNlbWFpbmUgc2Vsb24gbGVzIHByw6lmw6lyZW5jZXNcbiAgICBjb25zdCBzdGFydERhdGUgPSBzdGFydE9mTW9udGguY2xvbmUoKTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBzdGFydERhdGUuZGF5KCk7XG4gICAgY29uc3QgZGlmZiA9IGRheU9mV2VlayAtIHdlZWtTdGFydEluZGV4O1xuICAgIGlmIChkaWZmIDwgMCkge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KDcgKyBkaWZmLCBcImRheXNcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0RGF0ZS5zdWJ0cmFjdChkaWZmLCBcImRheXNcIik7XG4gICAgfVxuICAgIFxuICAgIC8vIENhbGN1bGVyIGxhIGZpbiBkZSBsYSBzZW1haW5lXG4gICAgY29uc3QgZW5kRGF0ZSA9IGVuZE9mTW9udGguY2xvbmUoKTtcbiAgICBjb25zdCBlbmREYXlPZldlZWsgPSBlbmREYXRlLmRheSgpO1xuICAgIGNvbnN0IGVuZERpZmYgPSAoNiArIHdlZWtTdGFydEluZGV4IC0gZW5kRGF5T2ZXZWVrKSAlIDc7XG4gICAgaWYgKGVuZERpZmYgPiAwKSB7XG4gICAgICBlbmREYXRlLmFkZChlbmREaWZmLCBcImRheXNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKTtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGN1cnJlbnREYXRlLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAvLyBDYXB0dXJlciBsYSBkYXRlIGFjdHVlbGxlIGRhbnMgdW5lIHZhcmlhYmxlIGxvY2FsZSBwb3VyIMOpdml0ZXIgbGVzIHByb2Jsw6htZXMgZGUgY2xvc3VyZVxuICAgICAgY29uc3QgZGF0ZUZvclRoaXNEYXkgPSBjdXJyZW50RGF0ZS5jbG9uZSgpO1xuICAgICAgY29uc3QgZGF5RWwgPSBncmlkLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1kYXlcIik7XG4gICAgICBjb25zdCBkYXlOdW1iZXIgPSBkYXRlRm9yVGhpc0RheS5kYXRlKCk7XG5cbiAgICAgIC8vIFN0eWxlIHNlbG9uIGxlIHR5cGUgZGUgam91clxuICAgICAgaWYgKGRhdGVGb3JUaGlzRGF5LmlzU2FtZSh0b2RheSwgXCJkYXlcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtdG9kYXlcIik7XG4gICAgICB9XG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRoaXMuc2VsZWN0ZWREYXRlLCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC1zZWxlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRoaXMuY3VycmVudE1vbnRoLCBcIm1vbnRoXCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLW90aGVyLW1vbnRoXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXlOdW1iZXJFbCA9IGRheUVsLmNyZWF0ZURpdihcIm5sZC1kYXktbnVtYmVyXCIpO1xuICAgICAgZGF5TnVtYmVyRWwuc2V0VGV4dChTdHJpbmcoZGF5TnVtYmVyKSk7XG5cbiAgICAgIC8vIMOJdsOpbmVtZW50IGRlIGNsaWNcbiAgICAgIGRheUVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZERhdGVGbihkYXRlRm9yVGhpc0RheSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjdXJyZW50RGF0ZS5hZGQoMSwgXCJkYXlcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIG1vbnRoWWVhckVsLmVtcHR5KCk7XG4gICAgY29uc3QgbW9udGhOYW1lID0gdGhpcy5jdXJyZW50TW9udGguZm9ybWF0KFwiTU1NTVwiKTtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5jdXJyZW50TW9udGguZm9ybWF0KFwiWVlZWVwiKTtcbiAgICBjb25zdCBtb250aFNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgbW9udGhTcGFuLnNldFRleHQobW9udGhOYW1lKTtcbiAgICBjb25zdCBzcGFjZVNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgc3BhY2VTcGFuLnNldFRleHQoXCIgXCIpO1xuICAgIGNvbnN0IHllYXJTcGFuID0gbW9udGhZZWFyRWwuY3JlYXRlU3BhbigpO1xuICAgIHllYXJTcGFuLnNldFRleHQoeWVhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUtleWJvYXJkSGFuZGxlcihcbiAgICBwcmV2TW9udGhCdG46IEhUTUxFbGVtZW50LFxuICAgIG5leHRNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgdXBkYXRlU2VsZWN0ZWREYXRlOiAoZGF0ZTogTW9tZW50KSA9PiB2b2lkXG4gICk6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIMOJdml0ZXIgbGVzIHJhY2NvdXJjaXMgc2kgb24gZXN0IGRhbnMgdW4gaW5wdXRcbiAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgY2FzZSBcIkFycm93TGVmdFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBwcmV2TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbmV4dE1vbnRoQnRuLmNsaWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWREYXRlKG1vbWVudCgpLnN0YXJ0T2YoXCJkYXlcIikpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRoZW1lT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGNsYXNzZSBwb3VyIGTDqXRlY3RlciBsZSBjaGFuZ2VtZW50IGRlIHRow6htZVxuICAgIHRoaXMudGhlbWVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0RhcmtNb2RlID0gdGhpcy5pc0RhcmtNb2RlO1xuICAgICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuXG4gICAgICBpZiAod2FzRGFya01vZGUgIT09IHRoaXMuaXNEYXJrTW9kZSAmJiB0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUNsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVtZU9ic2VydmVyLm9ic2VydmUoYWN0aXZlRG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydERhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGFjdGl2ZUVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKGRhdGVTdHIpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcblxuICAgIC8vIE5ldHRveWVyIGxlcyBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5rZXlib2FyZEhhbmRsZXIpIHtcbiAgICAgIGNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV0dG95ZXIgbCdvYnNlcnZlciBkZSB0aMOobWVcbiAgICBpZiAodGhpcy50aGVtZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy50aGVtZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgTWVyaWRpZW07XG4oZnVuY3Rpb24gKE1lcmlkaWVtKSB7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJBTVwiXSA9IDBdID0gXCJBTVwiO1xuICAgIE1lcmlkaWVtW01lcmlkaWVtW1wiUE1cIl0gPSAxXSA9IFwiUE1cIjtcbn0pKE1lcmlkaWVtIHx8IChNZXJpZGllbSA9IHt9KSk7XG5leHBvcnQgdmFyIFdlZWtkYXk7XG4oZnVuY3Rpb24gKFdlZWtkYXkpIHtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTVU5EQVlcIl0gPSAwXSA9IFwiU1VOREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiTU9OREFZXCJdID0gMV0gPSBcIk1PTkRBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRVRVNEQVlcIl0gPSAyXSA9IFwiVFVFU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIldFRE5FU0RBWVwiXSA9IDNdID0gXCJXRURORVNEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJUSFVSU0RBWVwiXSA9IDRdID0gXCJUSFVSU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIkZSSURBWVwiXSA9IDVdID0gXCJGUklEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTQVRVUkRBWVwiXSA9IDZdID0gXCJTQVRVUkRBWVwiO1xufSkoV2Vla2RheSB8fCAoV2Vla2RheSA9IHt9KSk7XG5leHBvcnQgdmFyIE1vbnRoO1xuKGZ1bmN0aW9uIChNb250aCkge1xuICAgIE1vbnRoW01vbnRoW1wiSkFOVUFSWVwiXSA9IDFdID0gXCJKQU5VQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJGRUJSVUFSWVwiXSA9IDJdID0gXCJGRUJSVUFSWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiTUFSQ0hcIl0gPSAzXSA9IFwiTUFSQ0hcIjtcbiAgICBNb250aFtNb250aFtcIkFQUklMXCJdID0gNF0gPSBcIkFQUklMXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVlcIl0gPSA1XSA9IFwiTUFZXCI7XG4gICAgTW9udGhbTW9udGhbXCJKVU5FXCJdID0gNl0gPSBcIkpVTkVcIjtcbiAgICBNb250aFtNb250aFtcIkpVTFlcIl0gPSA3XSA9IFwiSlVMWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVVHVVNUXCJdID0gOF0gPSBcIkFVR1VTVFwiO1xuICAgIE1vbnRoW01vbnRoW1wiU0VQVEVNQkVSXCJdID0gOV0gPSBcIlNFUFRFTUJFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiT0NUT0JFUlwiXSA9IDEwXSA9IFwiT0NUT0JFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiTk9WRU1CRVJcIl0gPSAxMV0gPSBcIk5PVkVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJERUNFTUJFUlwiXSA9IDEyXSA9IFwiREVDRU1CRVJcIjtcbn0pKE1vbnRoIHx8IChNb250aCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibW9udGhcIiwgdGFyZ2V0LmdldE1vbnRoKCkgKyAxKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCB0YXJnZXQuZ2V0SG91cnMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0YXJnZXQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5pbXBseShcInllYXJcIiwgdGFyZ2V0LmdldEZ1bGxZZWFyKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGFyZ2V0LmdldE1pbnV0ZXMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgdGFyZ2V0LmdldEhvdXJzKCkgPCAxMiA/IE1lcmlkaWVtLkFNIDogTWVyaWRpZW0uUE0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZXMuanMubWFwIiwiaW1wb3J0IHsgV2Vla2RheSwgTW9udGggfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFRJTUVaT05FX0FCQlJfTUFQID0ge1xuICAgIEFDRFQ6IDYzMCxcbiAgICBBQ1NUOiA1NzAsXG4gICAgQURUOiAtMTgwLFxuICAgIEFFRFQ6IDY2MCxcbiAgICBBRVNUOiA2MDAsXG4gICAgQUZUOiAyNzAsXG4gICAgQUtEVDogLTQ4MCxcbiAgICBBS1NUOiAtNTQwLFxuICAgIEFMTVQ6IDM2MCxcbiAgICBBTVNUOiAtMTgwLFxuICAgIEFNVDogLTI0MCxcbiAgICBBTkFTVDogNzIwLFxuICAgIEFOQVQ6IDcyMCxcbiAgICBBUVRUOiAzMDAsXG4gICAgQVJUOiAtMTgwLFxuICAgIEFTVDogLTI0MCxcbiAgICBBV0RUOiA1NDAsXG4gICAgQVdTVDogNDgwLFxuICAgIEFaT1NUOiAwLFxuICAgIEFaT1Q6IC02MCxcbiAgICBBWlNUOiAzMDAsXG4gICAgQVpUOiAyNDAsXG4gICAgQk5UOiA0ODAsXG4gICAgQk9UOiAtMjQwLFxuICAgIEJSU1Q6IC0xMjAsXG4gICAgQlJUOiAtMTgwLFxuICAgIEJTVDogNjAsXG4gICAgQlRUOiAzNjAsXG4gICAgQ0FTVDogNDgwLFxuICAgIENBVDogMTIwLFxuICAgIENDVDogMzkwLFxuICAgIENEVDogLTMwMCxcbiAgICBDRVNUOiAxMjAsXG4gICAgQ0VUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAyICogNjAsXG4gICAgICAgIHRpbWV6b25lT2Zmc2V0Tm9uRHN0OiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIE1vbnRoLk9DVE9CRVIsIFdlZWtkYXkuU1VOREFZLCAzKSxcbiAgICB9LFxuICAgIENIQURUOiA4MjUsXG4gICAgQ0hBU1Q6IDc2NSxcbiAgICBDS1Q6IC02MDAsXG4gICAgQ0xTVDogLTE4MCxcbiAgICBDTFQ6IC0yNDAsXG4gICAgQ09UOiAtMzAwLFxuICAgIENTVDogLTM2MCxcbiAgICBDVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTUgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC02ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIENWVDogLTYwLFxuICAgIENYVDogNDIwLFxuICAgIENoU1Q6IDYwMCxcbiAgICBEQVZUOiA0MjAsXG4gICAgRUFTU1Q6IC0zMDAsXG4gICAgRUFTVDogLTM2MCxcbiAgICBFQVQ6IDE4MCxcbiAgICBFQ1Q6IC0zMDAsXG4gICAgRURUOiAtMjQwLFxuICAgIEVFU1Q6IDE4MCxcbiAgICBFRVQ6IDEyMCxcbiAgICBFR1NUOiAwLFxuICAgIEVHVDogLTYwLFxuICAgIEVTVDogLTMwMCxcbiAgICBFVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTQgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC01ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIEZKU1Q6IDc4MCxcbiAgICBGSlQ6IDcyMCxcbiAgICBGS1NUOiAtMTgwLFxuICAgIEZLVDogLTI0MCxcbiAgICBGTlQ6IC0xMjAsXG4gICAgR0FMVDogLTM2MCxcbiAgICBHQU1UOiAtNTQwLFxuICAgIEdFVDogMjQwLFxuICAgIEdGVDogLTE4MCxcbiAgICBHSUxUOiA3MjAsXG4gICAgR01UOiAwLFxuICAgIEdTVDogMjQwLFxuICAgIEdZVDogLTI0MCxcbiAgICBIQUE6IC0xODAsXG4gICAgSEFDOiAtMzAwLFxuICAgIEhBRFQ6IC01NDAsXG4gICAgSEFFOiAtMjQwLFxuICAgIEhBUDogLTQyMCxcbiAgICBIQVI6IC0zNjAsXG4gICAgSEFTVDogLTYwMCxcbiAgICBIQVQ6IC05MCxcbiAgICBIQVk6IC00ODAsXG4gICAgSEtUOiA0ODAsXG4gICAgSExWOiAtMjEwLFxuICAgIEhOQTogLTI0MCxcbiAgICBITkM6IC0zNjAsXG4gICAgSE5FOiAtMzAwLFxuICAgIEhOUDogLTQ4MCxcbiAgICBITlI6IC00MjAsXG4gICAgSE5UOiAtMTUwLFxuICAgIEhOWTogLTU0MCxcbiAgICBIT1ZUOiA0MjAsXG4gICAgSUNUOiA0MjAsXG4gICAgSURUOiAxODAsXG4gICAgSU9UOiAzNjAsXG4gICAgSVJEVDogMjcwLFxuICAgIElSS1NUOiA1NDAsXG4gICAgSVJLVDogNTQwLFxuICAgIElSU1Q6IDIxMCxcbiAgICBJU1Q6IDMzMCxcbiAgICBKU1Q6IDU0MCxcbiAgICBLR1Q6IDM2MCxcbiAgICBLUkFTVDogNDgwLFxuICAgIEtSQVQ6IDQ4MCxcbiAgICBLU1Q6IDU0MCxcbiAgICBLVVlUOiAyNDAsXG4gICAgTEhEVDogNjYwLFxuICAgIExIU1Q6IDYzMCxcbiAgICBMSU5UOiA4NDAsXG4gICAgTUFHU1Q6IDcyMCxcbiAgICBNQUdUOiA3MjAsXG4gICAgTUFSVDogLTUxMCxcbiAgICBNQVdUOiAzMDAsXG4gICAgTURUOiAtMzYwLFxuICAgIE1FU1o6IDEyMCxcbiAgICBNRVo6IDYwLFxuICAgIE1IVDogNzIwLFxuICAgIE1NVDogMzkwLFxuICAgIE1TRDogMjQwLFxuICAgIE1TSzogMTgwLFxuICAgIE1TVDogLTQyMCxcbiAgICBNVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTYgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC03ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIE1VVDogMjQwLFxuICAgIE1WVDogMzAwLFxuICAgIE1ZVDogNDgwLFxuICAgIE5DVDogNjYwLFxuICAgIE5EVDogLTkwLFxuICAgIE5GVDogNjkwLFxuICAgIE5PVlNUOiA0MjAsXG4gICAgTk9WVDogMzYwLFxuICAgIE5QVDogMzQ1LFxuICAgIE5TVDogLTE1MCxcbiAgICBOVVQ6IC02NjAsXG4gICAgTlpEVDogNzgwLFxuICAgIE5aU1Q6IDcyMCxcbiAgICBPTVNTVDogNDIwLFxuICAgIE9NU1Q6IDQyMCxcbiAgICBQRFQ6IC00MjAsXG4gICAgUEVUOiAtMzAwLFxuICAgIFBFVFNUOiA3MjAsXG4gICAgUEVUVDogNzIwLFxuICAgIFBHVDogNjAwLFxuICAgIFBIT1Q6IDc4MCxcbiAgICBQSFQ6IDQ4MCxcbiAgICBQS1Q6IDMwMCxcbiAgICBQTURUOiAtMTIwLFxuICAgIFBNU1Q6IC0xODAsXG4gICAgUE9OVDogNjYwLFxuICAgIFBTVDogLTQ4MCxcbiAgICBQVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTcgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC04ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIFBXVDogNTQwLFxuICAgIFBZU1Q6IC0xODAsXG4gICAgUFlUOiAtMjQwLFxuICAgIFJFVDogMjQwLFxuICAgIFNBTVQ6IDI0MCxcbiAgICBTQVNUOiAxMjAsXG4gICAgU0JUOiA2NjAsXG4gICAgU0NUOiAyNDAsXG4gICAgU0dUOiA0ODAsXG4gICAgU1JUOiAtMTgwLFxuICAgIFNTVDogLTY2MCxcbiAgICBUQUhUOiAtNjAwLFxuICAgIFRGVDogMzAwLFxuICAgIFRKVDogMzAwLFxuICAgIFRLVDogNzgwLFxuICAgIFRMVDogNTQwLFxuICAgIFRNVDogMzAwLFxuICAgIFRWVDogNzIwLFxuICAgIFVMQVQ6IDQ4MCxcbiAgICBVVEM6IDAsXG4gICAgVVlTVDogLTEyMCxcbiAgICBVWVQ6IC0xODAsXG4gICAgVVpUOiAzMDAsXG4gICAgVkVUOiAtMjEwLFxuICAgIFZMQVNUOiA2NjAsXG4gICAgVkxBVDogNjYwLFxuICAgIFZVVDogNjYwLFxuICAgIFdBU1Q6IDEyMCxcbiAgICBXQVQ6IDYwLFxuICAgIFdFU1Q6IDYwLFxuICAgIFdFU1o6IDYwLFxuICAgIFdFVDogMCxcbiAgICBXRVo6IDAsXG4gICAgV0ZUOiA3MjAsXG4gICAgV0dTVDogLTEyMCxcbiAgICBXR1Q6IC0xODAsXG4gICAgV0lCOiA0MjAsXG4gICAgV0lUOiA1NDAsXG4gICAgV0lUQTogNDgwLFxuICAgIFdTVDogNzgwLFxuICAgIFdUOiAwLFxuICAgIFlBS1NUOiA2MDAsXG4gICAgWUFLVDogNjAwLFxuICAgIFlBUFQ6IDYwMCxcbiAgICBZRUtTVDogMzYwLFxuICAgIFlFS1Q6IDM2MCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgbW9udGgsIHdlZWtkYXksIG4sIGhvdXIgPSAwKSB7XG4gICAgbGV0IGRheU9mTW9udGggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgZGF5T2ZNb250aCsrO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT09IHdlZWtkYXkpXG4gICAgICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgsIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgaG91ciA9IDApIHtcbiAgICBjb25zdCBvbmVJbmRleGVkV2Vla2RheSA9IHdlZWtkYXkgPT09IDAgPyA3IDogd2Vla2RheTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxICsgMSwgMSwgMTIpO1xuICAgIGNvbnN0IGZpcnN0V2Vla2RheU5leHRNb250aCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgPyA3IDogZGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZGF5RGlmZjtcbiAgICBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoID09PSBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDc7XG4gICAgZWxzZSBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoIDwgb25lSW5kZXhlZFdlZWtkYXkpXG4gICAgICAgIGRheURpZmYgPSA3ICsgZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZWxzZVxuICAgICAgICBkYXlEaWZmID0gZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5RGlmZik7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZS5nZXREYXRlKCksIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGltZXpvbmVPZmZzZXQodGltZXpvbmVJbnB1dCwgZGF0ZSwgdGltZXpvbmVPdmVycmlkZXMgPSB7fSkge1xuICAgIGlmICh0aW1lem9uZUlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZXpvbmVJbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGltZXpvbmVJbnB1dDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFRpbWV6b25lID0gdGltZXpvbmVPdmVycmlkZXNbdGltZXpvbmVJbnB1dF0gPz8gVElNRVpPTkVfQUJCUl9NQVBbdGltZXpvbmVJbnB1dF07XG4gICAgaWYgKG1hdGNoZWRUaW1lem9uZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1hdGNoZWRUaW1lem9uZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmU7XG4gICAgfVxuICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdFN0YXJ0KGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYgIShkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdEVuZChkYXRlLmdldEZ1bGxZZWFyKCkpKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0Tm9uRHN0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXpvbmUuanMubWFwIiwiZXhwb3J0IGNvbnN0IEVtcHR5RHVyYXRpb24gPSB7XG4gICAgZGF5OiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gYWRkRHVyYXRpb24ocmVmLCBkdXJhdGlvbikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmKTtcbiAgICBpZiAoZHVyYXRpb25bXCJ5XCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wieWVhclwiXSA9IGR1cmF0aW9uW1wieVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wieVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibW9cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wibW9cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1vXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJNXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibW9udGhcIl0gPSBkdXJhdGlvbltcIk1cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIk1cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIndcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ3ZWVrXCJdID0gZHVyYXRpb25bXCJ3XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ3XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJkXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiZGF5XCJdID0gZHVyYXRpb25bXCJkXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJkXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJoXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiaG91clwiXSA9IGR1cmF0aW9uW1wiaFwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiaFwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibVwiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbnV0ZVwiXSA9IGR1cmF0aW9uW1wibVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wic1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcInNlY29uZFwiXSA9IGR1cmF0aW9uW1wic1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wic1wiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibXNcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtaWxsaXNlY29uZFwiXSA9IGR1cmF0aW9uW1wibXNcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1zXCJdO1xuICAgIH1cbiAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wieWVhclwiXSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wieWVhclwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IGR1cmF0aW9uPy5tb250aCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubW9udGggKz0gcmVtYWluaW5nRnJhY3Rpb24gKiAxMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJxdWFydGVyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wicXVhcnRlclwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IgKiAzKTtcbiAgICB9XG4gICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJtb250aFwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibW9udGhcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IGR1cmF0aW9uPy53ZWVrID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrICs9IHJlbWFpbmluZ0ZyYWN0aW9uICogNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJ3ZWVrXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wid2Vla1wiXSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGZsb29yICogNyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ3ZWVrXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IGR1cmF0aW9uPy5kYXkgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wiZGF5XCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wiZGF5XCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBkdXJhdGlvbj8uaG91ciA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogMjQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJob3VyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJob3VyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IGR1cmF0aW9uPy5taW51dGUgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbnV0ZVwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbnV0ZVwiXSk7XG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIm1pbnV0ZVwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBkdXJhdGlvbj8uc2Vjb25kID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDYwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJzZWNvbmRcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgPSBkdXJhdGlvbj8ubWlsbGlzZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAxMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIGZsb29yKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgcmV2ZXJzZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkdXJhdGlvbikge1xuICAgICAgICByZXZlcnNlZFtrZXldID0gLWR1cmF0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXZlcnNlZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4vdGltZXpvbmUuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uLCBFbXB0eUR1cmF0aW9uIH0gZnJvbSBcIi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VXaXRoVGltZXpvbmUge1xuICAgIGluc3RhbnQ7XG4gICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgY29uc3RydWN0b3IoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW50ID0gaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVPZmZzZXQgPz8gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb21EYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoZGF0ZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQsIHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbnQgPSBpbnB1dD8uaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IHRvVGltZXpvbmVPZmZzZXQoaW5wdXQ/LnRpbWV6b25lLCBpbnN0YW50LCB0aW1lem9uZU92ZXJyaWRlcyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVmZXJlbmNlV2l0aFRpbWV6b25lKGluc3RhbnQsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICB9XG4gICAgZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5pbnN0YW50KTtcbiAgICAgICAgaWYgKHRoaXMudGltZXpvbmVPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIHRoaXMuZ2V0U3lzdGVtVGltZXpvbmVBZGp1c3RtZW50TWludXRlKHRoaXMuaW5zdGFudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBnZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgb3ZlcnJpZGVUaW1lem9uZU9mZnNldCkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWV6b25lT2Zmc2V0ID0gb3ZlcnJpZGVUaW1lem9uZU9mZnNldCA/PyB0aGlzLnRpbWV6b25lT2Zmc2V0ID8/IGN1cnJlbnRUaW1lem9uZU9mZnNldDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lem9uZU9mZnNldCAtIHRhcmdldFRpbWV6b25lT2Zmc2V0O1xuICAgIH1cbiAgICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZXpvbmVPZmZzZXQgPz8gLXRoaXMuaW5zdGFudC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAga25vd25WYWx1ZXM7XG4gICAgaW1wbGllZFZhbHVlcztcbiAgICByZWZlcmVuY2U7XG4gICAgX3RhZ3MgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGlmIChrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMua25vd25WYWx1ZXNba2V5XSA9IGtub3duQ29tcG9uZW50c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSwgZHVyYXRpb24gPSBFbXB0eUR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBkYXRlID0gYWRkRHVyYXRpb24ocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLCBkdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlXCIpO1xuICAgICAgICBpZiAoXCJob3VyXCIgaW4gZHVyYXRpb24gfHwgXCJtaW51dGVcIiBpbiBkdXJhdGlvbiB8fCBcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWlsbGlzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlQW5kVGltZVwiKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJUaW1lKGNvbXBvbmVudHMsIGRhdGUpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHJlZmVyZW5jZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGdldChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQ2VydGFpbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzO1xuICAgIH1cbiAgICBnZXRDZXJ0YWluQ29tcG9uZW50cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMua25vd25WYWx1ZXMpO1xuICAgIH1cbiAgICBpbXBseShjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzc2lnbihjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGREdXJhdGlvbkFzSW1wbGllZChkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVdpdGhvdXRUaW1lem9uZUFkanVzdG1lbnQoKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGN1cnJlbnREYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIGlmIChcImRheVwiIGluIGR1cmF0aW9uIHx8IFwid2Vla1wiIGluIGR1cmF0aW9uIHx8IFwibW9udGhcIiBpbiBkdXJhdGlvbiB8fCBcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoW1wiZGF5XCIsIFwid2Vla2RheVwiLCBcIm1vbnRoXCIsIFwieWVhclwiXSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbY29tcG9uZW50c107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzID0ge307XG4gICAgICAgIGNvbXBvbmVudC5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5rbm93blZhbHVlc1trZXldID0gdGhpcy5rbm93blZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW1wbGllZFZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXNba2V5XSA9IHRoaXMuaW1wbGllZFZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGlzT25seURhdGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0NlcnRhaW4oXCJob3VyXCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1pbnV0ZVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJzZWNvbmRcIik7XG4gICAgfVxuICAgIGlzT25seVRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKSk7XG4gICAgfVxuICAgIGlzT25seVdlZWtkYXlDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIndlZWtkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwiZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBpc0RhdGVXaXRoVW5rbm93blllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInllYXJcIik7XG4gICAgfVxuICAgIGlzVmFsaWREYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0aGlzLmdldChcInllYXJcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuZ2V0KFwibW9udGhcIikgLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuZ2V0KFwiZGF5XCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJob3VyXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRIb3VycygpICE9IHRoaXMuZ2V0KFwiaG91clwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KFwibWludXRlXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRNaW51dGVzKCkgIT0gdGhpcy5nZXQoXCJtaW51dGVcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ0NvbXBvbmVudHMge1xuICAgICAgICAgICAgdGFnczogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuX3RhZ3MpLnNvcnQoKSl9LCBcbiAgICAgICAgICAgIGtub3duVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMua25vd25WYWx1ZXMpfSwgXG4gICAgICAgICAgICBpbXBsaWVkVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW1wbGllZFZhbHVlcyl9fSwgXG4gICAgICAgICAgICByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UpfV1gO1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZUFkanVzdG1lbnQgPSB0aGlzLnJlZmVyZW5jZS5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgdGhpcy5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lQWRqdXN0bWVudCAqIDYwMDAwKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuX3RhZ3MpO1xuICAgIH1cbiAgICBkYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ2V0KFwieWVhclwiKSwgdGhpcy5nZXQoXCJtb250aFwiKSAtIDEsIHRoaXMuZ2V0KFwiZGF5XCIpLCB0aGlzLmdldChcImhvdXJcIiksIHRoaXMuZ2V0KFwibWludXRlXCIpLCB0aGlzLmdldChcInNlY29uZFwiKSwgdGhpcy5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5nZXQoXCJ5ZWFyXCIpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdSZXN1bHQge1xuICAgIHJlZkRhdGU7XG4gICAgaW5kZXg7XG4gICAgdGV4dDtcbiAgICByZWZlcmVuY2U7XG4gICAgc3RhcnQ7XG4gICAgZW5kO1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMucmVmRGF0ZSA9IHJlZmVyZW5jZS5pbnN0YW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgdGhpcy5pbmRleCwgdGhpcy50ZXh0KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5zdGFydCA/IHRoaXMuc3RhcnQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0aGlzLmVuZCA/IHRoaXMuZW5kLmNsb25lKCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kYXRlKCk7XG4gICAgfVxuICAgIGFkZFRhZyh0YWcpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWcodGFnKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWcodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMuc3RhcnQuYWRkVGFncyh0YWdzKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0YWdzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFRhZ3MgPSBuZXcgU2V0KHRoaXMuc3RhcnQudGFncygpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0aGlzLmVuZC50YWdzKCkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkVGFncztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHRoaXMudGFncygpKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiBgW1BhcnNpbmdSZXN1bHQge2luZGV4OiAke3RoaXMuaW5kZXh9LCB0ZXh0OiAnJHt0aGlzLnRleHR9JywgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX0gLi4ufV1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3VsdHMuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKHByZWZpeCwgc2luZ2xlVGltZXVuaXRQYXR0ZXJuLCBjb25uZWN0b3JQYXR0ZXJuID0gXCJcXFxcc3swLDV9LD9cXFxcc3swLDV9XCIpIHtcbiAgICBjb25zdCBzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmUgPSBzaW5nbGVUaW1ldW5pdFBhdHRlcm4ucmVwbGFjZSgvXFwoKD8hXFw/KS9nLCBcIig/OlwiKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSg/OiR7Y29ubmVjdG9yUGF0dGVybn0ke3NpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZX0pezAsMTB9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeSkge1xuICAgIGxldCBrZXlzO1xuICAgIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBrZXlzID0gQXJyYXkuZnJvbShkaWN0aW9uYXJ5LmtleXMoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgIC5qb2luKFwifFwiKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJpbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcikge1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kWWVhckNsb3Nlc3RUb1JlZihyZWZEYXRlLCBkYXksIG1vbnRoKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICBkYXRlLnNldE1vbnRoKG1vbnRoIC0gMSk7XG4gICAgZGF0ZS5zZXREYXRlKGRheSk7XG4gICAgY29uc3QgbmV4dFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAxIH0pO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gYWRkRHVyYXRpb24oZGF0ZSwgeyBcInllYXJcIjogLTEgfSk7XG4gICAgaWYgKE1hdGguYWJzKG5leHRZZWFyLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSA8IE1hdGguYWJzKGRhdGUuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGUgPSBuZXh0WWVhcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMobGFzdFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IGxhc3RZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eWVhcnMuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBzdW5kYXk6IDAsXG4gICAgc3VuOiAwLFxuICAgIFwic3VuLlwiOiAwLFxuICAgIG1vbmRheTogMSxcbiAgICBtb246IDEsXG4gICAgXCJtb24uXCI6IDEsXG4gICAgdHVlc2RheTogMixcbiAgICB0dWU6IDIsXG4gICAgXCJ0dWUuXCI6IDIsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHdlZDogMyxcbiAgICBcIndlZC5cIjogMyxcbiAgICB0aHVyc2RheTogNCxcbiAgICB0aHVyczogNCxcbiAgICBcInRodXJzLlwiOiA0LFxuICAgIHRodXI6IDQsXG4gICAgXCJ0aHVyLlwiOiA0LFxuICAgIHRodTogNCxcbiAgICBcInRodS5cIjogNCxcbiAgICBmcmlkYXk6IDUsXG4gICAgZnJpOiA1LFxuICAgIFwiZnJpLlwiOiA1LFxuICAgIHNhdHVyZGF5OiA2LFxuICAgIHNhdDogNixcbiAgICBcInNhdC5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyeTogMSxcbiAgICBmZWJydWFyeTogMixcbiAgICBtYXJjaDogMyxcbiAgICBhcHJpbDogNCxcbiAgICBtYXk6IDUsXG4gICAganVuZTogNixcbiAgICBqdWx5OiA3LFxuICAgIGF1Z3VzdDogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgb2N0b2JlcjogMTAsXG4gICAgbm92ZW1iZXI6IDExLFxuICAgIGRlY2VtYmVyOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9jdDogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIG5vdjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBvbmU6IDEsXG4gICAgdHdvOiAyLFxuICAgIHRocmVlOiAzLFxuICAgIGZvdXI6IDQsXG4gICAgZml2ZTogNSxcbiAgICBzaXg6IDYsXG4gICAgc2V2ZW46IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgbmluZTogOSxcbiAgICB0ZW46IDEwLFxuICAgIGVsZXZlbjogMTEsXG4gICAgdHdlbHZlOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZmlyc3Q6IDEsXG4gICAgc2Vjb25kOiAyLFxuICAgIHRoaXJkOiAzLFxuICAgIGZvdXJ0aDogNCxcbiAgICBmaWZ0aDogNSxcbiAgICBzaXh0aDogNixcbiAgICBzZXZlbnRoOiA3LFxuICAgIGVpZ2h0aDogOCxcbiAgICBuaW50aDogOSxcbiAgICB0ZW50aDogMTAsXG4gICAgZWxldmVudGg6IDExLFxuICAgIHR3ZWxmdGg6IDEyLFxuICAgIHRoaXJ0ZWVudGg6IDEzLFxuICAgIGZvdXJ0ZWVudGg6IDE0LFxuICAgIGZpZnRlZW50aDogMTUsXG4gICAgc2l4dGVlbnRoOiAxNixcbiAgICBzZXZlbnRlZW50aDogMTcsXG4gICAgZWlnaHRlZW50aDogMTgsXG4gICAgbmluZXRlZW50aDogMTksXG4gICAgdHdlbnRpZXRoOiAyMCxcbiAgICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eS1maXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICAgIFwidHdlbnR5IHRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eS1mb3VydGhcIjogMjQsXG4gICAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHkgc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgICBcInR3ZW50eS1zZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gICAgXCJ0d2VudHkgbmludGhcIjogMjksXG4gICAgXCJ0d2VudHktbmludGhcIjogMjksXG4gICAgXCJ0aGlydGlldGhcIjogMzAsXG4gICAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gICAgXCJ0aGlydHktZmlyc3RcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIgPSB7XG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdlZWtzOiBcIndlZWtcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHM6IFwic2Vjb25kXCIsXG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG06IFwibWludXRlXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGQ6IFwiZGF5XCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgdzogXCJ3ZWVrXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vOiBcIm1vbnRoXCIsXG4gICAgbW9uOiBcIm1vbnRoXCIsXG4gICAgbW9zOiBcIm1vbnRoXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBxdHI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5OiBcInllYXJcIixcbiAgICB5cjogXCJ5ZWFyXCIsXG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIC4uLlRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGYoPzpcXFxcc3swLDJ9YW4/KT98YW4/XFxcXGIoPzpcXFxcc3swLDJ9ZmV3KT98ZmV3fHNldmVyYWx8dGhlfGE/XFxcXHN7MCwyfWNvdXBsZVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiYVwiIHx8IG51bSA9PT0gXCJhblwiIHx8IG51bSA9PSBcInRoZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2Zldy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGYvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2NvdXBsZS8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3NldmVyYWwvKSkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRoKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRoKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzezAsMn0oPzpCRXxBRHxCQ3xCQ0V8Q0UpfFsxLTldWzAtOV17M318WzUtOV1bMC05XXwyWzAtNV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIpfSlgO1xuY29uc3QgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOID0gYFxcXFxzezAsNX0sPyg/OlxcXFxzKmFuZCk/XFxcXHN7MCw1fWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYWdtZW50cykubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eW2EtekEtWl0rJC8pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJQYXR0ZXJuKGNvbnRleHQpICE9PSBjdXJyZW50SW5uZXJQYXR0ZXJuO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChcXFxcV3xeKWA7XG4gICAgfVxuICAgIGNhY2hlZElubmVyUGF0dGVybiA9IG51bGw7XG4gICAgY2FjaGVkUGF0dGVybiA9IG51bGw7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZElubmVyUGF0dGVybikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCB0aGlzLmNhY2hlZElubmVyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuID0gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7dGhpcy5wYXR0ZXJuTGVmdEJvdW5kYXJ5KCl9JHt0aGlzLmNhY2hlZElubmVyUGF0dGVybi5zb3VyY2V9YCwgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4uZmxhZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG1hdGNoWzFdID8/IFwiXCI7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBoZWFkZXIubGVuZ3RoO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF0Y2hbaSAtIDFdID0gbWF0Y2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OndpdGhpbnxpbnxmb3IpXFxcXHMqKT9gICtcbiAgICBgKD86KD86YWJvdXR8YXJvdW5kfHJvdWdobHl8YXBwcm94aW1hdGVseXxqdXN0KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1QgPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlID8gUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA6IFBBVFRFUk5fV0lUSF9QUkVGSVg7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15mb3JcXHMqdGhlXFxzKlxcdysvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86dG98XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGwpP1xcXFxzezAsM31gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBgKD86LXwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVxcXFx3KSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKD8hXFxcXHMqKD86YW18cG0pKVxcXFxzKmAgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86dG98XFxcXC0pXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98XFxcXHMqLFxcXFxzKnxcXFxccyspYCArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIGNvbnN0cnVjdG9yKHNob3VsZFNraXBZZWFyTGlrZURhdGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlID0gc2hvdWxkU2tpcFllYXJMaWtlRGF0ZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSAmJiAhbWF0Y2hbWUVBUl9HUk9VUF0gJiYgbWF0Y2hbREFURV9HUk9VUF0ubWF0Y2goL14yWzAtNV0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dFxuICAgICAgICAgICAgLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlclwiKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgKD86LHwtfG9mKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hZGRUYWcoXCJwYXJzZXIvRU5Nb250aE5hbWVQYXJzZXJcIik7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pWy1cXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyID0gc3RyaWN0TW9udGhEYXRlT3JkZXI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGxldCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRheSA+PSAxICYmIGRheSA8PSAxMikge1xuICAgICAgICAgICAgICAgIFttb250aCwgZGF5XSA9IFtkYXksIG1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5mdW5jdGlvbiBwcmltYXJ5VGltZVBhdHRlcm4obGVmdEJvdW5kYXJ5LCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2xlZnRCb3VuZGFyeX1gICtcbiAgICAgICAgYCR7cHJpbWFyeVByZWZpeH1gICtcbiAgICAgICAgYChcXFxcZHsxLDR9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnw6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzo6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsyfSlgICtcbiAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtwcmltYXJ5U3VmZml4fWAsIGZsYWdzKTtcbn1cbmZ1bmN0aW9uIGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7Zm9sbG93aW5nUGhhc2V9KWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufFxcXFw6fFxcXFzvvJopYCArXG4gICAgICAgIGAoXFxcXGR7MSwyfSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtmb2xsb3dpbmdTdWZmaXh9YCwgXCJpXCIpO1xufVxuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IE1JTExJX1NFQ09ORF9HUk9VUCA9IDU7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBcImlcIjtcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHxcXFxcYilgO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/IS8pKD89XFxcXFd8JClgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VGltZVBhdHRlcm5UaHJvdWdoQ2FjaGUoKTtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBzdGFydENvbXBvbmVudHMgPSB0aGlzLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxkezR9LykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSA0O1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQsIHN0YXJ0Q29tcG9uZW50cyk7XG4gICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQYXR0ZXJuID0gdGhpcy5nZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdNYXRjaCA9IGZvbGxvd2luZ1BhdHRlcm4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHRleHQubWF0Y2goL15cXGR7Myw0fS8pICYmIGZvbGxvd2luZ01hdGNoKSB7XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyLDR9JC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyfVxcV1xcZHsyfS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2xsb3dpbmdNYXRjaCB8fFxuICAgICAgICAgICAgZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHszLDR9JC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIGZvbGxvd2luZ01hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gZm9sbG93aW5nTWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRSZXR1cm5XaXRoRm9sbG93aW5nUGF0dGVybihyZXN1bHQpO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCBzdHJpY3QgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbSE9VUl9HUk9VUF0ubGVuZ3RoID09IDQgJiYgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBudWxsICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSB8fCBtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXS5sZW5ndGggPT0gMSAmJiAhbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZCA9IHBhcnNlSW50KG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0uc3Vic3RyaW5nKDAsIDMpKTtcbiAgICAgICAgICAgIGlmIChtaWxsaXNlY29uZCA+PSAxMDAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBtaWxsaXNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRzLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gTWVyaWRpZW0uQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiAxMjtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgLSAxMiA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPD0gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQkLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZFxcZFxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXFxkW2FwQVBdJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRpbmdXaXRoTnVtYmVycyA9IHJlc3VsdC50ZXh0Lm1hdGNoKC9bXlxcZDouXShcXGRbXFxkLl0rKSQvKTtcbiAgICAgICAgaWYgKGVuZGluZ1dpdGhOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrLVxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspXFxzKi1cXHMqKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzFdO1xuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzJdO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlcnMuaW5jbHVkZXMoXCIuXCIpICYmICFlbmRpbmdOdW1iZXJzLm1hdGNoKC9cXGQoXFwuXFxkezJ9KSskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlclZhbCA9IHBhcnNlSW50KGVuZGluZ051bWJlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChzdGFydGluZ051bWJlcnMpO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlclZhbCA+IDI0IHx8IHN0YXJ0aW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYWNoZWRQcmltYXJ5UHJlZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5U3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBudWxsO1xuICAgIGdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVByZWZpeCA9IHRoaXMucHJpbWFyeVByZWZpeCgpO1xuICAgICAgICBjb25zdCBwcmltYXJ5U3VmZml4ID0gdGhpcy5wcmltYXJ5U3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPT09IHByaW1hcnlQcmVmaXggJiYgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID09PSBwcmltYXJ5U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBwcmltYXJ5VGltZVBhdHRlcm4odGhpcy5wcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpLCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCB0aGlzLnBhdHRlcm5GbGFncygpKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5UHJlZml4ID0gcHJpbWFyeVByZWZpeDtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID0gcHJpbWFyeVN1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUHJpbWFyeVRpbWVQYXR0ZXJuO1xuICAgIH1cbiAgICBjYWNoZWRGb2xsb3dpbmdQaGFzZSA9IG51bGw7XG4gICAgY2FjaGVkRm9sbG93aW5nU3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gbnVsbDtcbiAgICBnZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nUGhhc2UgPSB0aGlzLmZvbGxvd2luZ1BoYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1N1ZmZpeCA9IHRoaXMuZm9sbG93aW5nU3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZEZvbGxvd2luZ1BoYXNlID09PSBmb2xsb3dpbmdQaGFzZSAmJiB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9PT0gZm9sbG93aW5nU3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbiA9IGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPSBmb2xsb3dpbmdQaGFzZTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBmb2xsb3dpbmdTdWZmaXg7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHx0b3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmF0fGZyb20pXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/Om9cXFxcVypjbG9ja3xhdFxcXFxzKm5pZ2h0fGluXFxcXHMqdGhlXFxcXHMqKD86bW9ybmluZ3xhZnRlcm5vb24pKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJuaWdodFwiKSkge1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDYgJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwiYWZ0ZXJub29uXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibW9ybmluZ1wiKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdDb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAoZm9sbG93aW5nQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9sbG93aW5nQ29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvRU5UaW1lRXhwcmVzc2lvblBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sbG93aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0oPzphZ298YmVmb3JlfGVhcmxpZXIpKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX0oPzpsYXRlcnxhZnRlcnxmcm9tIG5vd3xoZW5jZWZvcnRofGZvcndhcmR8b3V0KWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSlcXFxcc3swLDV9KGxhdGVyfGFmdGVyfGZyb20gbm93KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICBpZiAoIXRpbWVVbml0cykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChyKSA9PiB0aGlzLmlzVmFsaWQoY29udGV4dCwgcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgY3VyUmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgbGV0IG5leHRSZXN1bHQgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRSZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dEJldHdlZW4gPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGN1clJlc3VsdC5pbmRleCArIGN1clJlc3VsdC50ZXh0Lmxlbmd0aCwgbmV4dFJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFJlc3VsdCA9IHRoaXMubWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBsZWZ0LCByaWdodCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbWVyZ2VkICR7bGVmdH0gYW5kICR7cmlnaHR9IGludG8gJHttZXJnZWRSZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbWVyZ2VkUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJzdHJhY3RSZWZpbmVycy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAhY3VycmVudFJlc3VsdC5lbmQgJiYgIW5leHRSZXN1bHQuZW5kICYmIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbDtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBmcm9tUmVzdWx0LCB0b1Jlc3VsdCkge1xuICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmICF0b1Jlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoa2V5LCB0b1Jlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1Jlc3VsdC5zdGFydC5pc0NlcnRhaW4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShrZXksIGZyb21SZXN1bHQuc3RhcnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHRvUmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgbGV0IGZyb21EYXRlID0gZnJvbVJlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBsZXQgdG9EYXRlID0gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHRvRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgdG9EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGZyb21EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGZyb21EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgeWVhcjogMSB9KTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgeWVhcjogLTEgfSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZnJvbURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBbdG9SZXN1bHQsIGZyb21SZXN1bHRdID0gW2Zyb21SZXN1bHQsIHRvUmVzdWx0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGZyb21SZXN1bHQuc3RhcnQ7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0b1Jlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gTWF0aC5taW4oZnJvbVJlc3VsdC5pbmRleCwgdG9SZXN1bHQuaW5kZXgpO1xuICAgICAgICBpZiAoZnJvbVJlc3VsdC5pbmRleCA8IHRvUmVzdWx0LmluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCA9IGZyb21SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgdG9SZXN1bHQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gdG9SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgZnJvbVJlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvfC184oCTfHVudGlsfHRocm91Z2h8dGlsbClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVSZXN1bHQoZGF0ZVJlc3VsdCwgdGltZVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRhdGVSZXN1bHQuY2xvbmUoKTtcbiAgICBjb25zdCBiZWdpbkRhdGUgPSBkYXRlUmVzdWx0LnN0YXJ0O1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IHRpbWVSZXN1bHQuc3RhcnQ7XG4gICAgcmVzdWx0LnN0YXJ0ID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChiZWdpbkRhdGUsIGJlZ2luVGltZSk7XG4gICAgaWYgKGRhdGVSZXN1bHQuZW5kICE9IG51bGwgfHwgdGltZVJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCA/IGRhdGVSZXN1bHQuc3RhcnQgOiBkYXRlUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHRpbWVSZXN1bHQuZW5kID09IG51bGwgPyB0aW1lUmVzdWx0LnN0YXJ0IDogdGltZVJlc3VsdC5lbmQ7XG4gICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChlbmREYXRlLCBlbmRUaW1lKTtcbiAgICAgICAgaWYgKGRhdGVSZXN1bHQuZW5kID09IG51bGwgJiYgZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUoZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREYXRlVGltZS5pc0NlcnRhaW4oXCJkYXlcIikpIHtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShlbmREYXRlVGltZSwgbmV4dERheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gZW5kRGF0ZVRpbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChkYXRlQ29tcG9uZW50LCB0aW1lQ29tcG9uZW50KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb21wb25lbnQgPSBkYXRlQ29tcG9uZW50LmNsb25lKCk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwiaG91clwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbnV0ZVwiKSk7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInNlY29uZFwiKSkge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwic2Vjb25kXCIpKTtcbiAgICAgICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1pbGxpc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgIH1cbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lQ29tcG9uZW50LmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSA9IGRhdGVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJlxuICAgICAgICAoZGF0ZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSB8fFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRlQ29tcG9uZW50LnRhZ3MoKSkuc29tZSgodCkgPT4gdC5zdGFydHNXaXRoKFwiY2FzdWFsUmVmZXJlbmNlL1wiKSkpO1xuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpICE9IG51bGwgJiYgIWRhdGVIYXNNZWFuaW5nZnVsTWVyaWRpZW0pIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICB9XG4gICAgaWYgKGRhdGVUaW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpID09IE1lcmlkaWVtLlBNICYmIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgPCAxMikge1xuICAgICAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKGRhdGVDb21wb25lbnQudGFncygpKTtcbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKHRpbWVDb21wb25lbnQudGFncygpKTtcbiAgICByZXR1cm4gZGF0ZVRpbWVDb21wb25lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnaW5nQ2FsY3VsYXRpb24uanMubWFwIiwiaW1wb3J0IHsgTWVyZ2luZ1JlZmluZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRlVGltZVJlc3VsdCB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAoKChjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBuZXh0UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkgfHxcbiAgICAgICAgICAgIChuZXh0UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkpICYmXG4gICAgICAgICAgICB0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpICE9IG51bGwpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc09ubHlEYXRlKClcbiAgICAgICAgICAgID8gbWVyZ2VEYXRlVGltZVJlc3VsdChjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KVxuICAgICAgICAgICAgOiBtZXJnZURhdGVUaW1lUmVzdWx0KG5leHRSZXN1bHQsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICByZXN1bHQuaW5kZXggPSBjdXJyZW50UmVzdWx0LmluZGV4O1xuICAgICAgICByZXN1bHQudGV4dCA9IGN1cnJlbnRSZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgbmV4dFJlc3VsdC50ZXh0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGF0fGFmdGVyfGJlZm9yZXxvbnxvZnwsfC18XFxcXC584oiZfDopP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4uLy4uL3RpbWV6b25lLmpzXCI7XG5jb25zdCBUSU1FWk9ORV9OQU1FX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKiw/XFxcXHMqXFxcXCg/KFtBLVpdezIsNH0pXFxcXCk/KD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIge1xuICAgIHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudGltZXpvbmVPdmVycmlkZXMgPSB0aW1lem9uZU92ZXJyaWRlcztcbiAgICB9XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPdmVycmlkZXMgPSBjb250ZXh0Lm9wdGlvbi50aW1lem9uZXMgPz8ge307XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFRJTUVaT05FX05BTUVfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZXpvbmVBYmJyID0gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSByZXN1bHQuc3RhcnQuZGF0ZSgpID8/IHJlc3VsdC5yZWZEYXRlID8/IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCB0ek92ZXJyaWRlcyA9IHsgLi4udGhpcy50aW1lem9uZU92ZXJyaWRlcywgLi4udGltZXpvbmVPdmVycmlkZXMgfTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUFiYnIsIHJlZkRhdGUsIHR6T3ZlcnJpZGVzKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRUaW1lem9uZU9mZnNldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke3RpbWV6b25lQWJicn0nIGludG86ICR7ZXh0cmFjdGVkVGltZXpvbmVPZmZzZXR9IGZvcjogJHtyZXN1bHQuc3RhcnR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IHJlc3VsdC5zdGFydC5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZXpvbmVPZmZzZXQgIT09IG51bGwgJiYgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgIT0gY3VycmVudFRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lem9uZUFiYnIgIT0gbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcy5tYXAiLCJjb25zdCBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86XFxcXCg/KD86R01UfFVUQylcXFxccz8pPyhbKy1dKShcXFxcZHsxLDJ9KSg/Ojo/KFxcXFxkezJ9KSk/XFxcXCk/XCIsIFwiaVwiKTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9TSUdOX0dST1VQID0gMTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUCA9IDI7XG5jb25zdCBUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfT0ZGU0VUX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIHRpbWV6b25lOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgY29uc3QgbWludXRlT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX01JTlVURV9PRkZTRVRfR1JPVVBdIHx8IFwiMFwiKTtcbiAgICAgICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA+IDE0ICogNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVBdID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0ID0gLXRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGFwUmVtb3ZhbFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgcHJldlJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXggPj0gcHJldlJlc3VsdC5pbmRleCArIHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgICAgICAgICBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGtlcHQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lmxlbmd0aCA+IHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBwcmV2UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2VwdCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVtb3ZlICR7cmVtb3ZlZH0gYnkgJHtrZXB0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2UmVzdWx0ID0ga2VwdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXBSZW1vdmFsUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkocmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZkRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgZGF5c1RvV2Vla2RheSA9IGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIGxldCBjb21wb25lbnRzID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSk7XG4gICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuYWRkRHVyYXRpb25Bc0ltcGxpZWQoeyBkYXk6IGRheXNUb1dlZWtkYXkgfSk7XG4gICAgY29tcG9uZW50cy5hc3NpZ24oXCJ3ZWVrZGF5XCIsIHdlZWtkYXkpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSA/IDcgOiB3ZWVrZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSArIHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IHJlZldlZWtkYXkgJiYgd2Vla2RheSAhPSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KSArIDc7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KSB7XG4gICAgY29uc3QgYmFja3dhcmQgPSBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgY29uc3QgZm9yd2FyZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgIHJldHVybiBmb3J3YXJkIDwgLWJhY2t3YXJkID8gZm9yd2FyZCA6IGJhY2t3YXJkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZm9yd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGZvcndhcmRDb3VudCA8IDApIHtcbiAgICAgICAgZm9yd2FyZENvdW50ICs9IDc7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgYmFja3dhcmRDb3VudCA9IHdlZWtkYXkgLSByZWZXZWVrZGF5O1xuICAgIGlmIChiYWNrd2FyZENvdW50ID49IDApIHtcbiAgICAgICAgYmFja3dhcmRDb3VudCAtPSA3O1xuICAgIH1cbiAgICByZXR1cm4gYmFja3dhcmRDb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlZWtkYXlzLmpzLm1hcCIsImltcG9ydCAqIGFzIGRhdGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IGdldERheXNGb3J3YXJkVG9XZWVrZGF5IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkRGF0ZVJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmICghY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmRGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlUaW1lKCkgJiYgY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmRm9sbG93aW5nRGF5ID0gbmV3IERhdGUocmVmRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LnN0YXJ0LCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB0aW1lIGZyb20gdGhlIHJlZiBkYXRlICgke3JlZkRhdGV9KSB0byB0aGUgZm9sbG93aW5nIGRheSAoJHtyZWZGb2xsb3dpbmdEYXl9KWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmIHJlc3VsdC5lbmQuaXNPbmx5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgcmVmRm9sbG93aW5nRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5kYXRlKCkgPiByZXN1bHQuZW5kLmRhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgcmVmRGF0ZSA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5c1RvQWRkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgcmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpIHx8IDc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIGZvcndhcmRlZFdlZWtkYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gd2Vla2RheSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMyAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB5ZWFyICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc0NlcnRhaW4oXCJ5ZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCByZXN1bHQuZW5kLmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IG1vbnRoICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcndhcmREYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQucmVwbGFjZShcIiBcIiwgXCJcIikubWF0Y2goL15cXGQqKFxcLlxcZCopPyQvKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdCAnJHtyZXN1bHQudGV4dH0nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuc3RhcnR9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgIXJlc3VsdC5lbmQuaXNWYWxpZERhdGUoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGludmFsaWQgcmVzdWx0OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoU3RyaWN0KSBSZW1vdmluZyB3ZWVrZGF5IG9ubHkgY29tcG9uZW50OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmxpa2VseUZvcm1hdEZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV17NH0pXFxcXC0oWzAtOV17MSwyfSlcXFxcLShbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlRcIiArXG4gICAgXCIoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiOihbMC05XXsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNH0pKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIihcIiArXG4gICAgXCJafChbKy1dXFxcXGR7Mn0pOj8oXFxcXGR7Mn0pP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAyO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgSE9VUl9OVU1CRVJfR1JPVVAgPSA0O1xuY29uc3QgTUlOVVRFX05VTUJFUl9HUk9VUCA9IDU7XG5jb25zdCBTRUNPTkRfTlVNQkVSX0dST1VQID0gNjtcbmNvbnN0IE1JTExJU0VDT05EX05VTUJFUl9HUk9VUCA9IDc7XG5jb25zdCBUWkRfR1JPVVAgPSA4O1xuY29uc3QgVFpEX0hPVVJfT0ZGU0VUX0dST1VQID0gOTtcbmNvbnN0IFRaRF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMTA7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJU09Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIFwieWVhclwiOiBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJtb250aFwiOiBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgICAgIFwiZGF5XCI6IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbSE9VUl9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBwYXJzZUludChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIHBhcnNlSW50KG1hdGNoW01JTlVURV9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW1NFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBwYXJzZUludChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUWkRfTUlOVVRFX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvSVNPRm9ybWF0UGFyc2VyXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlTT0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBuZXh0UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXdSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgY3VycmVudFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgIWN1cnJlbnRSZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIik7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgJiYgdGV4dEJldHdlZW4ubWF0Y2goL14sP1xccyokLykgIT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIuanNcIjtcbmltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBGb3J3YXJkRGF0ZVJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgY29uZmlndXJhdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElTT0Zvcm1hdFBhcnNlcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMucHVzaChuZXcgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBGb3J3YXJkRGF0ZVJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBVbmxpa2VseUZvcm1hdEZpbHRlcihzdHJpY3RNb2RlKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9ucy5qcy5tYXAiLCJpbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgYXNzaWduU2ltaWxhclRpbWUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbm93KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm93XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9kYXkocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmRlbGV0ZShcIm1lcmlkaWVtXCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9kYXlcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXkocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIDEpLmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9tb3Jyb3cocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbW9ycm93XCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIG51bURheSkge1xuICAgIHJldHVybiB0aGVEYXlBZnRlcihyZWZlcmVuY2UsIC1udW1EYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgbkRheXMpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIG5EYXlzKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXdEYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b25pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjIpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b25pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdE5pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgNikge1xuICAgICAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXlFdmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBsZXQgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgdGFyZ2V0RGF0ZSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UveWVzdGVyZGF5XCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pZG5pZ2h0KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEhvdXJzKCkgPiAyKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogMSB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbW9ybmluZyhyZWZlcmVuY2UsIGltcGx5SG91ciA9IDYpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVybm9vbihyZWZlcmVuY2UsIGltcGx5SG91ciA9IDE1KSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vb24ocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAxMik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhc3VhbFJlZmVyZW5jZXMuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG5vd3x0b2RheXx0b25pZ2h0fHRvbW9ycm93fG92ZXJtb3Jyb3d8dG1yfHRtcnd8eWVzdGVyZGF5fGxhc3RcXHMqbmlnaHQpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3dcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9kYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5ZXN0ZXJkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9tb3Jyb3dcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJ3XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9uaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib3Zlcm1vcnJvd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYXN0XFxzKm5pZ2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBwcmV2aW91c0RheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsRGF0ZVBhcnNlclwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyBjYXN1YWxSZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzp0aGlzKT9cXHN7MCwzfShtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0fG1pZG5pZ2h0fG1pZGRheXxub29uKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5hZnRlcm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3JuaW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5tb3JuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub29uXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGF5XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsVGltZVBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgXCIoPzoodGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9fHdlZWtlbmR8d2Vla2RheSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooPzpvZlxcXFxzKik/KHRoaXN8bGFzdHxwYXN0fG5leHQpXFxcXHMqd2Vlayk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCJsYXN0XCIgfHwgbW9kaWZpZXJXb3JkID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcIm5leHRcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla2RheV93b3JkID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHdlZWtkYXk7XG4gICAgICAgIGlmIChXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW3dlZWtkYXlfd29yZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2VuZFwiKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LlNVTkRBWSA6IFdlZWtkYXkuU0FUVVJEQVk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2RheVwiKSB7XG4gICAgICAgICAgICBjb25zdCByZWZXZWVrZGF5ID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSB8fCByZWZXZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LkZSSURBWSA6IFdlZWtkYXkuTU9OREFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHJlZldlZWtkYXkgLSAxO1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IHdlZWtkYXkgLSAxIDogd2Vla2RheSArIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9ICh3ZWVrZGF5ICUgNSkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyXFxcXHMqdGhpcylcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcIm5leHRcIiB8fCBtb2RpZmllci5zdGFydHNXaXRoKFwiYWZ0ZXJcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodW5pdFdvcmQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoW15cXFxcZF18XilcIiArXG4gICAgXCIoWzAtM117MCwxfVswLTldezF9KVtcXFxcL1xcXFwuXFxcXC1dKFswLTNdezAsMX1bMC05XXsxfSlcIiArXG4gICAgXCIoPzpbXFxcXC9cXFxcLlxcXFwtXShbMC05XXs0fXxbMC05XXsyfSkpP1wiICtcbiAgICBcIihcXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBPUEVOSU5HX0dST1VQID0gMTtcbmNvbnN0IEVORElOR19HUk9VUCA9IDU7XG5jb25zdCBGSVJTVF9OVU1CRVJTX0dST1VQID0gMjtcbmNvbnN0IFNFQ09ORF9OVU1CRVJTX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBncm91cE51bWJlck1vbnRoO1xuICAgIGdyb3VwTnVtYmVyRGF5O1xuICAgIGNvbnN0cnVjdG9yKGxpdHRsZUVuZGlhbikge1xuICAgICAgICB0aGlzLmdyb3VwTnVtYmVyTW9udGggPSBsaXR0bGVFbmRpYW4gPyBTRUNPTkRfTlVNQkVSU19HUk9VUCA6IEZJUlNUX05VTUJFUlNfR1JPVVA7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJEYXkgPSBsaXR0bGVFbmRpYW4gPyBGSVJTVF9OVU1CRVJTX0dST1VQIDogU0VDT05EX05VTUJFUlNfR1JPVVA7XG4gICAgfVxuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtPUEVOSU5HX0dST1VQXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4RW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBtYXRjaFtFTkRJTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRleHRCZWZvcmUubWF0Y2goXCJcXFxcZC8/JFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhFbmQgPCBjb250ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubWF0Y2goXCJeLz9cXFxcZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZFxcLlxcZCQvKSB8fCB0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkezEsMn1cXC5cXGR7MSwyfVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW1lFQVJfR1JPVVBdICYmIHRleHQuaW5kZXhPZihcIi9cIikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbdGhpcy5ncm91cE51bWJlck1vbnRoXSk7XG4gICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyRGF5XSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyICYmIG1vbnRoIDw9IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgIFtkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZFRhZyhcInBhcnNlci9TbGFzaERhdGVGb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBJc1Bvc2l0aXZlRm9sbG93aW5nUmVmZXJlbmNlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXlsrLV0vaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eLS9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCgvXlxccyokL2kpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkgfHwgSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG5leHRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShjdXJyZW50UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChjdXJyZW50UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGJlZm9yZXxmcm9tKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGFmdGVyfHNpbmNlKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24oY3VycmVudFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgZHVyYXRpb24pO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQobmV4dFJlc3VsdC5yZWZlcmVuY2UsIGN1cnJlbnRSZXN1bHQuaW5kZXgsIGAke2N1cnJlbnRSZXN1bHQudGV4dH0ke3RleHRCZXR3ZWVufSR7bmV4dFJlc3VsdC50ZXh0fWAsIGNvbXBvbmVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX1NVRkZJWF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXlxcXFxzKigke1lFQVJfUEFUVEVSTn0pYCwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBZRUFSX1NVRkZJWF9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0udHJpbSgpLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgeWVhcjogJyR7bWF0Y2hbMF19JyBpbnRvIDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dCA9PT0gY29udGV4dC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKSA9PT0gXCJtYXlcIikge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgcmVzdWx0LmluZGV4KS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRleHRCZWZvcmUubWF0Y2goL1xcYihpbikkL2kpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwidGhlIHNlY29uZFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEFmdGVyID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5ZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuLi8uLi9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanNcIjtcbmltcG9ydCBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL3JlZmluZXJzL0VOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORGVmYXVsdENvbmZpZ3VyYXRpb24ge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5Nb250aE5hbWVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICAgICAgfSwgc3RyaWN0TW9kZSk7XG4gICAgICAgIG9wdGlvbnMucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlllYXJNb250aERheVBhcnNlcihzdHJpY3RNb2RlKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy5wdXNoKG5ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IFJlZmVyZW5jZVdpdGhUaW1lem9uZSwgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBDaHJvbm8ge1xuICAgIHBhcnNlcnM7XG4gICAgcmVmaW5lcnM7XG4gICAgZGVmYXVsdENvbmZpZyA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB0aGlzLmRlZmF1bHRDb25maWcuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLnBhcnNlcnMgPSBbLi4uY29uZmlndXJhdGlvbi5wYXJzZXJzXTtcbiAgICAgICAgdGhpcy5yZWZpbmVycyA9IFsuLi5jb25maWd1cmF0aW9uLnJlZmluZXJzXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hyb25vKHtcbiAgICAgICAgICAgIHBhcnNlcnM6IFsuLi50aGlzLnBhcnNlcnNdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFsuLi50aGlzLnJlZmluZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlRGF0ZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID4gMCA/IHJlc3VsdHNbMF0uc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgICB9XG4gICAgcGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZXJzLmZvckVhY2goKHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0cyA9IENocm9uby5leGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcik7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocGFyc2VkUmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAocmVmaW5lcikge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZmluZXIucmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBleGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXJzZXIucGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dDtcbiAgICAgICAgbGV0IG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBvcmlnaW5hbFRleHQubGVuZ3RoIC0gcmVtYWluaW5nVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLmV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0LnN0YXJ0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEluZGV4ID0gcGFyc2VkUmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlZFJlc3VsdC50ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiBjb25zb2xlLmxvZyhgJHtwYXJzZXIuY29uc3RydWN0b3IubmFtZX0gZXh0cmFjdGVkIChhdCBpbmRleD0ke3BhcnNlZEluZGV4fSkgJyR7cGFyc2VkVGV4dH0nYCkpO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlZFJlc3VsdCk7XG4gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhwYXJzZWRJbmRleCArIHBhcnNlZFRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgdGV4dDtcbiAgICBvcHRpb247XG4gICAgcmVmZXJlbmNlO1xuICAgIHJlZkRhdGU7XG4gICAgY29uc3RydWN0b3IodGV4dCwgcmVmRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uID8/IHt9O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tSW5wdXQocmVmRGF0ZSwgdGhpcy5vcHRpb24udGltZXpvbmVzKTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gdGhpcy5yZWZlcmVuY2UuaW5zdGFudDtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoY29tcG9uZW50cykge1xuICAgICAgICBpZiAoY29tcG9uZW50cyBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlLCBjb21wb25lbnRzKTtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dE9yRW5kSW5kZXgsIHN0YXJ0Q29tcG9uZW50cywgZW5kQ29tcG9uZW50cykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIHRleHRPckVuZEluZGV4ID09PSBcInN0cmluZ1wiID8gdGV4dE9yRW5kSW5kZXggOiB0aGlzLnRleHQuc3Vic3RyaW5nKGluZGV4LCB0ZXh0T3JFbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhzdGFydENvbXBvbmVudHMpIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tcG9uZW50cyA/IHRoaXMuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoZW5kQ29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQodGhpcy5yZWZlcmVuY2UsIGluZGV4LCB0ZXh0LCBzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgZGVidWcoYmxvY2spIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRlYnVnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm9wdGlvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNocm9uby5qcy5tYXAiLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oZmFsc2UpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic29ubnRhZ1wiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm1vbnRhZ1wiOiAxLFxuICAgIFwibW9cIjogMSxcbiAgICBcImRpZW5zdGFnXCI6IDIsXG4gICAgXCJkaVwiOiAyLFxuICAgIFwibWl0dHdvY2hcIjogMyxcbiAgICBcIm1pXCI6IDMsXG4gICAgXCJkb25uZXJzdGFnXCI6IDQsXG4gICAgXCJkb1wiOiA0LFxuICAgIFwiZnJlaXRhZ1wiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcInNhbXN0YWdcIjogNixcbiAgICBcInNhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW51YXJcIjogMSxcbiAgICBcImrDpG5uZXJcIjogMSxcbiAgICBcImphbm5lclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyXCI6IDIsXG4gICAgXCJmZWJlclwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtw6RyelwiOiAzLFxuICAgIFwibWFlcnpcIjogMyxcbiAgICBcIm3DpHJcIjogMyxcbiAgICBcIm3DpHIuXCI6IDMsXG4gICAgXCJtcnpcIjogMyxcbiAgICBcIm1yei5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdFwiOiA4LFxuICAgIFwiYXVnXCI6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgXCJzZXB0ZW1iZXJcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGV6ZW1iZXJcIjogMTIsXG4gICAgXCJkZXpcIjogMTIsXG4gICAgXCJkZXouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVpbnNcIjogMSxcbiAgICBcImVpbmVcIjogMSxcbiAgICBcImVpbmVtXCI6IDEsXG4gICAgXCJlaW5lblwiOiAxLFxuICAgIFwiZWluZXJcIjogMSxcbiAgICBcInp3ZWlcIjogMixcbiAgICBcImRyZWlcIjogMyxcbiAgICBcInZpZXJcIjogNCxcbiAgICBcImbDvG5mXCI6IDUsXG4gICAgXCJmdWVuZlwiOiA1LFxuICAgIFwic2VjaHNcIjogNixcbiAgICBcInNpZWJlblwiOiA3LFxuICAgIFwiYWNodFwiOiA4LFxuICAgIFwibmV1blwiOiA5LFxuICAgIFwiemVoblwiOiAxMCxcbiAgICBcImVsZlwiOiAxMSxcbiAgICBcInp3w7ZsZlwiOiAxMixcbiAgICBcInp3b2VsZlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VrOiBcInNlY29uZFwiLFxuICAgIHNla3VuZGU6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIHN0ZDogXCJob3VyXCIsXG4gICAgc3R1bmRlOiBcImhvdXJcIixcbiAgICBzdHVuZGVuOiBcImhvdXJcIixcbiAgICB0YWc6IFwiZGF5XCIsXG4gICAgdGFnZTogXCJkYXlcIixcbiAgICB0YWdlbjogXCJkYXlcIixcbiAgICB3b2NoZTogXCJ3ZWVrXCIsXG4gICAgd29jaGVuOiBcIndlZWtcIixcbiAgICBtb25hdDogXCJtb250aFwiLFxuICAgIG1vbmF0ZTogXCJtb250aFwiLFxuICAgIG1vbmF0ZW46IFwibW9udGhcIixcbiAgICBtb25hdHM6IFwibW9udGhcIixcbiAgICBxdWFydGFsOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsczogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGU6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxlbjogXCJxdWFydGVyXCIsXG4gICAgYTogXCJ5ZWFyXCIsXG4gICAgajogXCJ5ZWFyXCIsXG4gICAganI6IFwieWVhclwiLFxuICAgIGphaHI6IFwieWVhclwiLFxuICAgIGphaHJlOiBcInllYXJcIixcbiAgICBqYWhyZW46IFwieWVhclwiLFxuICAgIGphaHJlczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGI/fGhhbGJlP3xlaW5pZ2VuP3x3ZW5pZ2VuP3xtZWhyZXJlbj8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJlaW5cIiB8fCBudW0gPT09IFwiZWluZXJcIiB8fCBudW0gPT09IFwiZWluZW1cIiB8fCBudW0gPT09IFwiZWluZW5cIiB8fCBudW0gPT09IFwiZWluZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3dlbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9oYWxiLykgfHwgbnVtLm1hdGNoKC9oYWxiZW4vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2VpbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZWhyZXJlbi8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMC05XXsxLDR9KD86XFxcXHMqW3ZuXVxcXFwuP1xcXFxzKig/OkMoPzpocik/fCg/OnVcXFxcLj98ZFxcXFwuPyg/OlxcXFxzKmdcXFxcLj8pPyk/XFxcXHMqWilcXFxcLj98XFxcXHMqKD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuKT8pXFxcXHMqWlxcXFwuPyk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvbi9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvei9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86YVttbl1cXFxccyo/KT9cIiArXG4gICAgXCIoPzooZGllc2VbbW5dfGxldHp0ZVttbl18big/OsOkfGFlKWNoc3RlW21uXSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihkaWVzZXxsZXR6dGV8big/OsOkfGFlKWNoc3RlKVxcXFxzKndvY2hlKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1NVRkZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9sZXR6dGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2Noc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9kaWVzZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OnVtfHZvbilcXFxccyopP1wiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKD86XFxcXHMrdW0pP3xcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzKT8pP1wiICtcbiAgICBcIig/OlxcXFxzKlVocik/XCIgK1xuICAgIFwiKD86XFxcXHMqKG1vcmdlbnN8dm9ybWl0dGFnc3xuYWNobWl0dGFnc3xhYmVuZHN8bmFjaHRzfGFtXFxcXHMrKD86TW9yZ2VufFZvcm1pdHRhZ3xOYWNobWl0dGFnfEFiZW5kKXxpblxcXFxzK2RlclxcXFxzK05hY2h0KSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCkpO1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGR7NH0kLykpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydCkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIHNlY29uZE1hdGNoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50KGV4dHJhY3RpbmdDb21wb25lbnRzLCBtYXRjaCkge1xuICAgICAgICBsZXQgaG91ciA9IDA7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9tb3JnZW58dm9ybWl0dGFnLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9uYWNobWl0dGFnfGFiZW5kLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2h0LykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKGJpcyg/OlxccyooPzphbXx6dW0pKT98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHx1bXxhbXwsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZGllc2VuKT9cXHMqKG1vcmdlbnx2b3JtaXR0YWd8bWl0dGFncz98bmFjaG1pdHRhZ3xhYmVuZHxuYWNodHxtaXR0ZXJuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcm1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2htaXR0YWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYmVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGVybmFjaHRcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IERFQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChqZXR6dHxoZXV0ZXxtb3JnZW58w7xiZXJtb3JnZW58dWViZXJtb3JnZW58Z2VzdGVybnx2b3JnZXN0ZXJufGxldHp0ZVxcXFxzKm5hY2h0KWAgK1xuICAgIGAoPzpcXFxccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqZXR6dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZXV0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDvGJlcm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcInVlYmVybW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcmdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0yIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUtleXdvcmQubWF0Y2goL2xldHp0ZVxccypuYWNodC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzphbVxcXFxzKj8pP1wiICtcbiAgICBcIig/OmRlblxcXFxzKj8pP1wiICtcbiAgICBgKFswLTldezEsMn0pXFxcXC5gICtcbiAgICBgKD86XFxcXHMqKD86YmlzKD86XFxcXHMqKD86YW18enVtKSk/fFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKSgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86XFxcXHMqKCg/Om7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpP3x2b3J8aW4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihuw6RjaHN0ZXxrb21tZW5kZXxmb2xnZW5kZXxsZXR6dGV8dmVyZ2FuZ2VuZXx2b3JpZ2V8dm9yKD86aGVyfGFuKWdlZ2FuZ2VuZSkoPzpzfG58bXxyKT8pP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMl0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMl0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzRdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC92b3IvLnRlc3QobW9kaWZpZXIpIHx8IC9sZXR6dGUvLnRlc3QobW9kaWZpZXIpIHx8IC92ZXJnYW5nZW4vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86aW58ZsO8cnx3w6RocmVuZClcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgREVUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBERU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgREVNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG1haW50ZW5hbnR8YXVqb3VyZCdodWl8ZGVtYWlufGhpZXJ8Y2V0dGVcXHMqbnVpdHxsYVxccyp2ZWlsbGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibWFpbnRlbmFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXVqb3VyZCdodWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaGllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZGVtYWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9jZXR0ZVxccypudWl0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYVxccyp2ZWlsbGUvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhjZXQ/KT9cXHMqKG1hdGlufHNvaXJ8YXByw6hzLW1pZGl8YXByZW18YSBtaWRpfMOgIG1pbnVpdCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExvd2VyID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHN1ZmZpeExvd2VyKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXByw6hzLW1pZGlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhcHJlbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTQpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic29pclwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0aW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYSBtaWRpXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDoCBtaW51aXRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzpbw6BhXSlcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfFvDoGFdfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8w6B8YXxhdXx2ZXJzfGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijDoHxhfGF1fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkaW1hbmNoZVwiOiAwLFxuICAgIFwiZGltXCI6IDAsXG4gICAgXCJsdW5kaVwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJkaVwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjcmVkaVwiOiAzLFxuICAgIFwibWVyXCI6IDMsXG4gICAgXCJqZXVkaVwiOiA0LFxuICAgIFwiamV1XCI6IDQsXG4gICAgXCJ2ZW5kcmVkaVwiOiA1LFxuICAgIFwidmVuXCI6IDUsXG4gICAgXCJzYW1lZGlcIjogNixcbiAgICBcInNhbVwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudmllclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmw6l2cmllclwiOiAyLFxuICAgIFwiZsOpdlwiOiAyLFxuICAgIFwiZsOpdi5cIjogMixcbiAgICBcImZldnJpZXJcIjogMixcbiAgICBcImZldlwiOiAyLFxuICAgIFwiZmV2LlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhdnJpbFwiOiA0LFxuICAgIFwiYXZyXCI6IDQsXG4gICAgXCJhdnIuXCI6IDQsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcImp1aW5cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVpbGxldFwiOiA3LFxuICAgIFwianVpbFwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhb8O7dFwiOiA4LFxuICAgIFwiYW91dFwiOiA4LFxuICAgIFwic2VwdGVtYnJlXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgXCJvY3RvYnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImTDqWNlbWJyZVwiOiAxMixcbiAgICBcImRlY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1blwiOiAxLFxuICAgIFwiZGV1eFwiOiAyLFxuICAgIFwidHJvaXNcIjogMyxcbiAgICBcInF1YXRyZVwiOiA0LFxuICAgIFwiY2lucVwiOiA1LFxuICAgIFwic2l4XCI6IDYsXG4gICAgXCJzZXB0XCI6IDcsXG4gICAgXCJodWl0XCI6IDgsXG4gICAgXCJuZXVmXCI6IDksXG4gICAgXCJkaXhcIjogMTAsXG4gICAgXCJvbnplXCI6IDExLFxuICAgIFwiZG91emVcIjogMTIsXG4gICAgXCJ0cmVpemVcIjogMTMsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlc1wiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXNcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcImhyc1wiOiBcImhvdXJcIixcbiAgICBcImhldXJlXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVzXCI6IFwiaG91clwiLFxuICAgIFwiam91clwiOiBcImRheVwiLFxuICAgIFwiam91cnNcIjogXCJkYXlcIixcbiAgICBcInNlbWFpbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZW1haW5lc1wiOiBcIndlZWtcIixcbiAgICBcIm1vaXNcIjogXCJtb250aFwiLFxuICAgIFwidHJpbWVzdHJlXCI6IFwicXVhcnRlclwiLFxuICAgIFwidHJpbWVzdHJlc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFuc1wiOiBcInllYXJcIixcbiAgICBcImFubsOpZVwiOiBcInllYXJcIixcbiAgICBcImFubsOpZXNcIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfHVuZT9cXFxcYnxxdWVscXVlcz98ZGVtaS0/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5lXCIgfHwgbnVtID09PSBcInVuXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcXVlbHF1ZXM/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZGVtaS0/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OlswLTldezEsMn0oPzplcik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzplcikkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxccyooPzpBQ3xBRHxwXFxcXC5cXFxccypDKD86aHI/KT9cXFxcLlxcXFxzKm5cXFxcLil8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9BQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoL0FEL2kudGVzdChtYXRjaCkgfHwgL0MvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL1teXFxkXSsvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oig/OmNlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRlcm5pZXJ8cHJvY2hhaW4pXFxcXHMqKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMTtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdWZmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAoc3VmZml4ID09IFwiZGVybmllclwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1ZmZpeCA9PSBcInByb2NoYWluXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cmFjdGluZ0NvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OlxcXFxzKig/OmF1fFxcXFwtfFxcXFzigJN8anVzcXUnYXU/fFxcXFxzKVxcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/Oi18L3xcXFxccyooPzpkZSk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgaWwgeSBhXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZGFuc3xlbnxwb3VyfHBlbmRhbnR8ZGUpXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTlVNQkVSX1BBVFRFUk4sIHBhcnNlTnVtYmVyUGF0dGVybiwgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/Omxlcz98bGF8bCd8ZHV8ZGVzPylcXFxccypgICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IG1hdGNoWzFdID8gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKSA6IDE7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFszXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICB0aW1lVW5pdHNbdW5pdF0gPSBudW07XG4gICAgICAgIGxldCBtb2RpZmllciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvZGVybmlbZcOoXXJlP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcGFzc1vDqWVdZT9zPy8udGVzdChtb2RpZmllcikgfHwgL3ByW8OpZV1jW8OpZV1kZW50cz8vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRlJNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRlJNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLml6VcIjogMCxcbiAgICBcIuaciFwiOiAxLFxuICAgIFwi54GrXCI6IDIsXG4gICAgXCLmsLRcIjogMyxcbiAgICBcIuacqFwiOiA0LFxuICAgIFwi6YeRXCI6IDUsXG4gICAgXCLlnJ9cIjogNixcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9IYW5rYWt1KHRleHQpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDE5L2csIFwiXFx1MDAyN1wiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAxRC9nLCBcIlxcdTAwMjJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTMwMDAvZywgXCJcXHUwMDIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHVGRkU1L2csIFwiXFx1MDBBNVwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdUZGMDFcXHVGRjAzLVxcdUZGMDZcXHVGRjA4XFx1RkYwOVxcdUZGMEMtXFx1RkYxOVxcdUZGMUMtXFx1RkYxRlxcdUZGMjEtXFx1RkYzQlxcdUZGM0RcXHVGRjNGXFx1RkY0MS1cXHVGRjVCXFx1RkY1RFxcdUZGNUVdL2csIGFscGhhTnVtKTtcbn1cbmZ1bmN0aW9uIGFscGhhTnVtKHRva2VuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9rZW4uY2hhckNvZGVBdCgwKSAtIDY1MjQ4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqYVN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86KD86KFvlkIzku4rmnKxdKXwoKOaYreWSjHzlubPmiJB85Luk5ZKMKT8oWzAtOe+8kC3vvJldezEsNH185YWDKSkp5bm0XFxzKik/KFswLTnvvJAt77yZXXsxLDJ9KeaciFxccyooWzAtOe+8kC3vvJldezEsMn0p5pelL2k7XG5jb25zdCBTUEVDSUFMX1lFQVJfR1JPVVAgPSAxO1xuY29uc3QgVFlQSUNBTF9ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEVSQV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNT05USF9HUk9VUCA9IDU7XG5jb25zdCBEQVlfR1JPVVAgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTdGFuZGFyZFBhcnNlciB7XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1NQRUNJQUxfWUVBUl9HUk9VUF0gJiYgbWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXS5tYXRjaChcIuWQjHzku4p85pysXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1RZUElDQUxfWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1UZXh0ID0gbWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgbGV0IHllYXIgPSB5ZWFyTnVtVGV4dCA9PSBcIuWFg1wiID8gMSA6IHBhcnNlSW50KHRvSGFua2FrdSh5ZWFyTnVtVGV4dCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLku6TlkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMjAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLlubPmiJBcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTk4ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLmmK3lkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTkyNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo44GL44KJfO+8jXzjg7x8LXzvvZ58filcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC/ku4rml6V844GN44KH44GGfOacrOaXpXzjgbvjgpPjgZjjgaR85pio5pelfOOBjeOBruOBhnzmmI7ml6V844GC44GX44GffOS7iuWknHzjgZPjgpPjgoR85LuK5aSVfOOBk+OCk+OChuOBhnzku4rmmal844GT44KT44Gw44KTfOS7iuacnXzjgZHjgZUvaTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRUb0thbmppKHRleHQpIHtcbiAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgY2FzZSBcIuOBjeOCh+OBhlwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgbvjgpPjgZjjgaRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuacrOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GN44Gu44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmKjml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBguOBl+OBn1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5piO5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgoRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWknFwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44KG44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rlpJVcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OBsOOCk1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pmpXCI7XG4gICAgICAgIGNhc2UgXCLjgZHjgZVcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuacnVwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBDYXN1YWxEYXRlUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dFRvS2FuamkobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLmmKjml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuaYjuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLmnKzml6VcIjpcbiAgICAgICAgICAgIGNhc2UgXCLku4rml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgPT0gXCLku4rlpJxcIiB8fCB0ZXh0ID09IFwi5LuK5aSVXCIgfHwgdGV4dCA9PSBcIuS7iuaZqVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lm1hdGNoKFwi5LuK5pydXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIigoPzxwcmVmaXg+5YmN44GufOasoeOBrnzku4rpgLEpKT8oPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD865puc5pelfOabnClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKHByZWZpeC5tYXRjaCgv5YmN44GuLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJlZml4Lm1hdGNoKC/mrKHjga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+S7iumAsS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOe+8kC3vvJldezR9W1xcXFwvfFxcXFzvvI9dKT9cIiArIFwiKFswLTHvvJAt77yRXXswLDF9WzAtOe+8kC3vvJldezF9KSg/OltcXFxcL3xcXFxc77yPXShbMC0z77yQLe+8k117MCwxfVswLTnvvJAt77yZXXsxfSkpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW01PTlRIX0dST1VQXSkpO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbREFZX0dST1VQXSkpO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xuICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCBqYVN0cmluZ1RvTnVtYmVyLCB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgig/IemWkyl8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfOWNinxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD8644GL44KJfFxcXFwtfFxcXFzigJN8XFxcXO+8jXxcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUF8xID0gMTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzIgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIG1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kLmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09PSBNZXJpZGllbS5QTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gcmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuZW5kLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hIb3VyLCBtYXRjaE1pbnV0ZSwgbWF0Y2hTZWNvbmQsIG1hdGNoQW1QbSkge1xuICAgIGxldCBob3VyID0gMDtcbiAgICBsZXQgbWVyaWRpZW0gPSAtMTtcbiAgICBsZXQgdGFyZ2V0Q29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICBob3VyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoSG91cikpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICBob3VyID0gamFTdHJpbmdUb051bWJlcihtYXRjaEhvdXIpO1xuICAgIH1cbiAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNaW51dGUpIHtcbiAgICAgICAgbGV0IG1pbnV0ZTtcbiAgICAgICAgaWYgKG1hdGNoTWludXRlID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaE1pbnV0ZSkpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoTWludXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgfVxuICAgIGlmIChtYXRjaFNlY29uZCkge1xuICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoU2Vjb25kKSk7XG4gICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoU2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgfVxuICAgIGlmIChtYXRjaEFtUG0pIHtcbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQU1QTVN0cmluZyA9IG1hdGNoQW1QbTtcbiAgICAgICAgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5YmNXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcImFcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBTVBNU3RyaW5nID09PSBcIuWNiOW+jFwiIHx8IEFNUE1TdHJpbmdbMF0udG9Mb3dlckNhc2UoKSA9PT0gXCJwXCIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICB0YXJnZXRDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjga4pP1xccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBjdXJyZW50UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIG5ld1Jlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG5leHRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIGlmIChuZXdSZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHQuZW5kLmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVzdWx0O1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIikgJiZcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpO1xuICAgICAgICByZXR1cm4gbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ICYmIHRleHRCZXR3ZWVuLm1hdGNoKC9eWyzjgIHjga5dP1xccyokLykgIT09IG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXCh8XFxcXO+8iCkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD86XFxcXCl8XFxcXO+8iSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMubWFwIiwiaW1wb3J0IEpQU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBKUENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBKUENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IEpQU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkb21pbmdvXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcInNlZ3VuZGFcIjogMSxcbiAgICBcInNlZ3VuZGEtZmVpcmFcIjogMSxcbiAgICBcInNlZ1wiOiAxLFxuICAgIFwidGVyw6dhXCI6IDIsXG4gICAgXCJ0ZXLDp2EtZmVpcmFcIjogMixcbiAgICBcInRlclwiOiAyLFxuICAgIFwicXVhcnRhXCI6IDMsXG4gICAgXCJxdWFydGEtZmVpcmFcIjogMyxcbiAgICBcInF1YVwiOiAzLFxuICAgIFwicXVpbnRhXCI6IDQsXG4gICAgXCJxdWludGEtZmVpcmFcIjogNCxcbiAgICBcInF1aVwiOiA0LFxuICAgIFwic2V4dGFcIjogNSxcbiAgICBcInNleHRhLWZlaXJhXCI6IDUsXG4gICAgXCJzZXhcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW5laXJvXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZldmVyZWlyb1wiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXLDp29cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYWJyaWxcIjogNCxcbiAgICBcImFiclwiOiA0LFxuICAgIFwiYWJyLlwiOiA0LFxuICAgIFwibWFpb1wiOiA1LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJtYWkuXCI6IDUsXG4gICAgXCJqdW5ob1wiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxob1wiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwiYWdvLlwiOiA4LFxuICAgIFwic2V0ZW1icm9cIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwib3V0dWJyb1wiOiAxMCxcbiAgICBcIm91dFwiOiAxMCxcbiAgICBcIm91dC5cIjogMTAsXG4gICAgXCJub3ZlbWJyb1wiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJyb1wiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiWzAtOV17MSw0fSg/IVteXFxcXHNdXFxcXGQpKD86XFxcXHMqW2F8ZF1cXFxcLj9cXFxccypjXFxcXC4/fFxcXFxzKmFcXFxcLj9cXFxccypkXFxcXC4/KT9cIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2gubWF0Y2goL15bMC05XXsxLDR9JC8pKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9hXFwuP1xccypjXFwuPy9pKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL2FcXC4/XFxzKmNcXC4/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNzYWRvfHByW2/Ds114aW1vKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGVzdGV8ZXN0YXxwYXNzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YW8/fMOgcz98ZGFzfGRhfGRlfGRvKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/Om8pP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfMOgKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWdvcmF8aG9qZXxhbWFuaGF8YW1hbmjDo3xvbnRlbSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZ29yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG9qZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaMOjXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9udGVtXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hbmhhfG1hbmjDo3x0YXJkZXxtZWlhLW5vaXRlfG1laW8tZGlhfG5vaXRlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpYS1ub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpby1kaWFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBQVFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IFBUQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgUFRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvdHwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihvbXxuYXx2b29yfGluIGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhudXx2YW5kYWFnfG1vcmdlbnxtb3JnZW5kfGdpc3RlcmVuKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm51XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5kYWFnXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9NRU5UX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKGRlemUpP1xccyoobmFtaWRkYWd8YXZvbmR8bWlkZGVybmFjaHR8b2NodGVuZHxtaWRkYWd8J3MgbWlkZGFnc3wncyBhdm9uZHN8J3Mgb2NodGVuZHMpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdID09PSBcImRlemVcIikge1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbTU9NRU5UX0dST1VQXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBuYW1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9hZnRlcm5vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBhdm9uZHMnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG9jaHRlbmRzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgem9uZGFnOiAwLFxuICAgIHpvbjogMCxcbiAgICBcInpvbi5cIjogMCxcbiAgICB6bzogMCxcbiAgICBcInpvLlwiOiAwLFxuICAgIG1hYW5kYWc6IDEsXG4gICAgbWE6IDEsXG4gICAgXCJtYS5cIjogMSxcbiAgICBkaW5zZGFnOiAyLFxuICAgIGRpbjogMixcbiAgICBcImRpbi5cIjogMixcbiAgICBkaTogMixcbiAgICBcImRpLlwiOiAyLFxuICAgIHdvZW5zZGFnOiAzLFxuICAgIHdvZTogMyxcbiAgICBcIndvZS5cIjogMyxcbiAgICB3bzogMyxcbiAgICBcIndvLlwiOiAzLFxuICAgIGRvbmRlcmRhZzogNCxcbiAgICBkb25kOiA0LFxuICAgIFwiZG9uZC5cIjogNCxcbiAgICBkbzogNCxcbiAgICBcImRvLlwiOiA0LFxuICAgIHZyaWpkYWc6IDUsXG4gICAgdnJpajogNSxcbiAgICBcInZyaWouXCI6IDUsXG4gICAgdnI6IDUsXG4gICAgXCJ2ci5cIjogNSxcbiAgICB6YXRlcmRhZzogNixcbiAgICB6YXQ6IDYsXG4gICAgXCJ6YXQuXCI6IDYsXG4gICAgXCJ6YVwiOiA2LFxuICAgIFwiemEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyaTogMSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmVicnVhcmk6IDIsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hYXJ0OiAzLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBtcnQ6IDMsXG4gICAgXCJtcnQuXCI6IDMsXG4gICAgYXByaWw6IDQsXG4gICAgYXByOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIG1laTogNSxcbiAgICBqdW5pOiA2LFxuICAgIGp1bjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBqdWxpOiA3LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWd1c3R1czogOCxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwdGVtYmVyOiA5LFxuICAgIHNlcDogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBzZXB0OiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBva3RvYmVyOiAxMCxcbiAgICBva3Q6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBlZW46IDEsXG4gICAgdHdlZTogMixcbiAgICBkcmllOiAzLFxuICAgIHZpZXI6IDQsXG4gICAgdmlqZjogNSxcbiAgICB6ZXM6IDYsXG4gICAgemV2ZW46IDcsXG4gICAgYWNodDogOCxcbiAgICBuZWdlbjogOSxcbiAgICB0aWVuOiAxMCxcbiAgICBlbGY6IDExLFxuICAgIHR3YWFsZjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlcnN0ZTogMSxcbiAgICB0d2VlZGU6IDIsXG4gICAgZGVyZGU6IDMsXG4gICAgdmllcmRlOiA0LFxuICAgIHZpamZkZTogNSxcbiAgICB6ZXNkZTogNixcbiAgICB6ZXZlbmRlOiA3LFxuICAgIGFjaHRzdGU6IDgsXG4gICAgbmVnZW5kZTogOSxcbiAgICB0aWVuZGU6IDEwLFxuICAgIGVsZmRlOiAxMSxcbiAgICB0d2FhbGZkZTogMTIsXG4gICAgZGVydGllbmRlOiAxMyxcbiAgICB2ZWVydGllbmRlOiAxNCxcbiAgICB2aWpmdGllbmRlOiAxNSxcbiAgICB6ZXN0aWVuZGU6IDE2LFxuICAgIHpldmVudGllbmRlOiAxNyxcbiAgICBhY2h0dGllbmRlOiAxOCxcbiAgICBuZWdlbnRpZW5kZTogMTksXG4gICAgdHdpbnRpZ3N0ZTogMjAsXG4gICAgXCJlZW5lbnR3aW50aWdzdGVcIjogMjEsXG4gICAgXCJ0d2Vlw6tudHdpbnRpZ3N0ZVwiOiAyMixcbiAgICBcImRyaWVlbnR3aW50aWdzdGVcIjogMjMsXG4gICAgXCJ2aWVyZW50d2ludGlnc3RlXCI6IDI0LFxuICAgIFwidmlqZmVudHdpbnRpZ3N0ZVwiOiAyNSxcbiAgICBcInplc2VudHdpbnRpZ3N0ZVwiOiAyNixcbiAgICBcInpldmVuZW50d2ludGlnc3RlXCI6IDI3LFxuICAgIFwiYWNodGVudHdpbnRpZ1wiOiAyOCxcbiAgICBcIm5lZ2VuZW50d2ludGlnXCI6IDI5LFxuICAgIFwiZGVydGlnc3RlXCI6IDMwLFxuICAgIFwiZWVuZW5kZXJ0aWdzdGVcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHNlYzogXCJzZWNvbmRcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dDogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dGplOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIGhyOiBcImhvdXJcIixcbiAgICBocnM6IFwiaG91clwiLFxuICAgIHV1cjogXCJob3VyXCIsXG4gICAgdTogXCJob3VyXCIsXG4gICAgdXJlbjogXCJob3VyXCIsXG4gICAgZGFnOiBcImRheVwiLFxuICAgIGRhZ2VuOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdla2VuOiBcIndlZWtcIixcbiAgICBtYWFuZDogXCJtb250aFwiLFxuICAgIG1hYW5kZW46IFwibW9udGhcIixcbiAgICBqYWFyOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFyZW46IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStbXFxcXC4sXVswLTldK3xoYWx2ZT98aGFsZnxwYWFyKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwicGFhclwiKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiaGFsZlwiIHx8IG51bS5tYXRjaCgvaGFsdmU/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzpzdGV8ZGUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3RlfGRlKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OnZvb3IgQ2hyaXN0dXN8bmEgQ2hyaXN0dXMpfFsxLTJdWzAtOV17M318WzUtOV1bMC05XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvdm9vciBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvdm9vciBDaHJpc3R1cy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvbmEgQ2hyaXN0dXMvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL25hIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmJpbm5lbnxpbilcXFxccyopP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpiaW5uZW58aW58YmlubmVuIGRlfHZvb3IpXFxcXHMqYCArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBgKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi8uLi9ubC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvcFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkZXplfHZvcmlnZXx2b2xnZW5kZSlcXFxccyooPzp3ZWVrXFxcXHMqKT8pP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvcmlnZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvbGdlbmRlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKD86XFxcXHMqXCIgK1xuICAgIFwiKD86dG90fFxcXFwtfFxcXFzigJN8dW50aWx8dGhyb3VnaHx0aWxsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/Oi18L3xcXFxccyooPzpvZik/XFxcXHMqKVwiICtcbiAgICBcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzotfC98LD9cXFxccyopXCIgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Om9tKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8b218XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OnV1cikpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfT0ZfREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZ2lzdGVyZW58bW9yZ2VufHZhbikob2NodGVuZHxtaWRkYWd8bmFtaWRkYWd8YXZvbmR8bmFjaHQpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXRlVGV4dCA9IG1hdGNoW0RBVEVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUZXh0ID0gbWF0Y2hbVElNRV9PRl9EQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgc3dpdGNoIChkYXRlVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImdpc3RlcmVuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5cIjpcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9jaHRlbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGRpdHxkZXplfHZvcmlnfGFmZ2Vsb3BlbnwoPzphYW4pP2tvbWVuZHxvdmVyfFxcXFwrfC0pZT9cXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUFJFRklYX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9VTklUX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbVElNRV9VTklUX1dPUkRfR1JPVVBdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ2b3JpZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImFmZ2Vsb3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8KD86YWFuKT9rb21lbmR8dm9sZ2VuZHxhZmdlbG9wZW58dm9yaWcpZT9cXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwidm9sZ2VuZFwiIHx8IG1vZGlmaWVyID09IFwia29tZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJhYW5rb21lbmRcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwiYWZnZWxvcGVuXCIgfHwgbW9kaWZpZXIgPT0gXCJ2b3JpZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21hYW5kL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvamFhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoPzpnZWxlZGVufHZvb3J8ZWVyZGVyKSg/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcImdlbGVkZW4oPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiKGxhdGVyfG5hfHZhbmFmIG51fHZvb3J0YWFufHZvb3J1aXR8dWl0KVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8dmFuYWYgbnUpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL05MTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxEYXRlVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTENhc3VhbFllYXJNb250aERheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IE5VTUJFUiA9IHtcbiAgICBcIumbtlwiOiAwLFxuICAgIFwi44CHXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LikXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuW5tCk/XCIgK1xuICAgICAgICAgICAgXCIoPzpbXFxcXHN8LHzvvIxdKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17MSwzfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzlj7cpP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85YegKSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrkuKopP1wiICtcbiAgICBcIijnp5IoPzrpkp8pP3zliIbpkp985bCP5pe2fOmSn3zml6V85aSpfOaYn+acn3znpLzmi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86L+HKT/lkI58KD865LmLKT/lhoUpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5YegXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+ekvOaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpLxcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumSn1wiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LiLfOi/mSkoPzrkuKopPyg/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLov5lcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuS7jnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD8654K5fOaXtnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSAwO1xuICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgICAgICBob3VyID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmraNcIiB8fCBzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5pW0XCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEwMCkge1xuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gcmVzdWx0LnRleHQgKyBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09IDE7XG4gICAgICAgICAgICBpZiAoc3RhcnRBdFBNICYmIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID4gaG91cikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZC5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgcmVzdWx0LmVuZC5nZXQoXCJkYXlcIikgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2guZ3JvdXBzLndlZWtkYXk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfT0ZGU0VUW2RheU9mV2Vla107XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmIC0gNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmICsgNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRpZmYpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOiAjOWutnznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIiB8fCB0aW1lMSA9PSBcIuacnVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLmnJ1cIiB8fCB0aW1lMiA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5LiLXCIgfHwgdGltZTIgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLmnJ1cIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIgfHwgdGltZTMgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LitXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWknFwiIHx8IHRpbWUzID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5YWpXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbiAgICBcIuW7v1wiOiAyMCxcbiAgICBcIuWNhVwiOiAzMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArIFwiXXsxLDJ9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrml6V86JmfKT9cIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG1vbnRoKSlcbiAgICAgICAgICAgIG1vbnRoID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGRheSkpXG4gICAgICAgICAgICAgICAgZGF5ID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHllYXIpKVxuICAgICAgICAgICAgICAgIHllYXIgPSB6aFN0cmluZ1RvWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50RGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIHpoU3RyaW5nVG9OdW1iZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSt85Y2KfOW5vikoPzpcXFxccyopXCIgK1xuICAgIFwiKD865YCLKT9cIiArXG4gICAgXCIo56eSKD866ZCYKT985YiG6ZCYfOWwj+aZgnzpkJh85pelfOWkqXzmmJ/mnJ9856au5oucfOaciHzlubQpXCIgK1xuICAgIFwiKD86KD865LmLfOmBjik/5b6MfCg/OuS5iyk/5YWnKVwiLCBcImlcIik7XG5jb25zdCBOVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgVU5JVF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIG51bWJlciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IG1hdGNoW05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBpZiAoc3RyaW5nID09PSBcIuW5vlwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFtVTklUX0dST1VQXTtcbiAgICAgICAgY29uc3QgdW5pdEFiYnIgPSB1bml0WzBdO1xuICAgICAgICBpZiAodW5pdEFiYnIubWF0Y2goL1vml6XlpKnmmJ/npq7mnIjlubRdLykpIHtcbiAgICAgICAgICAgIGlmICh1bml0QWJiciA9PSBcIuaXpVwiIHx8IHVuaXRBYmJyID09IFwi5aSpXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5kYXkgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaYn1wiIHx8IHVuaXRBYmJyID09IFwi56auXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmnIhcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlubRcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLnllYXIgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0QWJiciA9PSBcIuenklwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLliIZcIikge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bCPXCIgfHwgdW5pdEFiYnIgPT0gXCLpkJhcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwic2Vjb25kXCIsIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzxwcmVmaXg+5LiKfOS7inzkuIt86YCZfOWRoikoPzrlgIspPyg/OuaYn+acn3znpq7mi5x86YCxKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLku4pcIiB8fCBwcmVmaXggPT0gXCLpgJlcIiB8fCBwcmVmaXggPT0gXCLlkaJcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OueUsXzlvp586IeqKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/Oum7nnzmmYJ8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD865YiwfOiHs3xcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgREFZX0dST1VQXzEgPSAxO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8xID0gMjtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMiA9IDM7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDQ7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzMgPSA1O1xuY29uc3QgSE9VUl9HUk9VUCA9IDY7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSA3O1xuY29uc3QgU0VDT05EX0dST1VQID0gODtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFwiKClcIjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAwICYmIGNvbnRleHQudGV4dFttYXRjaC5pbmRleCAtIDFdLm1hdGNoKC9cXHcvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgdmFyIHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICB2YXIgemhBTVBNMyA9IHpoQU1QTVN0cmluZzNbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMyA9PSBcIuS4ilwiIHx8IHpoQU1QTTMgPT0gXCLmnJ1cIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmPXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTEgPSB6aEFNUE1TdHJpbmcxWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTEgPT0gXCLmnJ1cIiB8fCB6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHxcXC18XFx+fO+9nnzvvI1844O8KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50V2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBoYW50ID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBOT1dfR1JPVVAgPSAxO1xuY29uc3QgREFZX0dST1VQXzEgPSAyO1xuY29uc3QgVElNRV9HUk9VUF8xID0gMztcbmNvbnN0IFRJTUVfR1JPVVBfMiA9IDQ7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDU7XG5jb25zdCBUSU1FX0dST1VQXzMgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIijnjrDlnKh856uLKD865Yi7fOWNsyl85Y2z5Yi7KXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbVElNRV9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzIgPSBtYXRjaFtUSU1FX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgdGltZTIgPSB0aW1lU3RyaW5nMlswXTtcbiAgICAgICAgICAgIGlmICh0aW1lMiA9PSBcIuaXqVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHwtfH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnMgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0ICogYXMgaGFudCBmcm9tIFwiLi9oYW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBhcyBoYW5zIGZyb20gXCIuL2hhbnMvaW5kZXguanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFudENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnREYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICDQstC+0YHQutGA0LXRgdC10L3RjNC1OiAwLFxuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0Y86IDAsXG4gICAg0LLRgdC6OiAwLFxuICAgIFwi0LLRgdC6LlwiOiAwLFxuICAgINC/0L7QvdC10LTQtdC70YzQvdC40Lo6IDEsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQutCwOiAxLFxuICAgINC/0L06IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgINCy0YLQvtGA0L3QuNC6OiAyLFxuICAgINCy0YLQvtGA0L3QuNC60LA6IDIsXG4gICAg0LLRgjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAg0YHRgNC10LTQsDogMyxcbiAgICDRgdGA0LXQtNGLOiAzLFxuICAgINGB0YDQtdC00YM6IDMsXG4gICAg0YHRgDogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAg0YfQtdGC0LLQtdGA0LM6IDQsXG4gICAg0YfQtdGC0LLQtdGA0LPQsDogNCxcbiAgICDRh9GCOiA0LFxuICAgIFwi0YfRgi5cIjogNCxcbiAgICDQv9GP0YLQvdC40YbQsDogNSxcbiAgICDQv9GP0YLQvdC40YbRgzogNSxcbiAgICDQv9GP0YLQvdC40YbRizogNSxcbiAgICDQv9GCOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICDRgdGD0LHQsdC+0YLQsDogNixcbiAgICDRgdGD0LHQsdC+0YLRgzogNixcbiAgICDRgdGD0LHQsdC+0YLRizogNixcbiAgICDRgdCxOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAg0Y/QvdCy0LDRgNGMOiAxLFxuICAgINGP0L3QstCw0YDRjzogMSxcbiAgICDRj9C90LLQsNGA0LU6IDEsXG4gICAg0YTQtdCy0YDQsNC70Yw6IDIsXG4gICAg0YTQtdCy0YDQsNC70Y86IDIsXG4gICAg0YTQtdCy0YDQsNC70LU6IDIsXG4gICAg0LzQsNGA0YI6IDMsXG4gICAg0LzQsNGA0YLQsDogMyxcbiAgICDQvNCw0YDRgtC1OiAzLFxuICAgINCw0L/RgNC10LvRjDogNCxcbiAgICDQsNC/0YDQtdC70Y86IDQsXG4gICAg0LDQv9GA0LXQu9C1OiA0LFxuICAgINC80LDQuTogNSxcbiAgICDQvNCw0Y86IDUsXG4gICAg0LzQsNC1OiA1LFxuICAgINC40Y7QvdGMOiA2LFxuICAgINC40Y7QvdGPOiA2LFxuICAgINC40Y7QvdC1OiA2LFxuICAgINC40Y7Qu9GMOiA3LFxuICAgINC40Y7Qu9GPOiA3LFxuICAgINC40Y7Qu9C1OiA3LFxuICAgINCw0LLQs9GD0YHRgjogOCxcbiAgICDQsNCy0LPRg9GB0YLQsDogOCxcbiAgICDQsNCy0LPRg9GB0YLQtTogOCxcbiAgICDRgdC10L3RgtGP0LHRgNGMOiA5LFxuICAgINGB0LXQvdGC0Y/QsdGA0Y86IDksXG4gICAg0YHQtdC90YLRj9Cx0YDQtTogOSxcbiAgICDQvtC60YLRj9Cx0YDRjDogMTAsXG4gICAg0L7QutGC0Y/QsdGA0Y86IDEwLFxuICAgINC+0LrRgtGP0LHRgNC1OiAxMCxcbiAgICDQvdC+0Y/QsdGA0Yw6IDExLFxuICAgINC90L7Rj9Cx0YDRjzogMTEsXG4gICAg0L3QvtGP0LHRgNC1OiAxMSxcbiAgICDQtNC10LrQsNCx0YDRjDogMTIsXG4gICAg0LTQtdC60LDQsdGA0Y86IDEyLFxuICAgINC00LXQutCw0LHRgNC1OiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICDRj9C90LI6IDEsXG4gICAgXCLRj9C90LIuXCI6IDEsXG4gICAg0YTQtdCyOiAyLFxuICAgIFwi0YTQtdCyLlwiOiAyLFxuICAgINC80LDRgDogMyxcbiAgICBcItC80LDRgC5cIjogMyxcbiAgICDQsNC/0YA6IDQsXG4gICAgXCLQsNC/0YAuXCI6IDQsXG4gICAg0LDQstCzOiA4LFxuICAgIFwi0LDQstCzLlwiOiA4LFxuICAgINGB0LXQvTogOSxcbiAgICBcItGB0LXQvS5cIjogOSxcbiAgICDQvtC60YI6IDEwLFxuICAgIFwi0L7QutGCLlwiOiAxMCxcbiAgICDQvdC+0Y86IDExLFxuICAgIFwi0L3QvtGPLlwiOiAxMSxcbiAgICDQtNC10Lo6IDEyLFxuICAgIFwi0LTQtdC6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L7QtNC40L06IDEsXG4gICAg0L7QtNC90LA6IDEsXG4gICAg0L7QtNC90L7QuTogMSxcbiAgICDQvtC00L3RgzogMSxcbiAgICDQtNCy0LU6IDIsXG4gICAg0LTQstCwOiAyLFxuICAgINC00LLRg9GFOiAyLFxuICAgINGC0YDQuDogMyxcbiAgICDRgtGA0LXRhTogMyxcbiAgICDRgtGA0ZHRhTogMyxcbiAgICDRh9C10YLRi9GA0LU6IDQsXG4gICAg0YfQtdGC0YvRgNC10YU6IDQsXG4gICAg0YfQtdGC0YvRgNGR0YU6IDQsXG4gICAg0L/Rj9GC0Yw6IDUsXG4gICAg0L/Rj9GC0Lg6IDUsXG4gICAg0YjQtdGB0YLRjDogNixcbiAgICDRiNC10YHRgtC4OiA2LFxuICAgINGB0LXQvNGMOiA3LFxuICAgINGB0LXQvNC4OiA3LFxuICAgINCy0L7RgdC10LzRjDogOCxcbiAgICDQstC+0YHRjNC80Lg6IDgsXG4gICAg0LTQtdCy0Y/RgtGMOiA5LFxuICAgINC00LXQstGP0YLQuDogOSxcbiAgICDQtNC10YHRj9GC0Yw6IDEwLFxuICAgINC00LXRgdGP0YLQuDogMTAsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLRjDogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQuDogMTEsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Yw6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC4OiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L/QtdGA0LLQvtC1OiAxLFxuICAgINC/0LXRgNCy0L7Qs9C+OiAxLFxuICAgINCy0YLQvtGA0L7QtTogMixcbiAgICDQstGC0L7RgNC+0LPQvjogMixcbiAgICDRgtGA0LXRgtGM0LU6IDMsXG4gICAg0YLRgNC10YLRjNC10LPQvjogMyxcbiAgICDRh9C10YLQstC10YDRgtC+0LU6IDQsXG4gICAg0YfQtdGC0LLQtdGA0YLQvtCz0L46IDQsXG4gICAg0L/Rj9GC0L7QtTogNSxcbiAgICDQv9GP0YLQvtCz0L46IDUsXG4gICAg0YjQtdGB0YLQvtC1OiA2LFxuICAgINGI0LXRgdGC0L7Qs9C+OiA2LFxuICAgINGB0LXQtNGM0LzQvtC1OiA3LFxuICAgINGB0LXQtNGM0LzQvtCz0L46IDcsXG4gICAg0LLQvtGB0YzQvNC+0LU6IDgsXG4gICAg0LLQvtGB0YzQvNC+0LPQvjogOCxcbiAgICDQtNC10LLRj9GC0L7QtTogOSxcbiAgICDQtNC10LLRj9GC0L7Qs9C+OiA5LFxuICAgINC00LXRgdGP0YLQvtC1OiAxMCxcbiAgICDQtNC10YHRj9GC0L7Qs9C+OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC+0LU6IDExLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7Qs9C+OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtC1OiAxMixcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtCz0L46IDEyLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LU6IDEzLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LPQvjogMTMsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LU6IDE0LFxuICAgINGH0LXRgtGL0YDQvdCw0LTRhtCw0YLQvtCz0L46IDE0LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE1LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTUsXG4gICAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQvtC1OiAxNixcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LPQvjogMTYsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTcsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxNyxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTgsXG4gICAg0LLQvtGB0LXQvNC90LDQtNGG0LDRgtC+0LPQvjogMTgsXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE5LFxuICAgINC00LXQstGP0YLQvdCw0LTRhtCw0YLQvtCz0L46IDE5LFxuICAgINC00LLQsNC00YbQsNGC0L7QtTogMjAsXG4gICAg0LTQstCw0LTRhtCw0YLQvtCz0L46IDIwLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstGC0L7RgNC+0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgtGA0LXRgtGM0LVcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtdCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGH0LXRgtCy0LXRgNGC0L7QtVwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LPQvlwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YjQtdGB0YLQvtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LVcIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGB0LXQtNGM0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7QtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LTQtdCy0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7QtVwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7Qs9C+XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGLOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutCwOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQtdC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINC80LjQvTogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0LA6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgjogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0Ys6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutC4OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LXQujogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINGH0LDRgTogXCJob3VyXCIsXG4gICAg0YfQsNGB0L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LA6IFwiaG91clwiLFxuICAgINGH0LDRgdGDOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQutCwOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LU6IFwiaG91clwiLFxuICAgINGH0LDRgdC40Lo6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90LXQuTogXCJkYXlcIixcbiAgICDRgdGD0YLQvtC6OiBcImRheVwiLFxuICAgINGB0YPRgtC60Lg6IFwiZGF5XCIsXG4gICAg0L3QtdC00LXQu9GPOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GOOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Yw6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60Lg6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtdC6OiBcIndlZWtcIixcbiAgICDQvNC10YHRj9GGOiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC1OiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC10LI6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LA6IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQtTogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQvtCyOiBcInF1YXJ0ZXJcIixcbiAgICDQs9C+0LQ6IFwieWVhclwiLFxuICAgINCz0L7QtNCwOiBcInllYXJcIixcbiAgICDQs9C+0LTRgzogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00L7QsjogXCJ5ZWFyXCIsXG4gICAg0LvQtdGCOiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC6OiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC60LA6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQvtCyOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt80L/QvtC7fNC90LXRgdC60L7Qu9GM0LrQvnzQv9Cw0YAoPzrRi3zRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0L3QtdGB0LrQvtC70YzQutC+LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QvtC7LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LV80L7QtSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5jb25zdCB5ZWFyID0gXCIoPzpcXFxccysoPzrQs9C+0LTRg3zQs9C+0LTQsHzQs9C+0LR80LN80LMuKSk/XCI7XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfSR7eWVhcn1cXFxccyooPzrQvS7RjS580LTQviDQvS7RjS580L0uINGNLnzQtNC+INC9LiDRjS4pfFsxLTJdWzAtOV17M30ke3llYXJ9fFs1LTldWzAtOV0ke3llYXJ9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC8o0LPQvtC0fNCz0L7QtNCwfNCzfNCzLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0Y0ufNC00L4g0L0uINGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0Y0ufNC9LtGNLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0Y0ufNC9LtGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L7QutC+0LvQvnzQv9GA0LjQvNC10YDQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgUkVHRVhfUEFSVFMuZmxhZ3MpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtCyINGC0LXRh9C10L3QuNC1fNCyINGC0LXRh9C10L3QuNC4KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrRgSk/XFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgXFxcXHN7MCwzfSg/OtC/0L58LXzigJN80LTQvik/XFxcXHN7MCwzfWAgK1xuICAgICAgICAgICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3xcXFxcc3swLDN9KD86b2YpP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgICAgICAgICBgKT9gO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmZsYWdzO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfCg/OlteXFxcXHB7TH1cXFxccHtOfV9dKSlgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIGBcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx80LTQvnzQuHzQv9C+fFxcXFw/KVxcXFxzKmA7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86KD860LJ80YEpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRg9GC0YDQsHzQstC10YfQtdGA0LB80L/QvtGB0LvQtSDQv9C+0LvRg9C00L3RjykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C10YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L7RgdC70LUg0L/QvtC70YPQtNC90Y9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90L3QsNC30LDQtCg/PSg/OlxcXFxXfCQpKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo0Lgg0LTQvnzQuCDQv9C+fNC00L580L/QvnwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeXFxcXHMqKFR80LJ8LHwtKT9cXFxccyokYCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBfNGB0L4pP1xcXFxzKijRgdC10LPQvtC00L3Rj3zQstGH0LXRgNCwfNC30LDQstGC0YDQsHzQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7Qt9Cw0L/QvtC30LDQstGH0LXRgNCwfNC/0L7Qt9Cw0LLRh9C10YDQsClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcItGB0LXQs9C+0LTQvdGPXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRgdC10LnRh9Cw0YF80L/RgNC+0YjQu9GL0LxcXFxccyrQstC10YfQtdGA0L7QvHzQv9GA0L7RiNC70L7QuVxcXFxzKtC90L7Rh9GM0Y580YHQu9C10LTRg9GO0YnQtdC5XFxcXHMq0L3QvtGH0YzRjnzRgdC10LPQvtC00L3Rj1xcXFxzKtC90L7Rh9GM0Y580Y3RgtC+0LlcXFxccyrQvdC+0YfRjNGOfNC90L7Rh9GM0Y580Y3RgtC40Lwg0YPRgtGA0L7QvHzRg9GC0YDQvtC8fNGD0YLRgNCwfNCyXFxcXHMq0L/QvtC70LTQtdC90Yx80LLQtdGH0LXRgNC+0Lx80LLQtdGH0LXRgNCwfNCyXFxcXHMq0L/QvtC70L3QvtGH0YwpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0YHQtdC50YfQsNGBXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0L7QvFwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItGD0YLRgNC+0LxcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C00LXQvdGMLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvQvtC5XFxzKtC90L7Rh9GM0Y4vKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/Qv9GA0L7RiNC70YvQvFxccyrQstC10YfQtdGA0L7QvC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RgdC70LXQtNGD0Y7RidC10LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QslxccyrQv9C+0LvQvdC+0YfRjC8pIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC90L7Rh9GM0Y5cIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD86KNGN0YLRg3zRjdGC0L7RgnzQv9GA0L7RiNC70YvQuXzQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnRg9GOfNGB0LvQtdC00YPRjtGJ0LXQs9C+KVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMq0L3QsFxcXFxzKijRjdGC0L7QuXzQv9GA0L7RiNC70L7QuXzRgdC70LXQtNGD0Y7RidC10LkpXFxcXHMq0L3QtdC00LXQu9C1KT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvRi9C5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GD0Y5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LjQuVwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidGD0Y5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LXQs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0Y3RgtC+0YJcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0YNcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNCyINC/0YDQvtGI0LvQvtC8fNC90LAg0L/RgNC+0YjQu9C+0Ll80L3QsCDRgdC70LXQtNGD0Y7RidC10Ll80LIg0YHQu9C10LTRg9GO0YnQtdC8fNC90LAg0Y3RgtC+0Ll80LIg0Y3RgtC+0LwpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDRgdC70LXQtNGD0Y7RidC10LlcIiB8fCBtb2RpZmllciA9PSBcItCyINGB0LvQtdC00YPRjtGJ0LXQvFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQsiDQv9GA0L7RiNC70L7QvFwiIHx8IG1vZGlmaWVyID09IFwi0L3QsCDQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGN0YLQuHzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0LV80YHQu9C10LTRg9GO0YnQuNC1fNC/0L7RgdC70LV80YHQv9GD0YHRgtGPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC00L3QuNC1XCI6XG4gICAgICAgICAgICBjYXNlIFwi0L/RgNC+0YjQu9GL0LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKHRydWUpLFxuICAgICAgICAgICAgbmV3IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZXNcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVzXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1pw6lyY29sZXNcIjogMyxcbiAgICBcIm1pZXJjb2xlc1wiOiAzLFxuICAgIFwibWnDqVwiOiAzLFxuICAgIFwibWllXCI6IDMsXG4gICAgXCJqdWV2ZXNcIjogNCxcbiAgICBcImp1ZVwiOiA0LFxuICAgIFwidmllcm5lc1wiOiA1LFxuICAgIFwidmllXCI6IDUsXG4gICAgXCJzw6FiYWRvXCI6IDYsXG4gICAgXCJzYWJhZG9cIjogNixcbiAgICBcInPDoWJcIjogNixcbiAgICBcInNhYlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5lcm9cIjogMSxcbiAgICBcImVuZVwiOiAxLFxuICAgIFwiZW5lLlwiOiAxLFxuICAgIFwiZmVicmVyb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJ6b1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYXlvXCI6IDUsXG4gICAgXCJtYXlcIjogNSxcbiAgICBcIm1heS5cIjogNSxcbiAgICBcImp1bmlvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXB0aWVtYnJlXCI6IDksXG4gICAgXCJzZXRpZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwib2N0dWJyZVwiOiAxMCxcbiAgICBcIm9jdFwiOiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgXCJub3ZpZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljaWVtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImRvc1wiOiAyLFxuICAgIFwidHJlc1wiOiAzLFxuICAgIFwiY3VhdHJvXCI6IDQsXG4gICAgXCJjaW5jb1wiOiA1LFxuICAgIFwic2Vpc1wiOiA2LFxuICAgIFwic2lldGVcIjogNyxcbiAgICBcIm9jaG9cIjogOCxcbiAgICBcIm51ZXZlXCI6IDksXG4gICAgXCJkaWV6XCI6IDEwLFxuICAgIFwib25jZVwiOiAxMSxcbiAgICBcImRvY2VcIjogMTIsXG4gICAgXCJ0cmVjZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9cIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9zXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0b1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYVwiOiBcImhvdXJcIixcbiAgICBcImhvcmFzXCI6IFwiaG91clwiLFxuICAgIFwiZMOtYVwiOiBcImRheVwiLFxuICAgIFwiZMOtYXNcIjogXCJkYXlcIixcbiAgICBcInNlbWFuYVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFuYXNcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNcIjogXCJtb250aFwiLFxuICAgIFwibWVzZXNcIjogXCJtb250aFwiLFxuICAgIFwiY3VhcnRvXCI6IFwicXVhcnRlclwiLFxuICAgIFwiY3VhcnRvc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImHDsW9cIjogXCJ5ZWFyXCIsXG4gICAgXCJhw7Fvc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW4/fHVubz98dW5hP3xhbGd1bm9zP3x1bm9zP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIiB8fCBudW0gPT09IFwidW5vXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxndW5vcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC91bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21lZGlhPy8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc2Fkb3xwclvDs29deGltbylcXFxccypzZW1hbmEpP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG5vcm0gPSBwcmVmaXggfHwgcG9zdGZpeCB8fCBcIlwiO1xuICAgICAgICBub3JtID0gbm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobm9ybSA9PSBcInBhc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXNsYXN8ZGVzbGFzfGxhcz98YWw/fGRlfGRlbClcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfGEoPzpsKT98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86LHxkZXxhc2xhc3xhKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU0Nhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWhvcmF8aG95fG1hw7FhbmF8YXllcikoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhaG9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG95XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1hw7FhbmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKD86ZXN0YVxccyopPyhtYcOxYW5hfHRhcmRlfG1lZGlhbm9jaGV8bWVkaW9kaWF8bWVkaW9kw61hfG5vY2hlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2NoZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpYW5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpb2RpYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZMOtYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmVufHBvcnxkdXJhbnRlfGRlfGRlbnRybyBkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FU01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVTQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRVNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcItC90LXQtNGW0LvRj1wiOiAwLFxuICAgIFwi0L3QtdC00ZbQu9GWXCI6IDAsXG4gICAgXCLQvdC10LTRltC70Y5cIjogMCxcbiAgICBcItC90LRcIjogMCxcbiAgICBcItC90LQuXCI6IDAsXG4gICAgXCLQv9C+0L3QtdC00ZbQu9C+0LpcIjogMSxcbiAgICBcItC/0L7QvdC10LTRltC70LrQsFwiOiAxLFxuICAgIFwi0L/QvVwiOiAxLFxuICAgIFwi0L/QvS5cIjogMSxcbiAgICBcItCy0ZbQstGC0L7RgNC+0LpcIjogMixcbiAgICBcItCy0ZbQstGC0L7RgNC60LBcIjogMixcbiAgICBcItCy0YJcIjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAgXCLRgdC10YDQtdC00LBcIjogMyxcbiAgICBcItGB0LXRgNC10LTQuFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNGDXCI6IDMsXG4gICAgXCLRgdGAXCI6IDMsXG4gICAgXCLRgdGALlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGAXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9CwXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9GDXCI6IDQsXG4gICAgXCLRh9GCXCI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGPXCI6IDUsXG4gICAgXCLQvyfRj9GC0L3QuNGG0ZZcIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRjlwiOiA1LFxuICAgIFwi0L/RglwiOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICBcItGB0YPQsdC+0YLQsFwiOiA2LFxuICAgIFwi0YHRg9Cx0L7RgtC4XCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0YNcIjogNixcbiAgICBcItGB0LFcIjogNixcbiAgICBcItGB0LEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0YHRltGH0LXQvdGMXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGPXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGWXCI6IDEsXG4gICAgXCLQu9GO0YLQuNC5XCI6IDIsXG4gICAgXCLQu9GO0YLQvtCz0L5cIjogMixcbiAgICBcItC70Y7RgtC+0LzRg1wiOiAyLFxuICAgIFwi0LHQtdGA0LXQt9C10L3RjFwiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90Y9cIjogMyxcbiAgICBcItCx0LXRgNC10LfQvdGWXCI6IDMsXG4gICAgXCLQutCy0ZbRgtC10L3RjFwiOiA0LFxuICAgIFwi0LrQstGW0YLQvdGPXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90ZZcIjogNCxcbiAgICBcItGC0YDQsNCy0LXQvdGMXCI6IDUsXG4gICAgXCLRgtGA0LDQstC90Y9cIjogNSxcbiAgICBcItGC0YDQsNCy0L3RllwiOiA1LFxuICAgIFwi0YfQtdGA0LLQtdC90YxcIjogNixcbiAgICBcItGH0LXRgNCy0L3Rj1wiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGWXCI6IDYsXG4gICAgXCLQu9C40L/QtdC90YxcIjogNyxcbiAgICBcItC70LjQv9C90Y9cIjogNyxcbiAgICBcItC70LjQv9C90ZZcIjogNyxcbiAgICBcItGB0LXRgNC/0LXQvdGMXCI6IDgsXG4gICAgXCLRgdC10YDQv9C90Y9cIjogOCxcbiAgICBcItGB0LXRgNC/0L3RllwiOiA4LFxuICAgIFwi0LLQtdGA0LXRgdC10L3RjFwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90Y9cIjogOSxcbiAgICBcItCy0LXRgNC10YHQvdGWXCI6IDksXG4gICAgXCLQttC+0LLRgtC10L3RjFwiOiAxMCxcbiAgICBcItC20L7QstGC0L3Rj1wiOiAxMCxcbiAgICBcItC20L7QstGC0L3RllwiOiAxMCxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LRcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00LBcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00YNcIjogMTEsXG4gICAgXCLQs9GA0YPQtNC10L3RjFwiOiAxMixcbiAgICBcItCz0YDRg9C00L3Rj1wiOiAxMixcbiAgICBcItCz0YDRg9C00L3RllwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcItGB0ZbRh1wiOiAxLFxuICAgIFwi0YHRltGHLlwiOiAxLFxuICAgIFwi0LvRjtGCXCI6IDIsXG4gICAgXCLQu9GO0YIuXCI6IDIsXG4gICAgXCLQsdC10YBcIjogMyxcbiAgICBcItCx0LXRgC5cIjogMyxcbiAgICBcItC60LLRltGCXCI6IDQsXG4gICAgXCLQutCy0ZbRgi5cIjogNCxcbiAgICBcItGC0YDQsNCyXCI6IDUsXG4gICAgXCLRgtGA0LDQsi5cIjogNSxcbiAgICBcItGH0LXRgNCyXCI6IDYsXG4gICAgXCLRh9C10YDQsi5cIjogNixcbiAgICBcItC70LjQv1wiOiA3LFxuICAgIFwi0LvQuNC/LlwiOiA3LFxuICAgIFwi0YHQtdGA0L9cIjogOCxcbiAgICBcItGB0LXRgNC/LlwiOiA4LFxuICAgIFwi0YHQtdGAXCI6IDgsXG4gICAgXCJj0LXRgC5cIjogOCxcbiAgICBcItCy0LXRgFwiOiA5LFxuICAgIFwi0LLQtdGALlwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgVwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgS5cIjogOSxcbiAgICBcItC20L7QstGCXCI6IDEwLFxuICAgIFwi0LbQvtCy0YIuXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/XCI6IDExLFxuICAgIFwi0LvQuNGB0YLQvtC/LlwiOiAxMSxcbiAgICBcItCz0YDRg9C0XCI6IDEyLFxuICAgIFwi0LPRgNGD0LQuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC+0LTQuNC9XCI6IDEsXG4gICAgXCLQvtC00L3QsFwiOiAxLFxuICAgIFwi0L7QtNC90L7Rl1wiOiAxLFxuICAgIFwi0L7QtNC90YNcIjogMSxcbiAgICBcItC00LLRllwiOiAyLFxuICAgIFwi0LTQstCwXCI6IDIsXG4gICAgXCLQtNCy0L7RhVwiOiAyLFxuICAgIFwi0YLRgNC4XCI6IDMsXG4gICAgXCLRgtGA0YzQvtGFXCI6IDMsXG4gICAgXCLRh9C+0YLQuNGA0LhcIjogNCxcbiAgICBcItGH0L7RgtC40YDRjNC+0YVcIjogNCxcbiAgICBcItC/J9GP0YLRjFwiOiA1LFxuICAgIFwi0L8n0Y/RgtC4XCI6IDUsXG4gICAgXCLRiNGW0YHRgtGMXCI6IDYsXG4gICAgXCLRiNC10YHRgtC4XCI6IDYsXG4gICAgXCLRgdGW0LxcIjogNyxcbiAgICBcItGB0LXQvNC4XCI6IDcsXG4gICAgXCLQstGW0YHRltC8XCI6IDgsXG4gICAgXCLQstC+0YHRjNC80LhcIjogOCxcbiAgICBcItC00LXQsifRj9GC0YxcIjogOSxcbiAgICBcItC00LXQsifRj9GC0LhcIjogOSxcbiAgICBcItC00LXRgdGP0YLRjFwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQuFwiOiAxMCxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtGMXCI6IDExLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LhcIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLRjFwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC4XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC/0LXRgNGI0LVcIjogMSxcbiAgICBcItC/0LXRgNGI0L7Qs9C+XCI6IDEsXG4gICAgXCLQtNGA0YPQs9C1XCI6IDIsXG4gICAgXCLQtNGA0YPQs9C+0LPQvlwiOiAyLFxuICAgIFwi0YLRgNC10YLRlFwiOiAzLFxuICAgIFwi0YLRgNC10YLRjNC+0LPQvlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQtVwiOiA0LFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogNCxcbiAgICBcItC/J9GP0YLQtVwiOiA1LFxuICAgIFwi0L8n0Y/RgtC+0LPQvlwiOiA1LFxuICAgIFwi0YjQvtGB0YLQtVwiOiA2LFxuICAgIFwi0YjQvtGB0YLQvtCz0L5cIjogNixcbiAgICBcItGB0YzQvtC80LVcIjogNyxcbiAgICBcItGB0YzQvtC80L7Qs9C+XCI6IDcsXG4gICAgXCLQstC+0YHRjNC80LVcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQvtCz0L5cIjogOCxcbiAgICBcItC00LXQsifRj9GC0LVcIjogOSxcbiAgICBcItC00LXQsifRj9GC0L7Qs9C+XCI6IDksXG4gICAgXCLQtNC10YHRj9GC0LVcIjogMTAsXG4gICAgXCLQtNC10YHRj9GC0L7Qs9C+XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LVcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLQtVwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMixcbiAgICBcItGC0YDQuNC90LDQtNGG0Y/RgtC1XCI6IDEzLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEzLFxuICAgIFwi0YfQvtGC0LjRgNC90LDQtNGG0Y/RgtC1XCI6IDE0LFxuICAgIFwi0YfQvtGC0LjQvdGA0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE0LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC1XCI6IDE1LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNSxcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0LVcIjogMTYsXG4gICAgXCLRiNGW0YHRgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNixcbiAgICBcItGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE3LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE3LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE4LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOCxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0LVcIjogMTksXG4gICAgXCLQtNC10LIn0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOSxcbiAgICBcItC00LLQsNC00YbRj9GC0LVcIjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtC+0LPQvlwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGUXCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGM0L7Qs9C+XCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L8n0Y/RgtC1XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINCy0L7RgdGM0LzQtVwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC+0LPQvlwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQvtCz0L5cIjogMjksXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtGP0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQvtC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINGF0LI6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LA6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LrQuDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINCz0L7QtDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdCwOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC9OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90Lg6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3RgzogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QvtC6OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60YM6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90ZbQsjogXCJkYXlcIixcbiAgICDQtNC90ZY6IFwiZGF5XCIsXG4gICAg0LTQvtCx0LA6IFwiZGF5XCIsXG4gICAg0LTQvtCx0YM6IFwiZGF5XCIsXG4gICAg0YLQuNC20LTQtdC90Yw6IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y46IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y86IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZY6IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZbQsjogXCJ3ZWVrXCIsXG4gICAg0LzRltGB0Y/RhtGMOiBcIm1vbnRoXCIsXG4gICAg0LzRltGB0Y/RhtGW0LI6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZY6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0Y86IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRgzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQsDogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRltCyOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GWOiBcInF1YXJ0ZXJcIixcbiAgICDRgNGW0Lo6IFwieWVhclwiLFxuICAgINGA0L7QutGDOiBcInllYXJcIixcbiAgICDRgNC+0YbRljogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60ZbQsjogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60Lg6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9GW0LJ80LTQtdC60ZbQu9GM0LrQsHzQv9Cw0YAoPzrRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0LTQtdC60ZbQu9GM0LrQsC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0ZbQsi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QsNGALykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OtCz0L580L7Qs9C+fNC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtGA0L7QutGDfNGA0ZbQunzRgHzRgC4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtC1LnzQtNC+INC9LtC1LnzQvS4g0LUufNC00L4g0L0uINC1Lil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgaWYgKC8o0YDRltC6fNGA0L7QutGDfNGAfNGALikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0LUufNC00L4g0L0uINC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0LUufNC9LtC1LikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0LUufNC9LtC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQsdC70LjQt9GM0LrQvnzQv9GA0LjQsdC70LjQt9C90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L/RgNC40LHQu9C40LfQvdC+fNC+0YDRltGU0L3RgtC+0LLQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgXCJpXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtC/0YDQvtGC0Y/Qs9C+0Lx80L3QsCDQv9GA0L7RgtGP0LfRlnzQv9GA0L7RgtGP0LPQvtC8fNGD0L/RgNC+0LTQvtCy0LZ80LLQv9GA0L7QtNC+0LLQtilcXFxccyoke1BBVFRFUk59YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5sZWZ0Qm91bmRhcnk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHRoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCBjdXJyZW50SW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHt0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KX0ke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzrQt3zRltC3KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWtNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyfNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNGWfNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRg3zQvnzQvtCxfNC3fNGW0Ld80LLRltC0KVxcXFxzKik/P2A7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86XFxcXHMqKD860YDQsNC90LrRg3zQstC10YfQvtGA0LB80L/QviDQvtCx0ZbQtNGWfNC/0ZbRgdC70Y8g0L7QsdGW0LTRgykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C+0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L4g0L7QsdGW0LTRllwiKSB8fCBtYXRjaFswXS5lbmRzV2l0aChcItC/0ZbRgdC70Y8g0L7QsdGW0LTRg1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fdGC0L7QvNGDKD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijRliDQtNC+fNGWINC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnzRg3zQvnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860Ld80ZbQt3zQstGW0LQpP1xcXFxzKijRgdGM0L7Qs9C+0LTQvdGWfNCy0YfQvtGA0LB80LfQsNCy0YLRgNCwfNC/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LB80L/QvtC30LDQstGH0L7RgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHRjNC+0LPQvtC00L3RllwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0L/QvtC30LDQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LfQsNGA0LDQt3zQvNC40L3Rg9C70L7Qs9C+XFxcXHMq0LLQtdGH0L7RgNCwfNC80LjQvdGD0LvQvtGXXFxcXHMq0L3QvtGH0ZZ80L3QsNGB0YLRg9C/0L3QvtGXXFxcXHMq0L3QvtGH0ZZ80YHRjNC+0LPQvtC00L3RllxcXFxzKtCy0L3QvtGH0ZZ80YbRltGU0ZdcXFxccyrQvdC+0YfRlnzRhtGM0L7Qs9C+INGA0LDQvdC60YN80LLRgNCw0L3RhtGWfNGA0LDQvdC60YN80LfRgNCw0L3QutGDfNC+0L/RltCy0LTQvdGWfNCy0LLQtdGH0LXRgNGWfNCy0LXRh9C+0YDQsHzQvtC/0ZbQstC90L7Rh9GWfNCy0L3QvtGH0ZYpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LfQsNGA0LDQt1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LLQstC10YfQtdGA0ZZcIiB8fCBsb3dlclRleHQgPT09IFwi0LLQtdGH0L7RgNCwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQstGA0LDQvdGG0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YDQsNC90LrRg1wiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLQt9GA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC00L3RllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LzQuNC90YPQu9C+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Qs9C+XFxzKtCy0LXRh9C+0YDQsC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvdCw0YHRgtGD0L/QvdC+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgY29uc3QgZGF5c1RvQWRkID0gdGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgMjIgPyAxIDogMjtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyBkYXlzVG9BZGQpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0YbRltGU0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC90L7Rh9GWXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0L3QvtGH0ZZcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD860YNcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0YbQtdC5fNC80LjQvdGD0LvQvtCz0L580LzQuNC90YPQu9C40Ll80L/QvtC/0LXRgNC10LTQvdGW0Ll80L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+fNC90LDRgdGC0YPQv9C90L7Qs9C+fNC90LDRgdGC0YPQv9C90LjQuXzQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpcXFxccyooPzosfFxcXFwpfO+8iSkpP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKijQvdCwfNGDfNCyKVxcXFxzKijRhtGM0L7QvNGDfNC80LjQvdGD0LvQvtC80YN80L3QsNGB0YLRg9C/0L3QvtC80YMpXFxcXHMq0YLQuNC20L3Rlik/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCLQvNC40L3Rg9C70L7Qs9C+XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RltC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RjNC+0LPQvlwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QuNC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YbQtdC5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LPQvlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGG0YzQvtC80YNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAo0LIg0LzQuNC90YPQu9C+0LzRg3zRgyDQvNC40L3Rg9C70L7QvNGDfNC90LAg0LzQuNC90YPQu9C+0LzRg3zQvNC40L3Rg9C70L7Qs9C+fNC90LAg0L3QsNGB0YLRg9C/0L3QvtC80YN80LIg0L3QsNGB0YLRg9C/0L3QvtC80YN80YMg0L3QsNGB0YLRg9C/0L3QvtC80YN80L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsCDRhtGM0L7QvNGDfNCyINGG0YzQvtC80YN80YMg0YbRjNC+0LzRg3zRhtGM0L7Qs9C+KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQvdCw0YHRgtGD0L/QvdC+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQsiDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC80LjQvdGD0LvQvtCz0L5cIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodGltZXVuaXQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRhtGWfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvRlnzQvNCw0LnQsdGD0YLQvdGWfNC90LDRgdGC0YPQv9C90ZZ80L/RltGB0LvRj3zRh9C10YDQtdC3fFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbM10pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcItC+0YHRgtCw0L3QvdGWXCI6XG4gICAgICAgICAgICBjYXNlIFwi0LzQuNC90YPQu9GWXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBVa01vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVrTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFVLTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWVuaWNhXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcImx1bmVkw6xcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVkw6xcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWVyY29sZWTDrFwiOiAzLFxuICAgIFwibWVyY1wiOiAzLFxuICAgIFwiZ2lvdmVkw6xcIjogNCxcbiAgICBcImdpb3ZcIjogNCxcbiAgICBcInZlbmVyZMOsXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhYmF0b1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge307XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcImdlbm5haW9cIjogMSxcbiAgICBcImdlblwiOiAxLFxuICAgIFwiZ2VuLlwiOiAxLFxuICAgIFwiZmViYnJhaW9cIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwiZmVicmFpb1wiOiAyLFxuICAgIFwiZmViYlwiOiAyLFxuICAgIFwiZmViYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsZVwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWdnaW9cIjogNSxcbiAgICBcIm1hZ1wiOiA1LFxuICAgIFwiZ2l1Z25vXCI6IDYsXG4gICAgXCJnaXVcIjogNixcbiAgICBcImx1Z2xpb1wiOiA3LFxuICAgIFwibHVnXCI6IDcsXG4gICAgXCJsdWdsXCI6IDcsXG4gICAgXCJsdWcuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwic2V0dGVtYnJlXCI6IDksXG4gICAgXCJzZXRcIjogOSxcbiAgICBcInNldC5cIjogOSxcbiAgICBcInNldHRcIjogOSxcbiAgICBcInNldHQuXCI6IDksXG4gICAgXCJvdHRvYnJlXCI6IDEwLFxuICAgIFwib3R0XCI6IDEwLFxuICAgIFwib3R0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljZVwiOiAxMixcbiAgICBcImRpYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwidW5vXCI6IDEsXG4gICAgXCJkdWVcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwicXVhdHRyb1wiOiA0LFxuICAgIFwiY2lucXVlXCI6IDUsXG4gICAgXCJzZWlcIjogNixcbiAgICBcInNldHRlXCI6IDcsXG4gICAgXCJvdHRvXCI6IDgsXG4gICAgXCJub3ZlXCI6IDksXG4gICAgXCJkaWVjaVwiOiAxMCxcbiAgICBcInVuZGljaVwiOiAxMSxcbiAgICBcImRvZGljaVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJwcmltb1wiOiAxLFxuICAgIFwic2Vjb25kb1wiOiAyLFxuICAgIFwidGVyem9cIjogMyxcbiAgICBcInF1YXJ0b1wiOiA0LFxuICAgIFwicXVpbnRvXCI6IDUsXG4gICAgXCJzZXN0b1wiOiA2LFxuICAgIFwic2V0dGltb1wiOiA3LFxuICAgIFwib3R0YXZvXCI6IDgsXG4gICAgXCJub25vXCI6IDksXG4gICAgXCJkZWNpbW9cIjogMTAsXG4gICAgXCJ1bmRpY2VzaW1vXCI6IDExLFxuICAgIFwiZG9kaWNlc2ltb1wiOiAxMixcbiAgICBcInRyZWRpY2VzaW1vXCI6IDEzLFxuICAgIFwicXVhdHRvcmRpY2VzaW1vXCI6IDE0LFxuICAgIFwicXVpbmRpY2VzaW1vXCI6IDE1LFxuICAgIFwic2VkaWNlc2ltb1wiOiAxNixcbiAgICBcImRpY2lhc3NldHRlc2ltb1wiOiAxNyxcbiAgICBcImRpY2lvdHRlc2ltb1wiOiAxOCxcbiAgICBcImRpY2lhbm5vdmVzaW1vXCI6IDE5LFxuICAgIFwidmVudGVzaW1vXCI6IDIwLFxuICAgIFwidmVudHVuZXNpbW9cIjogMjEsXG4gICAgXCJ2ZW50aWR1ZXNpbW9cIjogMjIsXG4gICAgXCJ2ZW50aXRyZWVzaW1vXCI6IDIzLFxuICAgIFwidmVudGlxdWF0dHJlc2ltb1wiOiAyNCxcbiAgICBcInZlbnRpY2lucXVlc2ltb1wiOiAyNSxcbiAgICBcInZlbnRpc2VpZXNpbW9cIjogMjYsXG4gICAgXCJ2ZW50aXNldHRlc2ltb1wiOiAyNyxcbiAgICBcInZlbnRvdHRlc2ltb1wiOiAyOCxcbiAgICBcInZlbnRpbm92ZXNpbW9cIjogMjksXG4gICAgXCJ0cmVudGVzaW1vXCI6IDMwLFxuICAgIFwidHJlbnR1bmVzaW1vXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kaVwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGlcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcIm9cIjogXCJob3VyXCIsXG4gICAgXCJvcmFcIjogXCJob3VyXCIsXG4gICAgXCJvcmVcIjogXCJob3VyXCIsXG4gICAgXCJnaW9ybm9cIjogXCJkYXlcIixcbiAgICBcImdpb3JuaVwiOiBcImRheVwiLFxuICAgIFwic2V0dGltYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2V0dGltYW5lXCI6IFwid2Vla1wiLFxuICAgIFwibWVzZVwiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmlcIjogXCJxdWFydGVyXCIsXG4gICAgXCJhbm5pXCI6IFwieWVhclwiLFxuICAgIFwiYW5ub1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn11bj8pP3x1bj9cXFxcYig/OlxcXFxzezAsMn1xdWFsY3Vubyk/fHF1YWxjdW5vfG1vbHRpfGE/XFxcXHN7MCwyfWFsY3VuaVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5cIiB8fCBudW0gPT09IFwidW5hXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxjdW5pLykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWV0w6EvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3BhaW8vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tb2x0aS8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86bW98bmRvfHJ6b3xzaW1vfGVzaW1vKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/Omltb3xuZG98cnpvfHJ0b3xudG98c3RvfHRhdm98bm9ub3xjaW1vfHRpbW98ZXNpbW8pJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9CRS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkUvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCkgLSA1NDM7XG4gICAgfVxuICAgIGlmICgvQkNFPy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkNFPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKEFEfENFKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKEFEfENFKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86d2l0aGlufGlufGZvcilcXFxccypgICtcbiAgICBgKD86KD86cGnDuSBvIG1lbm98aW50b3Jub3xhcHByb3NzaW1hdGl2YW1lbnRlfHZlcnNvfHZlcnNvIGxlKVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhPVVRfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86YWx8XFxcXC18XFxcXOKAk3xmaW5vfGFsbGV8YWxsbyk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/OmRhbCk/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzphbHxcXFxcLXxcXFxcYWxsZXxcXFxcZGVsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pXFxcXHMqYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGNvbXBvbmVudHM7XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb21wb25lbnRzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgoPzppbilcXFxccyopP2AgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyAobWF0Y2hbUFJFRklYX0dST1VQXSB8fCBcIlwiKS5sZW5ndGgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezR9KVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbGxlfGRhbGxlKVxcXFxzKik/P1wiO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzpcXFxccyooPzppbiBwdW50b3xvXFxcXFcqaW4gcHVudG98KD86ZGl8ZGVsfGRlbGxhfGlufGFsfGFsbGF8YWxsZSlcXFxccyooPzptYXR0aW5hfHBvbWVyaWdnaW98c2VyYSkpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwic2VyYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcInBvbWVyaWdnaW9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibWF0dGluYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmZhfHByaW1hfHByZWNlZGVudGUpKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX1mYSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmRvcG98cGnDuSB0YXJkaXxkYSBhZGVzc298YXZhbnRpfG9sdHJlfGEgc2VndWlyZSlgICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoZG9wb3xwacO5IHRhcmRpKVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBmcmFnbWVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxhbGxlfGRvcG98cHJpbWF8aWx8ZGl8ZGVsfGRlbGxlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhvcmF8b2dnaXxzdGFzZXJhfHF1ZXN0YSBzZXJhfGRvbWFuaXxkbW58aWVyaVxccypzZXJhKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvcmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9nZ2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaWVyaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9tYW5pXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG1uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInN0YXNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJxdWVzdGEgc2VyYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9pZXJpXFxzKnNlcmEvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnF1ZXN0b3xxdWVzdGEpP1xcc3swLDN9KG1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhfG5vdHRlfG1lenphbm90dGV8bWV6em9naW9ybm8pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicG9tZXJpZ2dpb1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZXJhXCI6XG4gICAgICAgICAgICBjYXNlIFwibm90dGVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV6emFub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hdHRpbmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6b2dpb3Jub1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86aWxcXFxccyo/KT9cIiArXG4gICAgXCIoPzoocXVlc3RhfGwndWx0aW1hfHNjb3JzYXxwcm9zc2ltYSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKnNldHRpbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInVsdGltYVwiIHx8IG1vZGlmaWVyV29yZCA9PSBcInNjb3JzYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidWx0aW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicHJvc3NpbWFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInByb3NzaW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicXVlc3RhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJxdWVzdGFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98c2NvcnNvfHByb3NzaW1vfGRvcG9cXFxccypxdWVzdG98cXVlc3RhfHVsdGltYXxzY29yc2F8cHJvc3NpbWFcXFxccypxdWVzdGEpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWAgKyBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcm9zc2ltb1wiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJkb3BvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcmltYVwiIHx8IG1vZGlmaWVyID09IFwicHJlY2VkZW50ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvc2V0dGltYW5hL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWVzZS9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL2Fubm8vaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98cGFzc2F0b3xwcm9zc2ltb3xkb3BvfHF1ZXN0YXx1bHRpbWF8cGFzc2F0YXxwcm9zc2ltYXxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKHByaW1hfGRhbCkkL2kpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXFxzKyhkb3BvfGRhbHxmaW5vKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkgJiYgIWhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcImRheVwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwibW9udGhcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcInllYXJcIik7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShuZXh0UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5UaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInPDtm5kYWdcIjogMCxcbiAgICBcInPDtm5cIjogMCxcbiAgICBcInNvXCI6IDAsXG4gICAgXCJtw6VuZGFnXCI6IDEsXG4gICAgXCJtw6VuXCI6IDEsXG4gICAgXCJtw6VcIjogMSxcbiAgICBcInRpc2RhZ1wiOiAyLFxuICAgIFwidGlzXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwib25zZGFnXCI6IDMsXG4gICAgXCJvbnNcIjogMyxcbiAgICBcIm9uXCI6IDMsXG4gICAgXCJ0b3JzZGFnXCI6IDQsXG4gICAgXCJ0b3JzXCI6IDQsXG4gICAgXCJ0b1wiOiA0LFxuICAgIFwiZnJlZGFnXCI6IDUsXG4gICAgXCJmcmVcIjogNSxcbiAgICBcImZyXCI6IDUsXG4gICAgXCJsw7ZyZGFnXCI6IDYsXG4gICAgXCJsw7ZyXCI6IDYsXG4gICAgXCJsw7ZcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhcmlcIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmVicnVhcmlcIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhcHJpbFwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWpcIjogNSxcbiAgICBcImp1bmlcIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaVwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhdWd1c3RpXCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJva3RvYmVyXCI6IDEwLFxuICAgIFwib2t0XCI6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBcIm5vdmVtYmVyXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlY2VtYmVyXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWSA9IHtcbiAgICBcImbDtnJzdGFcIjogMSxcbiAgICBcImFuZHJhXCI6IDIsXG4gICAgXCJ0cmVkamVcIjogMyxcbiAgICBcImZqw6RyZGVcIjogNCxcbiAgICBcImZlbXRlXCI6IDUsXG4gICAgXCJzasOkdHRlXCI6IDYsXG4gICAgXCJzanVuZGVcIjogNyxcbiAgICBcIsOldHRvbmRlXCI6IDgsXG4gICAgXCJuaW9uZGVcIjogOSxcbiAgICBcInRpb25kZVwiOiAxMCxcbiAgICBcImVsZnRlXCI6IDExLFxuICAgIFwidG9sZnRlXCI6IDEyLFxuICAgIFwidHJldHRvbmRlXCI6IDEzLFxuICAgIFwiZmpvcnRvbmRlXCI6IDE0LFxuICAgIFwiZmVtdG9uZGVcIjogMTUsXG4gICAgXCJzZXh0b25kZVwiOiAxNixcbiAgICBcInNqdXR0b25kZVwiOiAxNyxcbiAgICBcImFydG9uZGVcIjogMTgsXG4gICAgXCJuaXR0b25kZVwiOiAxOSxcbiAgICBcInRqdWdvbmRlXCI6IDIwLFxuICAgIFwidGp1Z29mw7Zyc3RhXCI6IDIxLFxuICAgIFwidGp1Z29hbmRyYVwiOiAyMixcbiAgICBcInRqdWdvdHJlZGplXCI6IDIzLFxuICAgIFwidGp1Z29masOkcmRlXCI6IDI0LFxuICAgIFwidGp1Z29mZW10ZVwiOiAyNSxcbiAgICBcInRqdWdvc2rDpHR0ZVwiOiAyNixcbiAgICBcInRqdWdvc2p1bmRlXCI6IDI3LFxuICAgIFwidGp1Z2/DpXR0b25kZVwiOiAyOCxcbiAgICBcInRqdWdvbmlvbmRlXCI6IDI5LFxuICAgIFwidHJldHRpb25kZVwiOiAzMCxcbiAgICBcInRyZXR0aW9mw7Zyc3RhXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVuXCI6IDEsXG4gICAgXCJldHRcIjogMSxcbiAgICBcInR2w6VcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwiZnlyYVwiOiA0LFxuICAgIFwiZmVtXCI6IDUsXG4gICAgXCJzZXhcIjogNixcbiAgICBcInNqdVwiOiA3LFxuICAgIFwiw6V0dGFcIjogOCxcbiAgICBcIm5pb1wiOiA5LFxuICAgIFwidGlvXCI6IDEwLFxuICAgIFwiZWx2YVwiOiAxMSxcbiAgICBcInRvbHZcIjogMTIsXG4gICAgXCJ0cmV0dG9uXCI6IDEzLFxuICAgIFwiZmpvcnRvblwiOiAxNCxcbiAgICBcImZlbXRvblwiOiAxNSxcbiAgICBcInNleHRvblwiOiAxNixcbiAgICBcInNqdXR0b25cIjogMTcsXG4gICAgXCJhcnRvblwiOiAxOCxcbiAgICBcIm5pdHRvblwiOiAxOSxcbiAgICBcInRqdWdvXCI6IDIwLFxuICAgIFwidHJldHRp0L5cIjogMzAsXG4gICAgXCJmeXJ0aW9cIjogNDAsXG4gICAgXCJmZW10aW9cIjogNTAsXG4gICAgXCJzZXh0aW9cIjogNjAsXG4gICAgXCJzanV0dGlvXCI6IDcwLFxuICAgIFwiw6V0dGlvXCI6IDgwLFxuICAgIFwibml0dGlvXCI6IDkwLFxuICAgIFwiaHVuZHJhXCI6IDEwMCxcbiAgICBcInR1c2VuXCI6IDEwMDAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0XCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVyXCI6IFwibWludXRlXCIsXG4gICAgXCJ0aW1cIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tZVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1hclwiOiBcImhvdXJcIixcbiAgICBcImRhZ1wiOiBcImRheVwiLFxuICAgIFwiZGFnYXJcIjogXCJkYXlcIixcbiAgICBcInZlY2thXCI6IFwid2Vla1wiLFxuICAgIFwidmVja29yXCI6IFwid2Vla1wiLFxuICAgIFwibcOlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnTQsGxcIjogXCJxdWFydGVyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW5kXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRlclwiOiBcInNlY29uZFwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnRhbFwiOiBcInF1YXJ0ZXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZKX18XFxcXGR7MSwyfSg/OmV8OmUpKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvXFxkKy8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyTnVtYmVyID0gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86cMOlXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihmw7ZycmF8c2VuYXN0ZXxuw6RzdGF8a29tbWFuZGUpXFxcXHMqdmVja2EpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2bDtnJyYXxzZW5hc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9uw6RzdGF8a29tbWFuZGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBgKD86XFxcXHMqKD86dGlsbHxcXFxcLXxcXFxc4oCTfFxcXFxzKVxcXFxzKihbMC05XXsxLDJ9KSk/XFxcXHMqYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoWzAtOV17NH0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKGRlbm5hfGRlbiBow6RyfGbDtnJyYXxwYXNzZXJhZGV8bsOkc3RhfGtvbW1hbmRlfGVmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzZXJhZGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAobnV8aWRhZ3xpbW9yZ29ufMO2dmVybW9yZ29ufGlnw6VyfGbDtnJyZ8OlcnxpXFxcXHMqZsO2cnJnw6VyKWAgK1xuICAgIGAoPzpcXFxccyooPzpww6VcXFxccyopPyhtb3Jnb25lbj98ZsO2cm1pZGRhZ2VuP3xtaWRkYWdlbj98ZWZ0ZXJtaWRkYWdlbj98a3bDpGxsZW4/fG5hdHRlbj98bWlkbmF0dCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImltb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbW9yblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZsO2cnJnw6VyXCI6XG4gICAgICAgICAgICBjYXNlIFwiaSBmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB0d29EYXlzQWdvID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHR3b0RheXNBZ28uc2V0RGF0ZSh0d29EYXlzQWdvLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHR3b0RheXNBZ28pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25lblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZsO2cm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlZnRlcm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImt2w6RsbFwiOlxuICAgICAgICAgICAgY2FzZSBcImt2w6RsbGVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0XCI6XG4gICAgICAgICAgICBjYXNlIFwibmF0dGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkbmF0dFwiOlxuICAgICAgICAgICAgICAgIGlmICh0aW1lS2V5d29yZCA9PT0gXCJtaWRuYXR0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNWQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgU1ZDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW10sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzprbG98a2VsbG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccypcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInN1bm51bnRhaVwiOiAwLFxuICAgIFwic3VubnVudGFpbmFcIjogMCxcbiAgICBcInN1XCI6IDAsXG4gICAgXCJtYWFuYW50YWlcIjogMSxcbiAgICBcIm1hYW5hbnRhaW5hXCI6IDEsXG4gICAgXCJtYVwiOiAxLFxuICAgIFwidGlpc3RhaVwiOiAyLFxuICAgIFwidGlpc3RhaW5hXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwia2Vza2l2aWlra29cIjogMyxcbiAgICBcImtlc2tpdmlpa2tvbmFcIjogMyxcbiAgICBcImtlXCI6IDMsXG4gICAgXCJ0b3JzdGFpXCI6IDQsXG4gICAgXCJ0b3JzdGFpbmFcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJwZXJqYW50YWlcIjogNSxcbiAgICBcInBlcmphbnRhaW5hXCI6IDUsXG4gICAgXCJwZVwiOiA1LFxuICAgIFwibGF1YW50YWlcIjogNixcbiAgICBcImxhdWFudGFpbmFcIjogNixcbiAgICBcImxhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0YW1taWt1dVwiOiAxLFxuICAgIFwidGFtbWlrdXV0YVwiOiAxLFxuICAgIFwidGFtbWlrdXVuXCI6IDEsXG4gICAgXCJ0YW1taVwiOiAxLFxuICAgIFwiaGVsbWlrdXVcIjogMixcbiAgICBcImhlbG1pa3V1dGFcIjogMixcbiAgICBcImhlbG1pa3V1blwiOiAyLFxuICAgIFwiaGVsbWlcIjogMixcbiAgICBcIm1hYWxpc2t1dVwiOiAzLFxuICAgIFwibWFhbGlza3V1dGFcIjogMyxcbiAgICBcIm1hYWxpc2t1dW5cIjogMyxcbiAgICBcIm1hYWxpc1wiOiAzLFxuICAgIFwiaHVodGlrdXVcIjogNCxcbiAgICBcImh1aHRpa3V1dGFcIjogNCxcbiAgICBcImh1aHRpa3V1blwiOiA0LFxuICAgIFwiaHVodGlcIjogNCxcbiAgICBcInRvdWtva3V1XCI6IDUsXG4gICAgXCJ0b3Vrb2t1dXRhXCI6IDUsXG4gICAgXCJ0b3Vrb2t1dW5cIjogNSxcbiAgICBcInRvdWtvXCI6IDUsXG4gICAgXCJrZXPDpGt1dVwiOiA2LFxuICAgIFwia2Vzw6RrdXV0YVwiOiA2LFxuICAgIFwia2Vzw6RrdXVuXCI6IDYsXG4gICAgXCJrZXPDpFwiOiA2LFxuICAgIFwiaGVpbsOka3V1XCI6IDcsXG4gICAgXCJoZWluw6RrdXV0YVwiOiA3LFxuICAgIFwiaGVpbsOka3V1blwiOiA3LFxuICAgIFwiaGVpbsOkXCI6IDcsXG4gICAgXCJlbG9rdXVcIjogOCxcbiAgICBcImVsb2t1dXRhXCI6IDgsXG4gICAgXCJlbG9rdXVuXCI6IDgsXG4gICAgXCJlbG9cIjogOCxcbiAgICBcInN5eXNrdXVcIjogOSxcbiAgICBcInN5eXNrdXV0YVwiOiA5LFxuICAgIFwic3l5c2t1dW5cIjogOSxcbiAgICBcInN5eXNcIjogOSxcbiAgICBcImxva2FrdXVcIjogMTAsXG4gICAgXCJsb2tha3V1dGFcIjogMTAsXG4gICAgXCJsb2tha3V1blwiOiAxMCxcbiAgICBcImxva2FcIjogMTAsXG4gICAgXCJtYXJyYXNrdXVcIjogMTEsXG4gICAgXCJtYXJyYXNrdXV0YVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dW5cIjogMTEsXG4gICAgXCJtYXJyYXNcIjogMTEsXG4gICAgXCJqb3VsdWt1dVwiOiAxMixcbiAgICBcImpvdWx1a3V1dGFcIjogMTIsXG4gICAgXCJqb3VsdWt1dW5cIjogMTIsXG4gICAgXCJqb3VsdVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ5a3NpXCI6IDEsXG4gICAgXCJ5aGRlblwiOiAxLFxuICAgIFwia2Frc2lcIjogMixcbiAgICBcImthaGRlblwiOiAyLFxuICAgIFwia29sbWVcIjogMyxcbiAgICBcImtvbG1lblwiOiAzLFxuICAgIFwibmVsasOkXCI6IDQsXG4gICAgXCJuZWxqw6RuXCI6IDQsXG4gICAgXCJ2aWlzaVwiOiA1LFxuICAgIFwidmlpZGVuXCI6IDUsXG4gICAgXCJrdXVzaVwiOiA2LFxuICAgIFwia3V1ZGVuXCI6IDYsXG4gICAgXCJzZWl0c2Vtw6RuXCI6IDcsXG4gICAgXCJrYWhkZWtzYW5cIjogOCxcbiAgICBcInloZGVrc8OkblwiOiA5LFxuICAgIFwia3ltbWVuZW5cIjogMTAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dHRpYVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0aW5cIjogXCJtaW51dGVcIixcbiAgICBcInRcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInB2XCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2a1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJra1wiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW50aVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW50aWFcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VubmluXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidHVudGlcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aWFcIjogXCJob3VyXCIsXG4gICAgXCJ0dW5uaW5cIjogXCJob3VyXCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2aWlra29cIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlra29hXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa29uXCI6IFwid2Vla1wiLFxuICAgIFwia3V1a2F1c2lcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1dHRhXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdWRlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJ2dW9zaVwiOiBcInllYXJcIixcbiAgICBcInZ1b3R0YVwiOiBcInllYXJcIixcbiAgICBcInZ1b2RlblwiOiBcInllYXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzoodmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkfGVuc2l8c2V1cmFhdmF8c2V1cmFhdmFuYXx0w6Rtw6R8dMOkbsOkKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHZpaW1lfGVuc2l8c2V1cmFhdmEpXFxcXHMqdmlpa29sbGEpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL3ZpaW1lfGVkZWxsaW5lbnxlZGVsbGlzZW7DpC8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pXFxcXC4/YCArXG4gICAgYCg/OlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoc2V1cmFhdmF8c2V1cmFhdmF0fHNldXJhYXZpZW58ZWRlbGxpbmVufGVkZWxsaXNldHxlZGVsbGlzdGVufHZpaW1laXNldHx2aWltZWlzdGVufGt1bHVuZWV0fGt1bHVuZWlkZW58XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImVkZWxsaW5lblwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzdGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwia3VsdW5lZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVpZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHMqc2l0dGVuKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccyooPzpzaXPDpGxsw6R8a3VsdWVzc2F8cMOkw6RzdMOkKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8odMOkbsOkXFxzKik/KGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gRklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bGxhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWFtdW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYW11cMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWx0YXDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWxsYWxsYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXNraXnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9GSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChueXR8dMOkbsOkw6RufGh1b21lbm5hfHlsaWh1b21lbm5hfGVpbGVufHRvaXNzYXDDpGl2w6Ruw6R8dmlpbWVcXFxccyp5w7Zuw6QpYCArXG4gICAgYCg/OlxcXFxzKihhYW11bGxhfGFhbXVuYXxhYW11cMOkaXbDpGxsw6R8cMOkaXbDpGxsw6R8aWx0YXDDpGl2w6RsbMOkfGlsbGFsbGF8ecO2bGzDpHxrZXNraXnDtmxsw6QpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm55dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0w6Ruw6TDpG5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5bGlodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlaWxlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9pc3NhcMOkaXbDpG7DpFwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvdmlpbWVcXHMqecO2bsOkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKigtfOKAkylcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxrbG98a2VsbG98LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRklUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRklNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IEZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiY2hcXHUxZWU3IG5oXFx1MWVhZHRcIjogMCxcbiAgICBcImNuXCI6IDAsXG4gICAgXCJ0aFxcdTFlZTkgaGFpXCI6IDEsXG4gICAgXCJ0MlwiOiAxLFxuICAgIFwidGhcXHUxZWU5IGJhXCI6IDIsXG4gICAgXCJ0M1wiOiAyLFxuICAgIFwidGhcXHUxZWU5IHRcXHUwMWIwXCI6IDMsXG4gICAgXCJ0NFwiOiAzLFxuICAgIFwidGhcXHUxZWU5IG5cXHUwMTAzbVwiOiA0LFxuICAgIFwidDVcIjogNCxcbiAgICBcInRoXFx1MWVlOSBzXFx1MDBlMXVcIjogNSxcbiAgICBcInQ2XCI6IDUsXG4gICAgXCJ0aFxcdTFlZTkgYlxcdTFlYTN5XCI6IDYsXG4gICAgXCJ0N1wiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwidGhcXHUwMGUxbmcgMVwiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTFlZDl0XCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBnaVxcdTAwZWFuZ1wiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgMlwiOiAyLFxuICAgIFwidGhcXHUwMGUxbmcgaGFpXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyAzXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyBiYVwiOiAzLFxuICAgIFwidGhcXHUwMGUxbmcgNFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAxYjBcIjogNCxcbiAgICBcInRoXFx1MDBlMW5nIDVcIjogNSxcbiAgICBcInRoXFx1MDBlMW5nIG5cXHUwMTAzbVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgNlwiOiA2LFxuICAgIFwidGhcXHUwMGUxbmcgc1xcdTAwZTF1XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyA3XCI6IDcsXG4gICAgXCJ0aFxcdTAwZTFuZyBiXFx1MWVhM3lcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIDhcIjogOCxcbiAgICBcInRoXFx1MDBlMW5nIHRcXHUwMGUxbVwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgOVwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgY2hcXHUwMGVkblwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgMTBcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpXCI6IDEwLFxuICAgIFwidGhcXHUwMGUxbmcgMTFcIjogMTEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIDEyXCI6IDEyLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTFlYTFwXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcIm1cXHUxZWQ5dFwiOiAxLFxuICAgIFwiaGFpXCI6IDIsXG4gICAgXCJiYVwiOiAzLFxuICAgIFwiYlxcdTFlZDFuXCI6IDQsXG4gICAgXCJuXFx1MDEwM21cIjogNSxcbiAgICBcInNcXHUwMGUxdVwiOiA2LFxuICAgIFwiYlxcdTFlYTN5XCI6IDcsXG4gICAgXCJ0XFx1MDBlMW1cIjogOCxcbiAgICBcImNoXFx1MDBlZG5cIjogOSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgaGFpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcImdpXFx1MDBlMnlcIjogXCJzZWNvbmRcIixcbiAgICBcInBoXFx1MDBmYXRcIjogXCJtaW51dGVcIixcbiAgICBcImdpXFx1MWVkZFwiOiBcImhvdXJcIixcbiAgICBcIm5nXFx1MDBlMHlcIjogXCJkYXlcIixcbiAgICBcInR1XFx1MWVhN25cIjogXCJ3ZWVrXCIsXG4gICAgXCJ0aFxcdTAwZTFuZ1wiOiBcIm1vbnRoXCIsXG4gICAgXCJuXFx1MDEwM21cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gXCIoPzpcIiArIG1hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSkgKyBcInxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSspXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiKD86WzAtOV17MSw0fSg/OlxcXFxzKlRDTik/KVwiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGNvbnN0IHVwcGVyID0gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpKTtcbiAgICBpZiAoL1RDTi8udGVzdCh1cHBlcikpXG4gICAgICAgIHJldHVybiAtbnVtO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihudW0pO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gXCIoXCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiKVxcXFxzezAsNX0oXCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXFxcXHN7MCw1fVwiO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86bmdcXHUwMGUweVxcXFxzKik/XCIgK1xuICAgIFwiKFswLTldezEsMn0pXCIgK1xuICAgIFwiXFxcXHMqdGhcXHUwMGUxbmdcXFxccypcIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypuXFx1MDEwM21cXFxccyooXCIgK1xuICAgIFlFQVJfUEFUVEVSTiArXG4gICAgXCIpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVN0YW5kYXJkUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEgfHwgbW9udGggPiAxMilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJU3RhbmRhcmRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSwgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIG1hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKSArIFwiKVwiICsgXCIoPzpcXFxccyooPzpuxINtfC8pXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpKT9cIiArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1vbnRoWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFtb250aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTW9udGhZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlxcXFxibsSDbVxcXFxzKihcIiArIFlFQVJfUEFUVEVSTiArIFwiKXxcXFxcYihbMC05XXsxLDR9KVxcXFxzKihUQ04pKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfV0lUSF9OQU1fR1JPVVAgPSAxO1xuY29uc3QgQkFSRV9CQ19ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEJBUkVfQkNfU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXJUZXh0O1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF0pIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5ZWFyVGV4dCA9IG1hdGNoW0JBUkVfQkNfWUVBUl9HUk9VUF0gKyBcIiBcIiArIG1hdGNoW0JBUkVfQkNfU1VGRklYX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKHllYXJUZXh0KSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvXFxiKGjDtG0gbmF5fGjDtG0gcXVhfGjDtG0ga2lhfG5nw6B5IG1haXxuZ8OgeSBraWF8YsOieSBnaeG7nXxsw7pjIG7DoHkpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImLDonkgZ2nhu51cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsw7pjIG7DoHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gbmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gcXVhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJow7RtIGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkgbWFpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm5nw6B5IGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhideG7lWlcXHMqKT8oc8Ohbmcgc+G7m218c8Ohbmd8dHLGsGF8Y2hp4buBdXx04buRaXzEkcOqbXxu4butYSDEkcOqbXxiw6xuaCBtaW5oKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBjb250ZXh0LnJlZkRhdGUpO1xuICAgICAgICByZXR1cm4gVklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwga2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiXFx1MDBlY25oIG1pbmhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nIHNcXHUxZWRibVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRyXFx1MDFiMGFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaVxcdTFlYzF1XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0XFx1MWVkMWlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblxcdTFlZWRhIFxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgIG1hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcXFxccyoobsOgeXx04bubaXxzYXUoPyFcXFxccypraGkpfHF1YSkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9ESUZJRVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkb3dUZXh0ID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZG93ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2Rvd1RleHRdO1xuICAgICAgICBpZiAoZG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllclR5cGUgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG0uaW5jbHVkZXMoXCJ04bubaVwiKSB8fCBtLmluY2x1ZGVzKFwic2F1XCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibmV4dFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobS5pbmNsdWRlcyhcInF1YVwiKSlcbiAgICAgICAgICAgICAgICBtb2RpZmllclR5cGUgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIGRvdywgbW9kaWZpZXJUeXBlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpsXFx1MDBmYWNcXFxccyp8dlxcdTAwZTBvXFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypnaVxcdTFlZGRcXFxccyooWzAtOV17MSwyfSk/XFxcXHMqKD86cGhcXHUwMGZhdFxcXFxzKik/XCIgK1xuICAgIFwiKHNcXHUwMGUxbmd8dHJcXHUwMWIwYXxjaGlcXHUxZWMxdXx0XFx1MWVkMWl8XFx1MDExMVxcdTAwZWFtKT9cIiArXG4gICAgXCJ8OihbMC05XXsyfSkpXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDE7XG5jb25zdCBNSU5VVEVfR0lPX0dST1VQID0gMjtcbmNvbnN0IE1FUklESUVNX0dST1VQID0gMztcbmNvbnN0IE1JTlVURV9DT0xPTl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaG91ciA+IDIzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gbWF0Y2hbTUlOVVRFX0NPTE9OX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdKVxuICAgICAgICAgICAgOiBtYXRjaFtNSU5VVEVfR0lPX0dST1VQXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dJT19HUk9VUF0pXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFtNRVJJRElFTV9HUk9VUF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gXCJzw6FuZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcInRyxrBhXCIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgaG91ciA+PSAxMiA/IE1lcmlkaWVtLlBNIDogTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcImNoaeG7gXVcIiB8fCBtZXJpZGllbSA9PT0gXCJ04buRaVwiIHx8IG1lcmlkaWVtID09PSBcIsSRw6ptXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCJcXFxcc3swLDV9KD86dHJcXHUwMWIwXFx1MWVkYmN8cXVhKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzpzYXV8blxcdTFlZWZhfHRcXHUxZWRiaXx0aVxcdTFlYmZwKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzp0cm9uZ1xcXFxzKig/OnZcXHUwMGYybmdcXFxccyopPylcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSwgTlVNQkVSX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IENBU1VBTF9VTklUX1BBVFRFUk4gPSBcIig/OlwiICsgTlVNQkVSX1BBVFRFUk4gKyBcIlxcXFxzezAsNX0pPyg/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKSArIFwiKVwiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIobsOgeXx0csaw4bubY3xxdWF8c2F1fHThu5tpfHRp4bq/cClcXFxccyooXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVwiICtcbiAgICBcInwoXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVxcXFxzKihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVwiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAobWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFRleHQgPSAobWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbih1bml0VGV4dCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkdXJhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFRleHRdO1xuICAgICAgICAgICAgaWYgKCF1bml0KVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7IFt1bml0XTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PT0gXCJ0csaw4bubY1wiIHx8IG1vZGlmaWVyID09PSBcInF1YVwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzrigJN8LXzEkeG6v258dOG7m2l8dsOgKVxccyokLztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OmzDumN8dsOgb3wsfFR8LSk/XFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVN0YW5kYXJkUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTW9udGhZZWFyUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSVllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBWSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVklNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBWSVN0YW5kYXJkUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklNb250aFllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGVuIGZyb20gXCIuL2xvY2FsZXMvZW4vaW5kZXguanNcIjtcbmltcG9ydCB7IENocm9ubywgUGFyc2luZ0NvbnRleHQgfSBmcm9tIFwiLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgeyBlbiwgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCwgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmltcG9ydCAqIGFzIGRlIGZyb20gXCIuL2xvY2FsZXMvZGUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZyIGZyb20gXCIuL2xvY2FsZXMvZnIvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGphIGZyb20gXCIuL2xvY2FsZXMvamEvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHB0IGZyb20gXCIuL2xvY2FsZXMvcHQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIG5sIGZyb20gXCIuL2xvY2FsZXMvbmwvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHpoIGZyb20gXCIuL2xvY2FsZXMvemgvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHJ1IGZyb20gXCIuL2xvY2FsZXMvcnUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGVzIGZyb20gXCIuL2xvY2FsZXMvZXMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHVrIGZyb20gXCIuL2xvY2FsZXMvdWsvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGl0IGZyb20gXCIuL2xvY2FsZXMvaXQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHN2IGZyb20gXCIuL2xvY2FsZXMvc3YvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZpIGZyb20gXCIuL2xvY2FsZXMvZmkvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHZpIGZyb20gXCIuL2xvY2FsZXMvdmkvaW5kZXguanNcIjtcbmV4cG9ydCB7IGRlLCBmciwgamEsIHB0LCBubCwgemgsIHJ1LCBlcywgdWssIGl0LCBzdiwgZmksIHZpIH07XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gZW4uc3RyaWN0O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IGVuLmNhc3VhbDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogRm9ybWF0ZSB1bmUgZW50csOpZSBkZSBsb2cgYXZlYyB0aW1lc3RhbXBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TG9nRW50cnkobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBcbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dIFske2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9IHwgQ29udGV4dDogJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gO1xuICB9XG4gIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIFN5c3TDqG1lIGRlIGxvZ2dpbmcgc3RydWN0dXLDqVxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBkZWJ1ZyAocG91ciBsZSBkw6l2ZWxvcHBlbWVudClcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnZGVidWcnLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgaW5mbyAoaW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2luZm8nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgd2FybiAoYXZlcnRpc3NlbWVudHMpXG4gICAqL1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnd2FybicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUud2Fybihmb3JtYXR0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGVycm9yIChlcnJldXJzKVxuICAgKi9cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdlcnJvcicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkKTtcbiAgfSxcbn07XG5cbiIsIi8vIENIQU5HRU1FTlQgSUNJIDogT24gdXRpbGlzZSBcImltcG9ydCAqIGFzIGNocm9ub1wiIGNhciBsYSB2ZXJzaW9uIDIueCBuJ2EgcGx1cyBkJ2V4cG9ydCBwYXIgZMOpZmF1dFxuaW1wb3J0ICogYXMgY2hyb25vIGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzZXIsIFBhcnNpbmdDb250ZXh0LCBSZWZpbmVyIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLCBkZXNjcmliZUVycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiBtYXRjaGluZyBjaHJvbm8tbm9kZSdzIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4vLyBDb25maWd1cmF0aW9uIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBtYWluIG1vZHVsZSwgc28gd2UgZGVmaW5lIGl0IGxvY2FsbHlcbmludGVyZmFjZSBDaHJvbm9Db25maWd1cmF0aW9uIHtcbiAgcGFyc2VyczogUGFyc2VyW107XG4gIHJlZmluZXJzOiBSZWZpbmVyW107XG59XG5cbmZ1bmN0aW9uIGdldE9yZGluYWxEYXRlUGFyc2VyKCkge1xuICByZXR1cm4gKHtcbiAgICBwYXR0ZXJuOiAoKSA9PiBuZXcgUmVnRXhwKE9SRElOQUxfTlVNQkVSX1BBVFRFUk4pLFxuICAgIGV4dHJhY3Q6IChjb250ZXh0OiBQYXJzaW5nQ29udGV4dCwgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFswXSksXG4gICAgICAgIC8vIG1vbWVudCguLi4pLm1vbnRoKCkgaXMgMC1pbmRleGVkIChKYW49MCksIGJ1dCBjaHJvbm8tbm9kZSdzXG4gICAgICAgIC8vIFBhcnNpbmdDb21wb25lbnRzLm1vbnRoIGlzIDEtaW5kZXhlZCAoSmFuPTEpIC0tIHZlcmlmaWVkIGFnYWluc3RcbiAgICAgICAgLy8gY2hyb25vLW5vZGUncyBvd24gbG9jYWxlIGNvbnN0YW50cy4gV2l0aG91dCB0aGUgKzEgdGhpcyBhbHdheXNcbiAgICAgICAgLy8gcmVzb2x2ZWQgdG8gdGhlIHdyb25nIG1vbnRoIChhbmQsIHZpYSBmb3J3YXJkRGF0ZSwgc29tZXRpbWVzIHRoZVxuICAgICAgICAvLyB3cm9uZyB5ZWFyIHRvbykuXG4gICAgICAgIC8vIE11c3QgdXNlIGNvbnRleHQucmVmRGF0ZSAodGhlIGRhdGUgY2hyb25vIHdhcyBhc2tlZCB0byBwYXJzZVxuICAgICAgICAvLyByZWxhdGl2ZSB0byksIG5vdCBtb21lbnQoKSAodGhlIHJlYWwgY3VycmVudCB3YWxsLWNsb2NrIHRpbWUpOlxuICAgICAgICAvLyBjYWxsZXJzIGNhbiBhbmQgZG8gcGFzcyBhbiBleHBsaWNpdCByZWZlcmVuY2UgZGF0ZSwgZS5nLiB0ZXN0cywgb3JcbiAgICAgICAgLy8gZ2V0UGFyc2VkRGF0ZVJlc3VsdCgpJ3MgY2FsbGVycyBpbiBwYXJzZXIudHMuXG4gICAgICAgIG1vbnRoOiBtb21lbnQoY29udGV4dC5yZWZEYXRlKS5tb250aCgpICsgMSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSBhcyBQYXJzZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDaHJvbm9zKGxhbmd1YWdlczogc3RyaW5nW10pOiBDaHJvbm9bXSB7XG4gIGNvbnN0IGxvY2FsZSA9IG1vbWVudC5sb2NhbGUoKTtcbiAgY29uc3QgaXNHQiA9IGxvY2FsZSA9PT0gJ2VuLWdiJztcblxuICBjb25zdCBjaHJvbm9zOiBDaHJvbm9bXSA9IFtdO1xuICBjb25zdCBvcmRpbmFsRGF0ZVBhcnNlciA9IGdldE9yZGluYWxEYXRlUGFyc2VyKCk7XG4gIC8vIEJ1aWxkcyBhIENocm9ubyBpbnN0YW5jZSBmb3IgYSBsb2NhbGUgbW9kdWxlLCBzdXBwb3J0aW5nIGJvdGggY2hyb25vLW5vZGVcbiAgLy8gQVBJIHNoYXBlczogb2xkZXIgbG9jYWxlcyBzdGlsbCBleHBvc2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKSxcbiAgLy8gYnV0IGFzIG9mIGNocm9uby1ub2RlIDIueCB0aGUgXCJlblwiIGxvY2FsZSBpbnN0ZWFkIGV4cG9ydHMgcHJlLWJ1aWx0XG4gIC8vIENocm9ubyBpbnN0YW5jZXMgKGNhc3VhbC9HQi9zdHJpY3QpIHdpdGggbm8gY29uZmlnIGZhY3RvcnkgYXQgYWxsLiBBXG4gIC8vIGxvY2FsZSBtaXNzaW5nIGJvdGggd291bGQgcHJldmlvdXNseSBiZSBzaWxlbnRseSB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkXG4gIC8vIChsb2dnZWQgYXQgXCJ3YXJuXCIgb25seSkgYW5kIGV2ZXJ5IG1hdGNoIGZvciB0aGF0IGxhbmd1YWdlIHdvdWxkIGZhbGxcbiAgLy8gdGhyb3VnaCB0byB0b2RheS9ub3cgd2l0aCBubyB2aXNpYmxlIGVycm9yIC0tIHRoaXMgaGFwcGVuZWQgZm9yIEVuZ2xpc2hcbiAgLy8gc3BlY2lmaWNhbGx5LCBmb3IgZXZlcnkgdXNlciB3aG8gZW5hYmxlZCBpdCwgc2luY2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvblxuICAvLyBpcyBleGFjdGx5IHdoYXQgZGlzYXBwZWFyZWQgZnJvbSB0aGF0IG1vZHVsZS5cbiAgY29uc3QgYnVpbGRDaHJvbm9Gb3JNb2R1bGUgPSAobGFuZ01vZHVsZToge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgR0I/OiBDaHJvbm87XG4gIH0gfCB1bmRlZmluZWQpOiBDaHJvbm8gfCBudWxsID0+IHtcbiAgICBpZiAoIWxhbmdNb2R1bGUpIHJldHVybiBudWxsO1xuICAgIGlmIChsYW5nTW9kdWxlLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKTtcbiAgICAgIC8vIENocm9ubyBjb25zdHJ1Y3RvciBhY2NlcHRzIENvbmZpZ3VyYXRpb24gdHlwZSAtIGNhc3QgbmVlZGVkIGJlY2F1c2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbiByZXR1cm5zIHVua25vd25cbiAgICAgIHJldHVybiBuZXcgQ2hyb25vKGNvbmZpZyBhcyBDaHJvbm9Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGxhbmdNb2R1bGUuY2FzdWFsKSB7XG4gICAgICAvLyBDbG9uZSBzbyB3ZSBkb24ndCBtdXRhdGUgY2hyb25vLW5vZGUncyBzaGFyZWQgc2luZ2xldG9uIGluc3RhbmNlXG4gICAgICAvLyAobXVsdGlwbGUgTkxEUGFyc2VyIGluc3RhbmNlcyB3b3VsZCBvdGhlcndpc2UgYWxsIHB1c2ggdGhlaXIgb3duXG4gICAgICAvLyBvcmRpbmFsRGF0ZVBhcnNlciBvbnRvIHRoZSBzYW1lIHNoYXJlZCBvYmplY3QpLlxuICAgICAgY29uc3QgYmFzZSA9IChpc0dCICYmIGxhbmdNb2R1bGUuR0IpID8gbGFuZ01vZHVsZS5HQiA6IGxhbmdNb2R1bGUuY2FzdWFsO1xuICAgICAgcmV0dXJuIGJhc2UuY2xvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE9uIGFjY8OoZGUgYXV4IGxhbmd1ZXMgZHluYW1pcXVlbWVudCB2aWEgUmVjb3JkXG4gICAgICBjb25zdCBsYW5nTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbF0gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGxhbmdNb2R1bGUpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBMYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNocm9uby1ub2RlYCwgeyBsYW5ndWFnZTogbCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYy5wYXJzZXJzLnB1c2gob3JkaW5hbERhdGVQYXJzZXIpO1xuICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ2hyb25vIGluaXRpYWxpemVkIGZvciBsYW5ndWFnZVwiLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGNocm9ubyBmb3IgbGFuZ3VhZ2VgLCB7XG4gICAgICAgIGxhbmd1YWdlOiBsLFxuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNpIGF1Y3VuZSBsYW5ndWUgbidhIHB1IMOqdHJlIGluaXRpYWxpc8OpZSwgdXRpbGlzZXIgbCdhbmdsYWlzIHBhciBkw6lmYXV0XG4gIGlmIChjaHJvbm9zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBsYW5ndWFnZXMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbk1vZHVsZSA9IChjaHJvbm8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVuIGFzIHtcbiAgICAgICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgICAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgICAgIEdCPzogQ2hyb25vO1xuICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGMgPSBidWlsZENocm9ub0Zvck1vZHVsZShlbk1vZHVsZSk7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICAgIGNocm9ub3MucHVzaChjKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgRW5nbGlzaCBjaHJvbm8gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0VuZ2xpc2ggY2hyb25vIG1vZHVsZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBFbmdsaXNoIGNocm9ubycsIHtcbiAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNocm9ub3M7XG59IiwiaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBwb3VyIGxlcyBkw6lwZW5kYW5jZXMgbsOpY2Vzc2FpcmVzIMOgIGxhIGTDqXRlY3Rpb24gZCdoZXVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVEZXRlY3RvckRlcGVuZGVuY2llcyB7XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIGNocm9ub3M6IENocm9ub1tdO1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDtcbn1cblxuLyoqXG4gKiBDbGFzc2UgcG91ciBkw6l0ZWN0ZXIgc2kgdW4gdGV4dGUgY29udGllbnQgdW5lIGNvbXBvc2FudGUgZCdoZXVyZVxuICovXG5leHBvcnQgY2xhc3MgVGltZURldGVjdG9yIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGNocm9ub3M6IENocm9ub1tdO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFJlbGF0aXZlQ29tYmluZWQ6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY2llczogVGltZURldGVjdG9yRGVwZW5kZW5jaWVzKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBkZXBlbmRlbmNpZXMubGFuZ3VhZ2VzO1xuICAgIHRoaXMuY2hyb25vcyA9IGRlcGVuZGVuY2llcy5jaHJvbm9zO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IGRlcGVuZGVuY2llcy5yZWdleFJlbGF0aXZlO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZDtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXk7XG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXlXaXRoVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWw6lyaWZpZSBzaSBsZSB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIDEuIElmIGl0J3MgXCJub3dcIiBpbiBhbnkgbGFuZ3VhZ2UsIFlFUy5cbiAgICAvLyBUcmFuc2xhdGlvbnMgY2FuIGxpc3Qgc2V2ZXJhbCB2YXJpYW50cyBwaXBlLXNlcGFyYXRlZCAoZS5nLiBJdGFsaWFuXG4gICAgLy8gXCJhZGVzc298b3JhXCIsIENoaW5lc2UgXCLnj77lnKh8546w5ZyoXCIpOyBzcGxpdCBlYWNoIGxhbmd1YWdlJ3MgXCJub3dcIiBlbnRyeVxuICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIG1hdGNoIGluZGl2aWR1YWwgaW1tZWRpYXRlS2V5d29yZHNcbiAgICAvLyBlbnRyaWVzIChhbHJlYWR5IHNwbGl0LCBmb3IgYWxsIG9mIG5vdy90b2RheS90b21vcnJvdy95ZXN0ZXJkYXlcbiAgICAvLyBjb21iaW5lZCkgYWdhaW5zdCB0aGUgcmF3LCB1bnNwbGl0IHRyYW5zbGF0aW9uIHN0cmluZywgd2hpY2ggY291bGRcbiAgICAvLyBuZXZlciBlcXVhbCBhIHNpbmdsZSBhbHJlYWR5LXNwbGl0IHZhcmlhbnQuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLmxhbmd1YWdlcy5mbGF0TWFwKGxhbmcgPT5cbiAgICAgIHQoJ25vdycsIGxhbmcpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdylcbiAgICApO1xuICAgIC8vIEV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGFnYWluc3QgdGhlIHdob2xlIHN0cmluZyAtLSBubyBuZWVkIHRvXG4gICAgLy8gY29tcGlsZSBhIFJlZ0V4cCBwZXIgd29yZCBwZXIgY2FsbCBmb3IgdGhhdCwgYSBwbGFpbiBsb3dlcmNhc2UgK1xuICAgIC8vIGluY2x1ZGVzKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBtb3JlIHNpbXBseSBhbmQgbW9yZSBjaGVhcGx5LlxuICAgIGlmIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMi4gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gWCB3ZWVrcyBhbmQgWSBkYXlzXCJcbiAgICBjb25zdCByZWxDb21iaW5lZE1hdGNoID0gdGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCk7XG4gICAgaWYgKHJlbENvbWJpbmVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIyID0gcmVsQ29tYmluZWRNYXRjaFs0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIHVuaXRzIGlzIGhvdXJzIG9yIG1pbnV0ZXMgLT4gWUVTXG4gICAgICAgIGlmICh1bml0U3RyMS5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjEgPT09ICdtJyB8fCB1bml0U3RyMS5zdGFydHNXaXRoKCdtaW4nKSB8fFxuICAgICAgICAgICAgdW5pdFN0cjIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIyID09PSAnbScgfHwgdW5pdFN0cjIuc3RhcnRzV2l0aCgnbWluJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSAtPiBOTyAoZGF5cywgd2Vla3MsIG1vbnRocywgeWVhcnMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBpdCdzIGEgc2ltcGxlIGRlbGF5IGluIEhPVVJTIG9yIE1JTlVURVMgLT4gWUVTXG4gICAgY29uc3QgcmVsTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBtLCBtaW4sIG1pbnV0ZXMsIGgsIGhvdXJzLi4uXG4gICAgICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF5cywgbW9udGhzLCB5ZWFycyAtPiBOT1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRoIHRpbWUgKE5leHQgTW9uZGF5IGF0IDNwbSkgLT4gWUVTXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgJiYgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gNS4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRob3V0IHRpbWUgKE5leHQgTW9uZGF5KSBvciBUb21vcnJvdyAtPiBOTyAoR2VuZXJhbGx5IHdlIGp1c3Qgd2FudCB0aGUgZGF0ZSlcbiAgICAvLyBJZiB5b3Ugd2FudCB0aW1lIGZvciBcIlRvbW9ycm93XCIsIHJlbW92ZSB0aGUgbGluZXMgYmVsb3cuXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5IGtleXdvcmRzIGluIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXRlS2V5d29yZHMgPSBbJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddO1xuICAgIGNvbnN0IGRhdGVXb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkYXRlS2V5d29yZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAvLyB0KCkgYWx3YXlzIGZhbGxzIGJhY2sgdG8gRW5nbGlzaCAobGFuZy9oZWxwZXIudHMpLCBhbmQgZW4udHNcbiAgICAgICAgLy8gYWx3YXlzIGRlZmluZXMgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCBzbyB0aGlzIGd1YXJkIGNhbid0XG4gICAgICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIGZvciB0aGVzZSB0aHJlZSBrZXlzIC0tIGtlcHQgZm9yIHNhZmV0eSBpbiBjYXNlXG4gICAgICAgIC8vIHRoYXQgaW52YXJpYW50IGV2ZXIgY2hhbmdlcy5cbiAgICAgICAgY29uc3Qgd29yZCA9IHQoa2V5LCBsYW5nKTtcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgICAgZGF0ZVdvcmRzLnB1c2god29yZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVdvcmRzLnNvbWUodyA9PiBuZXcgUmVnRXhwKGBeJHt3LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9JGAsICdpJykudGVzdCh0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGFzayB0aGUgbGlicmFyeSBpZiBpdCBzZWVzIGFuIGV4cGxpY2l0IHRpbWUgKGV4OiBcIlRvbW9ycm93IGF0IDVwbVwiKVxuICAgIGlmICghdGhpcy5jaHJvbm9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWRSZXN1bHQgJiYgcGFyc2VkUmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlZFJlc3VsdFswXS5zdGFydDtcbiAgICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIikgfHwgc3RhcnQuaXNDZXJ0YWluKFwibWludXRlXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4iLCIvKipcbiAqIEltcGzDqW1lbnRhdGlvbiBkJ3VuIGNhY2hlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gKiBVdGlsaXPDqSBwb3VyIGxpbWl0ZXIgbGEgbcOpbW9pcmUgdXRpbGlzw6llIHBhciBsZXMgY2FjaGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNhY2hlOiBNYXA8SywgVj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTFJVIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICogXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIChkZWZhdWx0OiA1MDApXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXhTaXplID0gNTAwKSB7XG4gICAgaWYgKG1heFNpemUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTFJVIENhY2hlIG1heFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIFbDqXJpZmllIHNpIHVuZSBjbMOpIGV4aXN0ZSBkYW5zIGxlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW50IHVuZSB2YWxldXIgZHUgY2FjaGUgZXQgbGEgbWFycXVlIGNvbW1lIHLDqWNlbW1lbnQgdXRpbGlzw6llXG4gICAqIEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBieSBrZXlcbiAgICogSWYgdGhlIGtleSBleGlzdHMsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRMOpcGxhY2VyIGxhIGNsw6kgw6AgbGEgZmluIChtb3N0IHJlY2VudGx5IHVzZWQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBam91dGUgb3UgbWV0IMOgIGpvdXIgdW5lIHZhbGV1ciBkYW5zIGxlIGNhY2hlXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgY2FjaGVcbiAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZFxuICAgKiBTaSBsYSB0YWlsbGUgbWF4aW1hbGUgZXN0IGF0dGVpbnRlLCBzdXBwcmltZSBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldFxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmVcbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gU2kgbGEgY2zDqSBleGlzdGUgZMOpasOgLCBsYSBzdXBwcmltZXIgZCdhYm9yZCBwb3VyIGxhIGTDqXBsYWNlciDDoCBsYSBmaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWUgKHByZW1pw6hyZSBlbnRyw6llKVxuICAgICAgLy8gTWFwIGl0ZXJhdG9yJ3MgSXRlcmF0b3JSZXN1bHQudmFsdWUgdHlwZSBkZWZhdWx0cyB0byBcIlQgfCBhbnlcIiAodGhlXG4gICAgICAvLyByZXR1cm4tcG9zaXRpb24gdHlwZSBwYXJhbSBkZWZhdWx0cyB0byBhbnkpLCB3aGljaCBUUyBjb2xsYXBzZXMgdG9cbiAgICAgIC8vIGFueSAtLSBjYXN0IGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4ganVzdCBhbm5vdGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIEsgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFqb3V0ZXIgbGEgbm91dmVsbGUgZW50csOpZSDDoCBsYSBmaW5cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgZW50csOpZSBkdSBjYWNoZVxuICAgKiBEZWxldGVzIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRlbGV0ZShrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWRlIGNvbXBsw6h0ZW1lbnQgbGUgY2FjaGVcbiAgICogQ2xlYXJzIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIGFjdHVlbGxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIG1heGltYWxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSBsaW1pdCBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzdG9yZWRcbiAgICovXG4gIGdldCBtYXhTaXplTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgZW50csOpZXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuICAgKiBVdGlsZSBwb3VyIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZVxuICAgKiBVc2VmdWwgZm9yIHBlcmlvZGljIGNsZWFudXBcbiAgICogXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgW2tleSwgdmFsdWVdIHBhaXJzXG4gICAqL1xuICBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgY2zDqXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrZXlzIGluIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBrZXlzXG4gICAqL1xuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Sz4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmtleXMoKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBDaHJvbm8sIFBhcnNlZFJlc3VsdCwgUGFyc2luZ09wdGlvbiB9IGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IGdldENocm9ub3MgZnJvbSBcIi4vY2hyb25vXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRpbWVEZXRlY3RvciB9IGZyb20gXCIuL3RpbWUtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQge1xuICBnZXRMb2NhbGVXZWVrU3RhcnQsXG4gIGdldFdlZWtOdW1iZXIsXG4gIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sXG4gIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gIGRlc2NyaWJlRXJyb3IsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cblxuLy8gVHlwZSBhbGlhcyBmb3IgTW9tZW50IGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVXNpbmcgdGhlIHR5cGUgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgdHlwZXMgc2luY2UgbW9tZW50IGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVGhlIG1vbWVudCBwYWNrYWdlIGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbiwgYnV0IHRoZSBNb21lbnQgdHlwZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSBvYnNpZGlhbiBtb2R1bGVcbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxudHlwZSBUaW1lVW5pdCA9ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnd2Vla3MnIHwgJ21vbnRocycgfCAneWVhcnMnO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgcGFyc2VkIGRhdGUgaW4gbXVsdGlwbGUgZm9ybWF0cyBmb3IgY29udmVuaWVuY2UuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRlKTsgLy8gRGF0ZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5tb21lbnQuZm9ybWF0KFwiZGRkZFwiKSk7IC8vIFwiTW9uZGF5XCJcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJlc3VsdCB7XG4gIC8qKiBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0ICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogTmF0aXZlIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QgKi9cbiAgZGF0ZTogRGF0ZTtcbiAgLyoqIE1vbWVudC5qcyBvYmplY3QgZm9yIGFkdmFuY2VkIGRhdGUgbWFuaXB1bGF0aW9uICovXG4gIG1vbWVudDogTW9tZW50O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSByYW5nZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiBhIHBhcnNlZCByYW5nZSwgcGx1cyBhIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpO1xuICogaWYgKHJhbmdlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJhbmdlLnN0YXJ0RGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBNb25kYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBGcmlkYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJhbmdlUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCByYW5nZSBzdHJpbmcgKGUuZy4sIFwiMjAyNS0wMS0wNiB0byAyMDI1LTAxLTEwXCIpICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogU3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuICAvKiogRW5kIGRhdGUgb2YgdGhlIHJhbmdlIGFzIGEgbmF0aXZlIERhdGUgb2JqZWN0ICovXG4gIGVuZERhdGU6IERhdGU7XG4gIC8qKiBTdGFydCBkYXRlIGFzIGEgTW9tZW50LmpzIG9iamVjdCAqL1xuICBzdGFydE1vbWVudDogTW9tZW50O1xuICAvKiogRW5kIGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIGVuZE1vbWVudDogTW9tZW50O1xuICAvKiogQWx3YXlzIHRydWUgZm9yIHJhbmdlIHJlc3VsdHMgKi9cbiAgaXNSYW5nZTogdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZSBhcyBNb21lbnQgb2JqZWN0cyAqL1xuICBkYXRlTGlzdD86IE1vbWVudFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTERQYXJzZXIge1xuICBjaHJvbm9zOiBDaHJvbm9bXTtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgXG4gIC8vIER5bmFtaWMgcmVnZXggZ2VuZXJhdGVkIGZyb20gdHJhbnNsYXRpb25zXG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7IC8vIEZvciBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwOyAvLyBGb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICByZWdleFdlZWtkYXlPbmx5OiBSZWdFeHA7IC8vIEZvciBcIndlZG5lc2RheVwiICh3aXRob3V0IHByZWZpeClcbiAgcmVnZXhEYXRlUmFuZ2U6IFJlZ0V4cDsgLy8gRm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgcmVnZXhPcmRpbmFsT2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCJcbiAgcmVnZXhMYXN0RGF5T2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJsYXN0IGRheSBvZiBtb250aFwiXG4gIHJlZ2V4V2Vla2RheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgLy8gRm9yIHN1ZmZpeCBsYW5ndWFnZXMgdGhhdCBwdXQgdGhlIHF1YW50aWZpZXIvdW5pdCBiZWZvcmUgdGhlIFwibGF0ZXJcIiBtYXJrZXJcbiAgLy8gaW5zdGVhZCBvZiBhbiBcImluXCIgcHJlZml4IChlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIiA9IFwibGF0ZXJcIikuXG4gIHJlZ2V4UmVsYXRpdmVTdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeDogUmVnRXhwIHwgbnVsbDsgLy8gRm9yIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAvLyBNaXJyb3Igb2YgcmVnZXhSZWxhdGl2ZVN1ZmZpeCBmb3IgdGhlIFBBU1QgZGlyZWN0aW9uIChlLmcuIFBvcnR1Z3Vlc2VcbiAgLy8gXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLlxuICByZWdleEFnb1N1ZmZpeDogUmVnRXhwIHwgbnVsbDtcbiAgXG4gIC8vIEtleXdvcmRzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gIGltbWVkaWF0ZUtleXdvcmRzOiBTZXQ8c3RyaW5nPjtcbiAgcHJlZml4S2V5d29yZHM6IHsgdGhpczogU2V0PHN0cmluZz47IG5leHQ6IFNldDxzdHJpbmc+OyBsYXN0OiBTZXQ8c3RyaW5nPiB9O1xuICB0aW1lVW5pdE1hcDogTWFwPHN0cmluZywgVGltZVVuaXQ+O1xuICBcbiAgLy8gQ2FjaGUgZm9yIHBhcnNlZCBkYXRlcyAoTFJVIGF2ZWMgbGltaXRlIGRlIDUwMCBlbnRyw6llcylcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBEYXRlPjtcbiAgcHJpdmF0ZSBjYWNoZURheTogbnVtYmVyOyAvLyBEYXkgb2YgeWVhciBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIFxuICAvLyBDb2xsZWN0cy9jYWNoZXMgdHJhbnNsYXRpb25zIGFjcm9zcyBhbGwgYWN0aXZlIGxhbmd1YWdlcyBhbmQgYnVpbGRzXG4gIC8vIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0gKHNlZSB0cmFuc2xhdGlvbi1jb2xsZWN0b3IudHMpXG4gIHByaXZhdGUgdGM6IFRyYW5zbGF0aW9uQ29sbGVjdG9yO1xuXG4gIC8vIFRpbWUgZGV0ZWN0b3JcbiAgcHJpdmF0ZSB0aW1lRGV0ZWN0b3I6IFRpbWVEZXRlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZ2V0Q2hyb25vcyhsYW5ndWFnZXMpO1xuICAgIHRoaXMudGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcbiAgICB0aGlzLmluaXRpYWxpemVSZWdleCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUtleXdvcmRzKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERhdGU+KHRoaXMuTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuY2FjaGVEYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBkZXRlY3RvclxuICAgIHRoaXMudGltZURldGVjdG9yID0gbmV3IFRpbWVEZXRlY3Rvcih7XG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgY2hyb25vczogdGhpcy5jaHJvbm9zLFxuICAgICAgcmVnZXhSZWxhdGl2ZTogdGhpcy5yZWdleFJlbGF0aXZlLFxuICAgICAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCxcbiAgICAgIHJlZ2V4V2Vla2RheTogdGhpcy5yZWdleFdlZWtkYXksXG4gICAgICByZWdleFdlZWtkYXlXaXRoVGltZTogdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGR5bmFtaWMgcmVnZXggZnJvbSB0cmFuc2xhdGlvbnNcbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVnZXgoKTogdm9pZCB7XG4gICAgY29uc3QgaW5Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiaW5cIik7XG4gICAgY29uc3QgbmV4dFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJuZXh0XCIpO1xuICAgIGNvbnN0IGxhc3RXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiKTtcbiAgICBjb25zdCB0aGlzV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIik7XG4gICAgY29uc3QgYW5kV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImFuZFwiKTtcbiAgICBjb25zdCBhdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJhdFwiKTtcbiAgICBjb25zdCBmcm9tV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZyb21cIik7XG4gICAgY29uc3QgdG9Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidG9cIik7XG5cbiAgICAvLyBDb2xsZWN0IHdlZWtkYXlzIChsb3dlcmNhc2VkKSBhY3Jvc3MgYWxsIGxhbmd1YWdlcywgcGx1cyB0aGUgY29tbW9uXG4gICAgLy8gRW5nbGlzaCBhYmJyZXZpYXRpb25zIChtb24vdHVlLy4uLikgd2hpY2ggYXJlbid0IHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkuXG4gICAgY29uc3Qgd2Vla2RheUtleXMgPSBbJ3N1bmRheScsICdtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5J107XG4gICAgY29uc3Qgd2Vla2RheXMgPSB3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXksIHsgbG93ZXJjYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAodGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoJ2VuJykpIHtcbiAgICAgIHdlZWtkYXlzLnB1c2goJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0JywgJ3N1bicpO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGltZSB1bml0cyAobWludXRlL2hvdXIvZGF5L3dlZWsvbW9udGgveWVhcikgYWNyb3NzIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdHMgPSB0aW1lVW5pdEtleXMuZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG5cbiAgICBjb25zdCBpblBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oaW5Xb3Jkcyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGhpc1dvcmRzLCAuLi5uZXh0V29yZHMsIC4uLmxhc3RXb3Jkc10pO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKHdlZWtkYXlzKTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRzKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFdvcmRzKTtcbiAgICBjb25zdCBhdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYXRXb3Jkcyk7XG4gICAgY29uc3QgZnJvbVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oZnJvbVdvcmRzKTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odG9Xb3Jkcyk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwiaW4gMiBtaW51dGVzXCJcbiAgICB0aGlzLnJlZ2V4UmVsYXRpdmUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtpblBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccysoPzoke2FuZFBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwibmV4dCBNb25kYXlcIlxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIGJldHdlZW4gcHJlZml4IGFuZCB3ZWVrZGF5IHNvIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlc1xuICAgIC8vIGJldHdlZW4gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn+S4gFwiKSBzdGlsbCBtYXRjaC5cbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIiAtIGNhcHR1cmVzIGRheSBhbmQgdGltZVxuICAgIHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHthdFBhdHRlcm59KVxcXFxzKyguKykkYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3Igc2ltcGxlIHdlZWtkYXkgd2l0aG91dCBwcmVmaXggKGUuZy4sIFwid2VkbmVzZGF5XCIsIFwiZnJpZGF5XCIpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPbmx5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC0gY2FwdHVyZXMgdHdvIHdlZWtkYXlzXG4gICAgdGhpcy5yZWdleERhdGVSYW5nZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7ZnJvbVBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyooPzoke3RvUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIGNvbnN0IG9mUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcIm9mXCIpO1xuICAgIGNvbnN0IGZpcnN0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImZpcnN0XCIpO1xuXG4gICAgLy8gUmVnZXggZm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiIG9yIFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIFwidGhlXCIvXCJsZVwiL1wiZGVyXCIpIChvcmRpbmFsIG51bWJlciBsaWtlIFwiMTV0aFwiLCBcIjE1w6htZVwiLCBcIjE1LlwiKSBcIm9mXCIvXCJkdVwiL1wiZGVzXCIgKG5leHQvbGFzdC90aGlzKSAobW9udGgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEZyZW5jaCBpbnZlcnNpb246IFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIEFsc28gaGFuZGxlcyBHZXJtYW46IFwiZGVyIDE1LiBkZXMgbsOkY2hzdGVuIE1vbmF0c1wiIChwcmVmaXggYmV0d2VlbiBcIm9mXCIgYW5kIG1vbnRoKVxuICAgIC8vIFVzaW5nIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gZnJvbSB1dGlscy50cyBmb3Igb3JkaW5hbCBtYXRjaGluZ1xuICAgIHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OnRoZXxsZXxkZXJ8ZGFzfGVsfGlsfG98ZGV8aGV0KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIiBvciBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgICBjb25zdCBkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZGF5XCIpO1xuXG4gICAgLy8gTWFrZSBwcmVmaXggb3B0aW9uYWwgLSBcImxhc3QgZGF5IG9mIG1vbnRoXCIgd2l0aG91dCBwcmVmaXggbWVhbnMgXCJ0aGlzIG1vbnRoXCJcbiAgICAvLyBcImxhc3RcIiBoZXJlIGlzIGFuIGFkamVjdGl2ZSBtb2RpZnlpbmcgXCJkYXlcIiwgbm90IGEgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gQWxzbyBoYW5kbGUgRnJlbmNoIGludmVyc2lvbjogXCJkZXJuaWVyIGpvdXIgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIFBhdHRlcm46IChvcHRpb25hbCBwcmVmaXgpIFwibGFzdFwiIChkYXkgd29yZCkgXCJvZlwiIChvcHRpb25hbCBwcmVmaXgpIChtb250aCkgKG9wdGlvbmFsIHByZWZpeCBhZnRlciBtb250aClcbiAgICAvLyBSZXVzZSBsYXN0V29yZHMgY29sbGVjdGVkIGFib3ZlIChsaW5lIDE0OC0xNTApXG4gICAgY29uc3QgbGFzdEFkamVjdGl2ZVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24obGFzdFdvcmRzKTtcbiAgICBcbiAgICB0aGlzLnJlZ2V4TGFzdERheU9mTW9udGggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke2xhc3RBZGplY3RpdmVQYXR0ZXJufSlcXFxccysoJHtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgb3IgXCJwcmVtaWVyIGx1bmRpIGR1IG1vaXNcIiBvciBcImxhc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcInByZW1pZXIgbHVuZGkgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke2ZpcnN0UGF0dGVybn18JHtwcmVmaXhQYXR0ZXJufSlcXFxccysoJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHtvZlBhdHRlcm59KVxcXFxzKyg/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7dGltZVVuaXRQYXR0ZXJufSkoPzpcXFxccysoJHtwcmVmaXhQYXR0ZXJufSkpP1xcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiwgSmFwYW5lc2UgXCIy5pel5b6MXCIpIHB1dFxuICAgIC8vIHRoZSBcImxhdGVyXCIgbWFya2VyIGFmdGVyIHRoZSBudW1iZXIgYW5kIHVuaXQgaW5zdGVhZCBvZiB1c2luZyBhbiBcImluXCJcbiAgICAvLyBwcmVmaXguIEVhY2ggbGFuZ3VhZ2UgY2FuIGxpc3QgaXRzIG1hcmtlcihzKSBleHBsaWNpdGx5IHVuZGVyIHRoZVxuICAgIC8vIFwibGF0ZXJcIiBrZXkgKGUuZy4gQ2hpbmVzZSBcIuW+jHzlkI5cIiBmb3IgYm90aCBzY3JpcHRzKTsgdGhpcyBrZXkgaXMgbmV2ZXJcbiAgICAvLyB1c2VkIGZvciBkaXNwbGF5L2ludGVycG9sYXRpb24sIG9ubHkgZm9yIHRoaXMgbWF0Y2hpbmcsIHNvIGl0J3Mgc2FmZSB0b1xuICAgIC8vIGxpc3QgbXVsdGlwbGUgc2NyaXB0IHZhcmlhbnRzIHdpdGggXCJ8XCIgdGhlIHNhbWUgd2F5IHdlZWtkYXkvcHJlZml4IHdvcmRzXG4gICAgLy8gZG8uIFRoZSBcImluZGF5c1wiIHRlbXBsYXRlIGl0c2VsZiBtdXN0IHN0YXkgYSBzaW5nbGUgZm9ybSBzaW5jZSBpdCdzXG4gICAgLy8gYWxzbyB1c2VkIHZlcmJhdGltIGluIGF1dG9zdWdnZXN0IGxhYmVscywgYW5kIHRlbXBsYXRlcyB3aXRoXG4gICAgLy8gJXt0aW1lRGVsdGF9IGRvbid0IGdldCBzcGxpdCBvbiBcInxcIiBsaWtlIHBsYWluIHdvcmQgbGlzdHMgZG8uXG4gICAgLy9cbiAgICAvLyBMYW5ndWFnZXMgdGhhdCBkb24ndCBkZWZpbmUgXCJsYXRlclwiIGZhbGwgYmFjayB0byBpbmZlcnJpbmcgdGhlIG1hcmtlclxuICAgIC8vIGZyb20gdGhlaXIgXCJpbmRheXNcIiB0ZW1wbGF0ZSAoZS5nLiBcIiV7dGltZURlbHRhfeWkqeW+jFwiIC0+IG1hcmtlciBcIuW+jFwiKSxcbiAgICAvLyBzbyB0aGlzIHN0aWxsIHdvcmtzIGZvciBhbnkgbGFuZ3VhZ2UgYXV0aG9yZWQgd2l0aG91dCB0aGUgZXh0cmEga2V5LlxuICAgIGNvbnN0IHN1ZmZpeE1hcmtlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGxhdGVyV29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdsYXRlcicsIGxhbmcpO1xuICAgICAgaWYgKGxhdGVyV29yZCAmJiBsYXRlcldvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgbGF0ZXJXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnaW5kYXlzJywgbGFuZyk7XG4gICAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlID09PSAnTk9URk9VTkQnIHx8IHRlbXBsYXRlLmluZGV4T2YoJyV7dGltZURlbHRhfScpICE9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtYWluZGVyID0gdGVtcGxhdGUuc2xpY2UoJyV7dGltZURlbHRhfScubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRheVdvcmQgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnZGF5JywgbGFuZyk7XG4gICAgICBpZiAoIWRheVdvcmQgfHwgZGF5V29yZCA9PT0gJ05PVEZPVU5EJykgY29udGludWU7XG4gICAgICBjb25zdCB1bml0VXNlZCA9IGRheVdvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykuZmluZCh2ID0+IHJlbWFpbmRlci5zdGFydHNXaXRoKHYpKTtcbiAgICAgIGlmICghdW5pdFVzZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbWFya2VyID0gcmVtYWluZGVyLnNsaWNlKHVuaXRVc2VkLmxlbmd0aCkudHJpbSgpO1xuICAgICAgaWYgKG1hcmtlcikgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBpZiAoc3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3Qgc3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHN1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7c3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHthbmRQYXR0ZXJufSlcXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPSBudWxsO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBQQVNUIGxhbmd1YWdlcyAoZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIlxuICAgIC8vICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLCB0aGUgcGFzdC1kaXJlY3Rpb24gbWlycm9yIG9mIHRoZSBcImxhdGVyXCIgbWVjaGFuaXNtXG4gICAgLy8gYWJvdmUuIFVubGlrZSBcImxhdGVyXCIsIHRoZXJlJ3Mgbm8gdGVtcGxhdGUgdG8gaW5mZXIgdGhpcyBtYXJrZXIgZnJvbVxuICAgIC8vICh0aGUgZGF5c2FnbyB0ZW1wbGF0ZSBhbHJlYWR5IGhhcyBpdHMgb3duICV7dGltZURlbHRhfS1wcmVmaXggZm9ybSwgXCJow6FcbiAgICAvLyAle3RpbWVEZWx0YX0gZGlhc1wiLCB3aGljaCBkb2Vzbid0IGltcGx5IGEgc3VmZml4IHZhcmlhbnQgYWxzbyBleGlzdHMpLFxuICAgIC8vIHNvIGxhbmd1YWdlcyBtdXN0IG9wdCBpbiBleHBsaWNpdGx5IHZpYSB0aGUgXCJhZ29zdWZmaXhcIiBrZXkuXG4gICAgY29uc3QgYWdvU3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYWdvU3VmZml4V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdhZ29zdWZmaXgnLCBsYW5nKTtcbiAgICAgIGlmIChhZ29TdWZmaXhXb3JkICYmIGFnb1N1ZmZpeFdvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgYWdvU3VmZml4V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KSkge1xuICAgICAgICAgIGFnb1N1ZmZpeE1hcmtlcnMuYWRkKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWdvU3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3QgYWdvU3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKGFnb1N1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2Fnb1N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGtleXdvcmRzIGZvciBmYXN0IGRldGVjdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVLZXl3b3JkcygpOiB2b2lkIHtcbiAgICB0aGlzLmltbWVkaWF0ZUtleXdvcmRzID0gbmV3IFNldChcbiAgICAgIFsnbm93JywgJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpXG4gICAgKTtcbiAgICB0aGlzLnByZWZpeEtleXdvcmRzID0ge1xuICAgICAgdGhpczogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbmV4dDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbGFzdDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImxhc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICAvLyBUaW1lIHVuaXRzIHdpdGggbWFwcGluZyB0byBNb21lbnQuanMgdW5pdHNcbiAgICBjb25zdCB1bml0TWFwcGluZ3M6IHsga2V5OiBzdHJpbmc7IG1vbWVudFVuaXQ6IFRpbWVVbml0IH1bXSA9IFtcbiAgICAgIHsga2V5OiAnbWludXRlJywgbW9tZW50VW5pdDogJ21pbnV0ZXMnIH0sXG4gICAgICB7IGtleTogJ2hvdXInLCBtb21lbnRVbml0OiAnaG91cnMnIH0sXG4gICAgICB7IGtleTogJ2RheScsIG1vbWVudFVuaXQ6ICdkYXlzJyB9LFxuICAgICAgeyBrZXk6ICd3ZWVrJywgbW9tZW50VW5pdDogJ3dlZWtzJyB9LFxuICAgICAgeyBrZXk6ICdtb250aCcsIG1vbWVudFVuaXQ6ICdtb250aHMnIH0sXG4gICAgICB7IGtleTogJ3llYXInLCBtb21lbnRVbml0OiAneWVhcnMnIH0sXG4gICAgXTtcbiAgICB0aGlzLnRpbWVVbml0TWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB1bml0TWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhtYXBwaW5nLmtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgdGhpcy50aW1lVW5pdE1hcC5zZXQod29yZCwgbWFwcGluZy5tb21lbnRVbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogREFZIE5BTUUg4oaSIE5VTUVSSUMgSU5ERVggQ09OVkVSU0lPTiAtLS1cbiAgLy8gQ29udmVydHMgZGF5IG5hbWVzIGZyb20gYWxsIGxhbmd1YWdlcyB0byBudW1lcmljIGluZGljZXMgKDAtNilcbiAgLy8gTW9tZW50LmpzIHVzZXM6IDA9U3VuZGF5LCAxPU1vbmRheSwgMj1UdWVzZGF5LCAzPVdlZG5lc2RheSwgND1UaHVyc2RheSwgNT1GcmlkYXksIDY9U2F0dXJkYXlcbiAgcHJpdmF0ZSBnZXREYXlPZldlZWtJbmRleChkYXlOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkYXlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBFbmdsaXNoIGRheSBuYW1lcy9hYmJyZXZpYXRpb25zLCBhbHdheXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgYWN0aXZlIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRheU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICdzdW5kYXknOiAwLCAnc3VuJzogMCxcbiAgICAgICdtb25kYXknOiAxLCAnbW9uJzogMSxcbiAgICAgICd0dWVzZGF5JzogMiwgJ3R1ZSc6IDIsICd0dWVzJzogMixcbiAgICAgICd3ZWRuZXNkYXknOiAzLCAnd2VkJzogMyxcbiAgICAgICd0aHVyc2RheSc6IDQsICd0aHUnOiA0LCAndGh1cic6IDQsICd0aHVycyc6IDQsXG4gICAgICAnZnJpZGF5JzogNSwgJ2ZyaSc6IDUsXG4gICAgICAnc2F0dXJkYXknOiA2LCAnc2F0JzogNixcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRheXMgZnJvbSBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGRheUtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICBkYXlNYXBbdmFyaWFudF0gPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRheU1hcFtub3JtYWxpemVkXSA/PyAwOyAvLyBEZWZhdWx0IHRvIFN1bmRheSBpZiBub3QgcmVjb2duaXplZFxuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFVUSUxJVElFUyAtLS1cbiAgLy8gR2V0IGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSBnZXREYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDApO1xuICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmYgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gc2VsZWN0ZWRUZXh0LCB3ZWVrU3RhcnRQcmVmZXJlbmNlLCBhbmQgY3VycmVudCBkYXlcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIC8vIEluY2x1ZGUgZGF5IGluIGtleSB0byBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgY2FjaGUgd2hlbiBkYXkgY2hhbmdlc1xuICAgIHJldHVybiBgJHtzZWxlY3RlZFRleHQudHJpbSgpfXwke3dlZWtTdGFydFByZWZlcmVuY2V9fCR7Y3VycmVudERheX1gO1xuICB9XG5cbiAgLy8gU3RvcmUgcmVzdWx0IGluIGNhY2hlIGFuZCByZXR1cm4gaXRcbiAgcHJpdmF0ZSBjYWNoZUFuZFJldHVybihjYWNoZUtleTogc3RyaW5nLCByZXN1bHQ6IERhdGUpOiBEYXRlIHtcbiAgICAvLyBDcsOpZXIgdW5lIG5vdXZlbGxlIGluc3RhbmNlIGRlIERhdGUgcG91ciDDqXZpdGVyIGxlcyByw6lmw6lyZW5jZXMgcGFydGFnw6llc1xuICAgIGNvbnN0IGNhY2hlZERhdGUgPSBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVkRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHJlc3VsdC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gLS0tIE1BSU4gRU5HSU5FIC0tLVxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzIGFuZCB2YXJpb3VzIGRhdGUgZXhwcmVzc2lvbnM6XG4gICAqIC0gSW1tZWRpYXRlIGRhdGVzOiBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJ5ZXN0ZXJkYXlcIiwgXCJub3dcIlxuICAgKiAtIFJlbGF0aXZlIGRhdGVzOiBcImluIDIgZGF5c1wiLCBcImluIDMgd2Vla3NcIiwgXCJpbiAxIG1vbnRoXCJcbiAgICogLSBDb21iaW5lZCBkdXJhdGlvbnM6IFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCJcbiAgICogLSBXZWVrZGF5czogXCJuZXh0IE1vbmRheVwiLCBcImxhc3QgRnJpZGF5XCIsIFwidGhpcyBXZWRuZXNkYXlcIlxuICAgKiAtIFdlZWtkYXlzIHdpdGggdGltZTogXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgKiAtIFBlcmlvZHM6IFwibmV4dCB3ZWVrXCIsIFwibmV4dCBtb250aFwiLCBcIm5leHQgeWVhclwiXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyB0byBwYXJzZSAoZS5nLiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydCAoYWZmZWN0cyBcIm5leHQgd2Vla1wiIGNhbGN1bGF0aW9ucylcbiAgICogQHJldHVybnMgUGFyc2VkIERhdGUgb2JqZWN0LCBvciBjdXJyZW50IGRhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IGRhdGUgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZShcInRvbW9ycm93XCIsIFwibW9uZGF5XCIpO1xuICAgKiBjb25zb2xlLmxvZyhkYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIHRvbW9ycm93XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgLy8gTmV0dG95ZXIgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBlbiBmaW4gZGUgY2hhw65uZSAoZXg6IFwidG9tb3Jyb3chISFcIilcbiAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHNlbGVjdGVkVGV4dC50cmltKCkucmVwbGFjZSgvWyE/Ll0rJC8sICcnKTtcbiAgICBjb25zdCB0ZXh0ID0gY2xlYW5lZFRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFwibm93XCIvXCJ0b2RheVwiLCBcIlggYWdvXCIsIGFuZCBcImluIFggdW5pdHNcIiBhbGwgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyBleGFjdCBjdXJyZW50IGluc3RhbnQgKG5vdCBqdXN0IHRoZSBjdXJyZW50IGRheSksIHNvIGNhY2hpbmcgdGhlbSBhdFxuICAgIC8vIHRoZSBjYWNoZSdzIGRheS1zaXplZCBncmFudWxhcml0eSB3b3VsZCByZXR1cm4gYSBzdGFsZSB0aW1lIG9uIGV2ZXJ5XG4gICAgLy8gY2FsbCBhZnRlciB0aGUgZmlyc3Qgd2l0aGluIHRoYXQgZGF5IChlLmcuIFwiaW4gMjAgbWludXRlc1wiIG9yIFwibm93XCJcbiAgICAvLyBhbHdheXMgcmV0dXJuaW5nIHRoZSBmaXJzdCByZXN1bHQgdGhleSBldmVyIHByb2R1Y2VkIHRoYXQgZGF5KS5cbiAgICAvLyBBbHdheXMgY29tcHV0ZSB0aGVzZSBmcmVzaCwgYnlwYXNzaW5nIHRoZSBjYWNoZSBlbnRpcmVseS5cbiAgICAvLyBcInRvbW9ycm93XCIvXCJ5ZXN0ZXJkYXlcIiByZXNvbHZlIHRvIGEgc3BlY2lmaWMgY2FsZW5kYXIgZGF5IGxpa2UgdGhlXG4gICAgLy8gb3RoZXIgY2FjaGVkIGV4cHJlc3Npb25zIGJlbG93LCBzbyB0aGV5IHN0YXkgb24gdGhlIGNhY2hlZCBwYXRoXG4gICAgLy8gKGhhbmRsZWQgYnkgdHJ5SW1tZWRpYXRlS2V5d29yZHMgZnVydGhlciBkb3duKS5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdub3cnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTtcbiAgICBjb25zdCB0b2RheVdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3Qgdm9sYXRpbGVSZXN1bHQgPVxuICAgICAgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQpIHx8IHRvZGF5V29yZHMuaW5jbHVkZXModGV4dCkgPyBuZXcgRGF0ZSgpIDogbnVsbCkgPz9cbiAgICAgIHRoaXMudHJ5UGFzdEV4cHJlc3Npb25zKHRleHQsIGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0KTtcbiAgICBpZiAodm9sYXRpbGVSZXN1bHQpIHJldHVybiB2b2xhdGlsZVJlc3VsdDtcblxuICAgIC8vIFbDqXJpZmllciBzaSBsZSBqb3VyIGEgY2hhbmfDqSBwb3VyIGludmFsaWRlciBsZSBjYWNoZVxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIGlmIChjdXJyZW50RGF5ICE9PSB0aGlzLmNhY2hlRGF5KSB7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLmNhY2hlRGF5ID0gY3VycmVudERheTtcbiAgICB9XG5cbiAgICAvLyBHw6luw6lyZXIgbGEgY2zDqSBkdSBjYWNoZSBhdmVjIGxlIHRleHRlIG5ldHRvecOpIHBvdXIgcXVlIFwidG9tb3Jyb3dcIiBldCBcInRvbW9ycm93ISEhXCIgdXRpbGlzZW50IGxhIG3Dqm1lIGNsw6lcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjbGVhbmVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICAvLyBWw6lyaWZpZXIgbGUgY2FjaGUgYXZhbnQgZGUgcGFyc2VyXG4gICAgY29uc3QgY2FjaGVkRGF0ZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkRGF0ZSkge1xuICAgICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICAgIHJldHVybiBuZXcgRGF0ZShjYWNoZWREYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cnkqKCkgbWV0aG9kIGJlbG93IHJldHVybnMgbnVsbCB3aGVuIGl0IGRvZXNuJ3QgcmVjb2duaXplIHRoZVxuICAgIC8vIGlucHV0LCBsZXR0aW5nIHRoZSBuZXh0IGxldmVsIGhhdmUgYSBzaG90IC0tIHNhbWUgTEVWRUwgMS00IG9yZGVyIHRoaXNcbiAgICAvLyBmaWxlIGhhcyBhbHdheXMgdXNlZCwganVzdCBzcGxpdCBpbnRvIG5hbWVkLCBpbmRlcGVuZGVudGx5IHJlYWRhYmxlXG4gICAgLy8gbWV0aG9kcyBpbnN0ZWFkIG9mIG9uZSBmdW5jdGlvbiB0aGF0IHVzZWQgdG8gcnVuIH41NzAgbGluZXMuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIHRoaXMudHJ5SW1tZWRpYXRlS2V5d29yZHModGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLmNocm9ub0ZhbGxiYWNrKHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZUFuZFJldHVybihjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxOiBJTU1FRElBVEUgS0VZV09SRFMgKFNwZWVkIGFuZCBQcmVjaXNpb24pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaW1tZWRpYXRlS2V5d29yZHMuaGFzKHRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvbW9ycm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZXN0ZXJkYXknLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyh0ZXh0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDEuNTogUEFTVCBFWFBSRVNTSU9OUyAoMiBkYXlzIGFnbywgaWwgeSBhIDMgbWluKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlQYXN0RXhwcmVzc2lvbnModGV4dDogc3RyaW5nLCBjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIGZvciBcImFnb1wiIGV4cHJlc3Npb25zIGluIEVuZ2xpc2ggKGUuZy4sIFwiMiBkYXlzIGFnb1wiKS4gVW5saWtlXG4gICAgLy8gZXZlcnkgb3RoZXIgdW5pdC1jYXB0dXJpbmcgcmVnZXggaW4gdGhpcyBmaWxlLCB0aGlzIG9uZSBjYXB0dXJlcyB0aGVcbiAgICAvLyB1bml0IGdlbmVyaWNhbGx5IChcXHcrLCBub3QgcmVzdHJpY3RlZCB0byBrbm93biB0cmFuc2xhdGVkIHdvcmRzKSwgc29cbiAgICAvLyBndWVzc1VuaXQoKSdzIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBpcyBnZW51aW5lbHkgcmVhY2hhYmxlXG4gICAgLy8gaGVyZSBmb3IgdW5pdHMgbm8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkgcmVjb2duaXplcy5cbiAgICBjb25zdCBhZ29NYXRjaCA9IHRleHQubWF0Y2goL14oXFxkKylcXHMrKFxcdyspXFxzK2FnbyQvaSk7XG4gICAgaWYgKGFnb01hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29NYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBhc3QgZXhwcmVzc2lvbnMgaW4gYWxsIGxhbmd1YWdlcyAoZS5nLiwgXCJpbCB5IGEgMyBtaW51dGVzXCIsIFwidm9yIDIgU3R1bmRlblwiLCBldGMuKVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbWludXRlc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1pbnV0ZXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCBob3Vyc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImhvdXJzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgZGF5c0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImRheXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCB3ZWVrc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIndlZWtzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgbW9udGhzQWdvUGF0dGVybiA9IHRoaXMudGMudHJhbnNsYXRlKFwibW9udGhzYWdvXCIsIGxhbmcpO1xuXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgeyBwYXR0ZXJuOiBtaW51dGVzQWdvUGF0dGVybiwgdW5pdDogJ21pbnV0ZXMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogaG91cnNBZ29QYXR0ZXJuLCB1bml0OiAnaG91cnMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogZGF5c0Fnb1BhdHRlcm4sIHVuaXQ6ICdkYXlzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IHdlZWtzQWdvUGF0dGVybiwgdW5pdDogJ3dlZWtzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IG1vbnRoc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtb250aHMnIGFzIGNvbnN0IH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgdW5pdCB9IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5idWlsZEFnb1JlZ2V4KHBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiICgzIGRheXMgYWdvKVxuICAgIGNvbnN0IGFnb1N1ZmZpeE1hdGNoID0gdGhpcy5yZWdleEFnb1N1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhBZ29TdWZmaXgpIDogbnVsbDtcbiAgICBpZiAoYWdvU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYWdvU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IGFnb1N1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGFuIFwiWCBhZ29cIiB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgbWF0Y2hpbmcgcmVnZXguXG4gIC8vIEV4YW1wbGU6IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIgLT4gXCJpbCB5IGEgKFxcZCspIG1pbnV0ZXNcIlxuICAvLyBFeGFtcGxlOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIgKFJ1c3NpYW5cbiAgLy8gZ3JhbW1hdGljYWwgZm9ybXMpIC0+IFwi0YfQtdGA0LXQtyAoXFxkKykgKD860LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLKSDQvdCw0LfQsNC0XCJcbiAgLy8gRXhhbXBsZTogXCIle3RpbWVEZWx0YX3lpKnliY1cIiAoQ2hpbmVzZSwgbm8gc3BhY2VzKSAtPiBcIihcXGQrKeWkqeWJjVwiXG4gIHByaXZhdGUgYnVpbGRBZ29SZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCBudWxsIHtcbiAgICBpZiAoIXBhdHRlcm4gfHwgcGF0dGVybiA9PT0gXCJOT1RGT1VORFwiKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICAvLyBQbGFjZWhvbGRlciBzd2FwcGVkIGluIGJlZm9yZSBlc2NhcGluZyBhbmQgYmFjayBvdXQgYWZ0ZXJ3YXJkcywgc29cbiAgICAvLyAle3RpbWVEZWx0YX0gYmVjb21lcyBhIHJlYWwgY2FwdHVyZSBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIG1hbmdsZWQgYnlcbiAgICAvLyBlc2NhcGluZyBpdHMgb3duIGluc2VydGVkIFwiKFxcZCspXCIsIGFuZCBzbyBpdCBzdGlsbCB3b3JrcyB3aGVuIGVtYmVkZGVkXG4gICAgLy8gaW4gYSB0b2tlbiB3aXRoIG5vIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIiV7dGltZURlbHRhfeWkqeWJjVwiKS5cbiAgICBjb25zdCBQTEFDRUhPTERFUiA9ICdcXHUwMDAwVElNRURFTFRBXFx1MDAwMCc7XG5cbiAgICBjb25zdCByZWdleFN0ciA9IHBhdHRlcm5cbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHRva2VuID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFBsYWNlaG9sZGVyID0gdG9rZW4ucmVwbGFjZSgvJVxce3RpbWVEZWx0YVxcfS9nLCBQTEFDRUhPTERFUik7XG4gICAgICAgIC8vIFwifFwiIGluc2lkZSBhIHRva2VuIG1lYW5zIG11bHRpcGxlIGdyYW1tYXRpY2FsIGZvcm1zIG9mIHRoZSBzYW1lXG4gICAgICAgIC8vIHdvcmQgKGUuZy4gUnVzc2lhbiBcItC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiKTogdHVybiBpdCBpbnRvIGFuXG4gICAgICAgIC8vIGFsdGVybmF0aW9uIGluc3RlYWQgb2YgZXNjYXBpbmcgaXQgaW50byBhIGxpdGVyYWwgcGlwZS5cbiAgICAgICAgaWYgKHdpdGhQbGFjZWhvbGRlci5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVzID0gd2l0aFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLm1hcChhbHQgPT4gZXNjYXBlUmVnZXgoYWx0KS5zcGxpdChQTEFDRUhPTERFUikuam9pbignKFxcXFxkKyknKSk7XG4gICAgICAgICAgcmV0dXJuIGAoPzoke2FsdGVybmF0aXZlcy5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KHdpdGhQbGFjZWhvbGRlcikuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJyk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcXFxzKycpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4U3RyfSRgLCAnaScpO1xuICB9XG5cbiAgLy8gU2hhcmVkIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBmb3IgdW5pdCB3b3JkcyB0aGF0IGFyZW4ndCBpbiBhbnlcbiAgLy8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkuIE9ubHkgcmVhY2hhYmxlIGZyb20gY2FsbGVycyB3aG9zZSByZWdleFxuICAvLyBjYXB0dXJlcyB0aGUgdW5pdCBnZW5lcmljYWxseSAodGhlIGhhcmRjb2RlZCBFbmdsaXNoIFwiYWdvXCIgcmVnZXggYWJvdmUsXG4gIC8vIGFuZCB0aGUgbXVsdGktdW5pdCBcImluIFggYW5kIFlcIiBzcGxpdCBiZWxvdykgLS0gcmVnZXhSZWxhdGl2ZSBhbmQgdGhlXG4gIC8vIHN1ZmZpeCByZWdleGVzIHJlc3RyaWN0IHRoZWlyIGNhcHR1cmUgZ3JvdXAgdG8gYWxyZWFkeS1rbm93biB3b3Jkcywgc29cbiAgLy8gdGhpcyBmYWxsYmFjayBjYW4gbmV2ZXIgZmlyZSBmb3IgdGhlbSAodmVyaWZpZWQgZW1waXJpY2FsbHkgYmVmb3JlIHRoZVxuICAvLyBkZWFkIGJyYW5jaGVzIHRoYXQgdXNlZCB0byBzaXQgaW4gdGhvc2UgcGF0aHMgd2VyZSByZW1vdmVkKS5cbiAgcHJpdmF0ZSBndWVzc1VuaXQodW5pdFN0cjogc3RyaW5nKTogVGltZVVuaXQge1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpO1xuICAgIGlmIChtYXBwZWQpIHtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSkgcmV0dXJuICdob3Vycyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdkJykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdqJykpIHJldHVybiAnZGF5cyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd3JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdzJykpIHJldHVybiAnd2Vla3MnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSByZXR1cm4gJ21pbnV0ZXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnbW8nKSB8fCB1bml0U3RyID09PSAnTScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtb2lzJykpIHJldHVybiAnbW9udGhzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ3knKSB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ2EnKSkgcmV0dXJuICd5ZWFycyc7XG4gICAgcmV0dXJuICdkYXlzJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyOiBSRUxBVElWRSBDQUxDVUxBVElPTiAoaW4gMiBtaW51dGVzLCBpbiAxIHllYXIuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVJlbGF0aXZlQ2FsY3VsYXRpb24oY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIiBvciBtdWx0aXBsZSBjb21iaW5hdGlvbnNcbiAgICAvLyBUcnkgdG8gcGFyc2UgbXVsdGlwbGUgY29tYmluYXRpb25zIGxpa2UgXCJpbiAxIHllYXIgYW5kIDIgbW9udGhzIGFuZCAzIHdlZWtzIGFuZCA0IGRheXNcIlxuICAgIGxldCBoYXNNdWx0aVVuaXRzID0gZmFsc2U7XG4gICAgY29uc3QgdG90YWxNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhbGwgXCJYIHVuaXRcIiBwYXR0ZXJucyBhZnRlciBcImluXCJcbiAgICBjb25zdCBpblBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiaW5cIiwgbCkpLmZpbHRlcih2ID0+IHYgIT09IFwiTk9URk9VTkRcIikuZmxhdE1hcCh2ID0+IHYuc3BsaXQoXCJ8XCIpKSkpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiYW5kXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcblxuICAgIGNvbnN0IGluUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGluUGF0dGVybnMpfSlcXFxccytgLCAnaScpO1xuICAgIGNvbnN0IGFuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFBhdHRlcm5zKX0pXFxcXHMrYCwgJ2dpJyk7XG5cbiAgICBpZiAoY2xlYW5lZFRleHQubWF0Y2goaW5SZWdleCkpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRJbiA9IGNsZWFuZWRUZXh0LnJlcGxhY2UoaW5SZWdleCwgJycpO1xuICAgICAgY29uc3QgcGFydHMgPSB3aXRob3V0SW4uc3BsaXQoYW5kUmVnZXgpLmZpbHRlcihwID0+IHAgJiYgIWFuZFBhdHRlcm5zLnNvbWUoYSA9PiBhLnRvTG93ZXJDYXNlKCkgPT09IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHVuaXRzIGRldGVjdGVkICgyIG9yIG1vcmUpXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHVuaXRNYXRjaCA9IHBhcnQudHJpbSgpLm1hdGNoKC9eKFxcZCspXFxzKyhbXlxcc10rKSQvaSk7XG4gICAgICAgICAgaWYgKHVuaXRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh1bml0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdFN0ciA9IHVuaXRNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgIHRvdGFsTW9tZW50LmFkZCh2YWx1ZSwgdGhpcy5ndWVzc1VuaXQodW5pdFN0cikpO1xuICAgICAgICAgICAgaGFzTXVsdGlVbml0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNdWx0aVVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsTW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIGNvbWJpbmF0aW9ucywgZS5nLiBDaGluZXNlIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAgIGNvbnN0IHJlbENvbWJpbmVkU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKHJlbENvbWJpbmVkU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VJbnQocmVsQ29tYmluZWRTdWZmaXhNYXRjaFszXSk7XG4gICAgICBjb25zdCB1bml0U3RyMiA9IHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbNF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IHVuaXQxID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjEpO1xuICAgICAgY29uc3QgdW5pdDIgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyMik7XG5cbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQodmFsdWUxLCB1bml0MSkuYWRkKHZhbHVlMiwgdW5pdDIpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwiaW4gMiBtaW51dGVzXCJcbiAgICBjb25zdCByZWxNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHJlbE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gdW5pdFN0ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcmVnaXN0ZXJlZCBrZXkgaGVyZTogcmVnZXhSZWxhdGl2ZSdzXG4gICAgICAvLyB1bml0IGNhcHR1cmUgZ3JvdXAgaXMgYnVpbHQgZnJvbSB0aGlzLnRjLmNvbGxlY3RXb3JkcygpIGZvciB0aGUgc2FtZVxuICAgICAgLy8gc2l4IGtleXMgdGhhdCBwb3B1bGF0ZSB0aW1lVW5pdE1hcCwgc28gYSBzdWNjZXNzZnVsIHJlZ2V4IG1hdGNoXG4gICAgICAvLyBhbHJlYWR5IGltcGxpZXMgYSBoaXQgLS0gdGhlIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlLlxuICAgICAgY29uc3QgdW5pdCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpID8/IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuXG4gICAgICAvLyBNb21lbnRKUyBoYW5kbGVzIHllYXIgdHJhbnNpdGlvbnMgcGVyZmVjdGx5XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgc2ltcGxlIGV4cHJlc3Npb25zLCBlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgKDIgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxTdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxTdWZmaXhNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxTdWZmaXhNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsU3VmZml4TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyLjU6IERBVEUgUkFOR0VTIChmcm9tIE1vbmRheSB0byBGcmlkYXkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGRhdGUsIGZvciBnZXRQYXJzZWREYXRlKCkncyBzaW5nbGUtRGF0ZSBjb250cmFjdFxuICAvLyAtLSBzZWUgZ2V0UGFyc2VkRGF0ZVJhbmdlKCkgZm9yIHRoZSBmdWxsIHJhbmdlIHdpdGggYSBkYXRlIGxpc3QuXG4gIHByaXZhdGUgdHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleERhdGVSYW5nZSk7XG4gICAgaWYgKCFyYW5nZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF5TmFtZSA9IHJhbmdlTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcblxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuZGF5KHN0YXJ0RGF5SW5kZXgpO1xuICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzOiBXRUVLREFZUyAobmV4dCBmcmlkYXkuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgIGNvbnN0IHdlZWtXaXRoVGltZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSk7XG4gICAgaWYgKHdlZWtXaXRoVGltZU1hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrV2l0aFRpbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZGF5TmFtZSA9IHdlZWtXaXRoVGltZU1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IHdlZWtXaXRoVGltZU1hdGNoWzNdLnRyaW0oKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGltZSB3aXRoIGNocm9uby1ub2RlLiBnZXRQYXJzZWREYXRlUmVzdWx0IHJldHVybnMgbnVsbFxuICAgICAgLy8gKHJhdGhlciB0aGFuIGEgXCJub3dcIiBwbGFjZWhvbGRlcikgd2hlbiBub3RoaW5nIG1hdGNoZWQsIHNvIGEgdGltZVxuICAgICAgLy8gcGFydCBjaHJvbm8tbm9kZSBjYW4ndCBwYXJzZSAoZS5nLiBcIm5leHQgTW9uZGF5IGF0IHp6cXF4eFwiKSBmYWxsc1xuICAgICAgLy8gYmFjayB0byB0aGUgYWxyZWFkeS1jb21wdXRlZCB3ZWVrZGF5IGRhdGUgYmVsb3csIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgaXQgaW4gZmF2b3Igb2YgdGhlIGFjdHVhbCBjdXJyZW50IGRhdGUvdGltZS5cbiAgICAgIGNvbnN0IHRpbWVSZXN1bHQgPSB0aGlzLmdldFBhcnNlZERhdGVSZXN1bHQodGltZVBhcnQsIG0udG9EYXRlKCkpO1xuICAgICAgaWYgKHRpbWVSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRpbWUgcGFyc2luZyBmYWlscywgcmV0dXJuIGp1c3QgdGhlIGRhdGVcbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwibmV4dCBNb25kYXlcIlxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5KTtcbiAgICBpZiAod2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB3ZWVrZGF5IHdpdGhvdXQgcHJlZml4IChlLmcuLCBcIndlZG5lc2RheVwiLCBcImZyaWRheVwiKVxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFwibmV4dCBbZGF5XVwiIG9yIFwidGhpcyBbZGF5XVwiIGlmIHRvZGF5XG4gICAgY29uc3Qgd2Vla09ubHlNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T25seSk7XG4gICAgaWYgKHdlZWtPbmx5TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrT25seU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG5cbiAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIC8vIElmIHRoZSBkYXkgaXMgaW4gdGhlIHBhc3QgKGJlZm9yZSB0b2RheSksIG1vdmUgdG8gbmV4dCB3ZWVrXG4gICAgICBpZiAobS5pc0JlZm9yZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjVhOiBcInRoZSBYdGggb2YgbmV4dCBtb250aFwiIC8gXCJ0aGUgTnRoIG9mIG5leHQgeWVhclwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeU9yZGluYWxPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JkaW5hbE9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCk7XG4gICAgaWYgKCFvcmRpbmFsT2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yZGluYWxTdHIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzFdLnRyaW0oKTtcbiAgICAvLyBHcm91cHM6IFsxXT1vcmRpbmFsLCBbMl09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbM109bW9udGgsIFs0XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbMl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZVxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZTtcblxuICAgIC8vIFBhcnNlIG9yZGluYWwgbnVtYmVyIChlLmcuLCBcIjE1dGhcIiAtPiAxNSwgXCJmaXJzdFwiIC0+IDEpXG4gICAgY29uc3QgZGF5TnVtYmVyID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihvcmRpbmFsU3RyKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBwZXJpb2QgKG1vbnRoL3llYXIpIHRvIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGNvbnN0IGlzWWVhciA9ICFpc01vbnRoICYmIHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZWFyJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcblxuICAgIGlmIChpc01vbnRoKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGF5IG9mIG1vbnRoIChjbGFtcCB0byB2YWxpZCByYW5nZSlcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGFyZ2V0TW9tZW50LmRheXNJbk1vbnRoKCk7XG4gICAgICBjb25zdCB0YXJnZXREYXkgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJbk1vbnRoKTtcbiAgICAgIHRhcmdldE1vbWVudC5kYXRlKHRhcmdldERheSk7XG4gICAgfSBlbHNlIGlmIChpc1llYXIpIHtcbiAgICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAneWVhcnMnKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZigneWVhcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgeWVhciwgaW50ZXJwcmV0IGFzIGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpXG4gICAgICBjb25zdCBkYXlzSW5ZZWFyID0gdGFyZ2V0TW9tZW50LmlzTGVhcFllYXIoKSA/IDM2NiA6IDM2NTtcbiAgICAgIGNvbnN0IHRhcmdldERheU9mWWVhciA9IE1hdGgubWluKGRheU51bWJlciwgZGF5c0luWWVhcik7XG4gICAgICB0YXJnZXRNb21lbnQuZGF5T2ZZZWFyKHRhcmdldERheU9mWWVhcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjViOiBcImxhc3QgZGF5IG9mIG1vbnRoXCIgLyBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBsYXN0RGF5T2ZNb250aE1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleExhc3REYXlPZk1vbnRoKTtcbiAgICBpZiAoIWxhc3REYXlPZk1vbnRoTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgLy8gR3JvdXBzOiBbMV09cHJlZml4IGJlZm9yZSBcImxhc3RcIiAob3B0aW9uYWwpLCBbMl09XCJsYXN0XCIsIFszXT1kYXksIFs0XT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs1XT1tb250aCwgWzZdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4QmVmb3JlID0gbGFzdERheU9mTW9udGhNYXRjaFsxXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSBsYXN0RGF5T2ZNb250aE1hdGNoWzVdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gbGFzdERheU9mTW9udGhNYXRjaFs2XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgXCJsYXN0XCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmVNb250aCB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBpZiAoIWlzTW9udGgpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJ0aGlzXCIvbm8gcHJlZml4IGJvdGggbWVhbiBcInRoaXMgbW9udGhcIlxuICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YzogXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiAvIFwibGFzdCBGcmlkYXkgb2YgbmV4dCBtb250aFwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgd2Vla2RheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCk7XG4gICAgaWYgKCF3ZWVrZGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPWZpcnN0L3ByZWZpeCwgWzJdPXdlZWtkYXksIFszXT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs0XT1tb250aCwgWzVdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4T3JGaXJzdCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkYXlOYW1lID0gd2Vla2RheU9mTW9udGhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeEJlZm9yZU1vbnRoID0gd2Vla2RheU9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gd2Vla2RheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgIC8vIFVzZSBwcmVmaXggYWZ0ZXIgbW9udGggaWYgcHJlc2VudCAoRnJlbmNoIGludmVyc2lvbiksIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIG1vbnRoLCBvdGhlcndpc2UgcHJlZml4T3JGaXJzdFxuICAgIGNvbnN0IG1vbnRoUHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGg7XG5cbiAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZmlyc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocHJlZml4T3JGaXJzdCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGlzTGFzdCA9ICFpc0ZpcnN0ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4T3JGaXJzdCk7XG4gICAgbGV0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgIC8vIEZpcnN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgd2Vla2RheSBpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgY29uc3QgZmlyc3RXZWVrZGF5SW5kZXggPSBmaXJzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9BZGQgPSAoZGF5SW5kZXggLSBmaXJzdFdlZWtkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGZpcnN0RGF5T2ZNb250aC5hZGQoZGF5c1RvQWRkLCAnZGF5cycpO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICAvLyBMYXN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgYnkgZ29pbmcgdG8gZW5kIG9mIG1vbnRoIGFuZCB3b3JraW5nIGJhY2t3YXJkc1xuICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGxhc3RXZWVrZGF5SW5kZXggPSBsYXN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGxhc3RXZWVrZGF5SW5kZXggLSBkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGxhc3REYXlPZk1vbnRoLnN1YnRyYWN0KGRheXNUb1N1YnRyYWN0LCAnZGF5cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmaXgtYmFzZWQgKG5leHQvdGhpcykgLSBkZWZhdWx0IHRvIGZpcnN0XG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDRhOiBcIm5leHQgbW9udGhcIiAvIFwibmV4dCB5ZWFyXCIgc2hvcnRjdXQgKGJlZm9yZSBmYWxsaW5nIHRvIGNocm9uby1ub2RlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZTogXCJuZXh0IHdlZWtcIiBpcyBpbnRlbnRpb25hbGx5IE5PVCBoYW5kbGVkIGhlcmUgLS0gaXQncyBsZWZ0IHRvXG4gIC8vIGdldFBhcnNlZERhdGVSYW5nZSgpIHRvIGdlbmVyYXRlIGEgZnVsbCBkYXRlIGxpc3QsIHNvIHRoYXQgY2FzZSBmYWxsc1xuICAvLyB0aHJvdWdoIHRvIHRoZSBjaHJvbm8tbm9kZSBmYWxsYmFjayBpbnN0ZWFkLlxuICBwcml2YXRlIHRyeU5leHRQZXJpb2RTaG9ydGN1dChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gd2Vlay9tb250aC95ZWFyIHdvcmRzIGRpcmVjdGx5IChub3QgYSBnZW5lcmljIFxcUysvXFx3KyBjYXB0dXJlKTogb3RoZXJ3aXNlIGFcbiAgICAvLyBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeCBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2c1xuICAgIC8vIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdCBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlXG4gICAgLy8gbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCBwZXJpb2RXb3Jkc0FsbCA9IFsnd2VlaycsICdtb250aCcsICd5ZWFyJ10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihwZXJpb2RXb3Jkc0FsbCk7XG4gICAgY29uc3QgbmV4dERhdGVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuQWxsfSlgLCAnaScpKTtcbiAgICBpZiAoIW5leHREYXRlTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcGVyaW9kID0gbmV4dERhdGVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTmV4dFdlZWsgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnd2VlaycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCk7XG4gICAgaWYgKGlzTmV4dFdlZWspIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YjogVEhFIFJFU1QgKGNocm9uby1ub2RlIGxpYnJhcnksIGZpbmFsIGZhbGxiYWNrKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBjaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MgfHwgdGhpcy5jaHJvbm9zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBEYXRlKCk7XG5cbiAgICAvLyBXZSB1c2UgdGhlIFwiQmVzdCBTY29yZVwiIHRlY2huaXF1ZSB0byBjaG9vc2UgYmV0d2VlbiBFTiBhbmQgRlJcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgY29uc3QgbG9jYWxlID0geyB3ZWVrU3RhcnQ6IGdldFdlZWtOdW1iZXIod2Vla1N0YXJ0KSB9O1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gU3RhbmRhcmQgbGlicmFyeSBjYWxsIHdpdGggZm9yY2VkIGZvcndhcmREYXRlXG4gICAgY29uc3QgY2hyb25vUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHNlbGVjdGVkVGV4dCwgcmVmZXJlbmNlRGF0ZSwge1xuICAgICAgbG9jYWxlLFxuICAgICAgZm9yd2FyZERhdGU6IHRydWVcbiAgICB9IGFzIFBhcnNpbmdPcHRpb24pO1xuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCBhbnl3aGVyZTogdGhpcyBpcyB0aGUgZmluYWwgZmFsbGJhY2sgbGV2ZWwsIHNvIChwZXJcbiAgICAvLyB0aGlzIG1ldGhvZCdzIGRvY3VtZW50ZWQgY29udHJhY3QpIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgIHJldHVybiBjaHJvbm9SZXN1bHQgPz8gbmV3IERhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgcmFuZ2Ugc3RyaW5nIGFuZCByZXR1cm5zIGEgcmFuZ2UgcmVzdWx0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgdmFyaW91cyByYW5nZSBleHByZXNzaW9uczpcbiAgICogLSBXZWVrZGF5IHJhbmdlczogXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIlxuICAgKiAtIFdlZWsgcmFuZ2VzOiBcIm5leHQgd2Vla1wiIChyZXR1cm5zIGFsbCBkYXlzIG9mIG5leHQgd2VlaylcbiAgICogLSBXb3JrcyBpbiBhbGwgZW5hYmxlZCBsYW5ndWFnZXMgd2l0aCBuYXRpdmUgdHJhbnNsYXRpb25zXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyAoZS5nLiwgXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIiwgXCJuZXh0IHdlZWtcIilcbiAgICogQHBhcmFtIHdlZWtTdGFydFByZWZlcmVuY2UgLSBEYXkgb2Ygd2VlayB0byBjb25zaWRlciBhcyB3ZWVrIHN0YXJ0XG4gICAqIEByZXR1cm5zIE5MRFJhbmdlUmVzdWx0IG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBkYXRlcyBhbmQgZGF0ZSBsaXN0LCBvciBudWxsIGlmIG5vdCBhIHJhbmdlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogY29uc3QgcmFuZ2UgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibW9uZGF5XCIpO1xuICAgKiBpZiAocmFuZ2UpIHtcbiAgICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBOTERSYW5nZVJlc3VsdCB8IG51bGwge1xuICAgIC8vIENoZWNrIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICBjb25zdCByYW5nZU1hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmIChyYW5nZU1hdGNoKSB7XG4gICAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBlbmREYXlOYW1lID0gcmFuZ2VNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChzdGFydERheU5hbWUpO1xuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGVuZERheU5hbWUpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgc3RhcnQgZGF5XG4gICAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgICAgc3RhcnRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgbmV4dCBlbmQgZGF5IChtdXN0IGJlIGFmdGVyIG9yIGVxdWFsIHRvIHN0YXJ0IGRheSlcbiAgICAgIGxldCBlbmRNb21lbnQgPSBtb21lbnQoKS5kYXkoZW5kRGF5SW5kZXgpO1xuICAgICAgLy8gSWYgZW5kIGRheSBpcyBiZWZvcmUgc3RhcnQgZGF5LCB0YWtlIHRoZSBvbmUgZnJvbSBuZXh0IHdlZWtcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgZW5kTW9tZW50IGlzIGFsd2F5cyBhZnRlciBvciBlcXVhbCB0byBzdGFydE1vbWVudFxuICAgICAgaWYgKGVuZE1vbWVudC5pc0JlZm9yZShzdGFydE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDEsICd3ZWVrJykuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHN0YXJ0TW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgY29uc3QgZGF0ZUxpc3Q6IE1vbWVudFtdID0gW107XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goY3VycmVudE1vbWVudC5jbG9uZSgpKTtcbiAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQ6IE5MRFJhbmdlUmVzdWx0ID0ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBlbmREYXRlOiBlbmRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBpc1JhbmdlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgXCJuZXh0IHdlZWtcIiBhcyByYW5nZSAoYm90aCBcIm5leHQgd2Vla1wiIGFuZCBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2gpXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgc28gdGhpcyBhbHNvIG1hdGNoZXMgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW5cbiAgICAvLyB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyfXCIpLiBUaGUgcGVyaW9kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUga25vd25cbiAgICAvLyBcIndlZWtcIiB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhIHNob3J0ZXJcbiAgICAvLyB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnMgXCJwcm9jaGFpbmVcIilcbiAgICAvLyBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYXMgdGhlIHBlcmlvZC5cbiAgICBjb25zdCBuZXh0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHRoaXMucHJlZml4S2V5d29yZHMubmV4dCkpO1xuICAgIGNvbnN0IHdlZWtQYXR0ZXJuQWxsID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKCd3ZWVrJyk7XG4gICAgLy8gRmlyc3QgdHJ5IFwibmV4dCB3ZWVrXCIgcGF0dGVyblxuICAgIGxldCBuZXh0V2Vla01hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHt3ZWVrUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgbGV0IHBlcmlvZEluZGV4ID0gMjsgLy8gSW5kZXggb2YgcGVyaW9kIGluIG1hdGNoIGFycmF5XG4gICAgaWYgKCFuZXh0V2Vla01hdGNoKSB7XG4gICAgICAvLyBUcnkgcmV2ZXJzZSBwYXR0ZXJuIFwid2VlayBuZXh0XCIgZm9yIGxhbmd1YWdlcyBsaWtlIEZyZW5jaFxuICAgICAgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHt3ZWVrUGF0dGVybkFsbH0pXFxcXHMqKCR7bmV4dFBhdHRlcm59KWAsICdpJykpO1xuICAgICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgICAgcGVyaW9kSW5kZXggPSAxOyAvLyBQZXJpb2QgaXMgbm93IGF0IGluZGV4IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG5leHRXZWVrTWF0Y2hbcGVyaW9kSW5kZXhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICAgIC8vIE5leHQgd2VlayAtPiByZXR1cm4gZnJvbSBNb25kYXkgdG8gU3VuZGF5IG9mIG5leHQgd2Vla1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChTdHJpbmcod2Vla1N0YXJ0KSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5hZGQoMSwgJ3dlZWtzJykuZGF5KHdlZWtTdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kTW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKS5hZGQoNiwgJ2RheXMnKTtcblxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHJhbmdlXG4gICAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRNb21lbnQuaXNTYW1lT3JCZWZvcmUoZW5kTW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogc3RhcnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGVuZE1vbWVudDogZW5kTW9tZW50LmNsb25lKCksXG4gICAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogV0hPIEhBUyBUSEUgQkVTVCBTQ09SRT8gLS0tXG4gIC8vIFJldHVybnMgbnVsbCAocmF0aGVyIHRoYW4gYSBcIm5vd1wiIHBsYWNlaG9sZGVyKSB3aGVuIGNocm9uby1ub2RlIGZvdW5kIG5vXG4gIC8vIG1hdGNoLCBzbyBjYWxsZXJzIGNhbiB0ZWxsIFwibm90aGluZyBwYXJzZWRcIiBhcGFydCBmcm9tIFwicGFyc2VkIHRvIHJpZ2h0XG4gIC8vIG5vd1wiIGFuZCBmYWxsIGJhY2sgYWNjb3JkaW5nbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBhY2NlcHRpbmcgYSBib2d1c1xuICAvLyBjdXJyZW50LWRhdGUvdGltZSByZXN1bHQuXG4gIGdldFBhcnNlZERhdGVSZXN1bHQodGV4dDogc3RyaW5nLCByZWZlcmVuY2VEYXRlPzogRGF0ZSwgb3B0aW9uPzogUGFyc2luZ09wdGlvbik6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcyB8fCB0aGlzLmNocm9ub3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgYmVzdFJlc3VsdDogUGFyc2VkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICAvLyBjaHJvbm8gY2FuIHJldHVybiBzZXZlcmFsIGRpc2pvaW50IG1hdGNoZXMgZm9yIG9uZSBzdHJpbmcgKGUuZy5cbiAgICAgICAgLy8gXCJ0b2RheSBpbiAzIG1pbnV0ZXNcIiAtPiBbXCJ0b2RheVwiLCBcImluIDMgbWludXRlc1wiXSwgcGFyc2VkIGFzIHR3b1xuICAgICAgICAvLyBpbmRlcGVuZGVudCBjYW5kaWRhdGVzLCBuZWl0aGVyIGNvbnRhaW5pbmcgdGhlIG90aGVyKS4gQ29tcGFyaW5nXG4gICAgICAgIC8vIGV2ZXJ5IGNhbmRpZGF0ZSdzIHNjb3JlIC0tIG5vdCBqdXN0IHJlc3VsdHNbMF0gLS0gbWVhbnMgdGhlIG1vcmVcbiAgICAgICAgLy8gc3BlY2lmaWMvaW5mb3JtYXRpdmUgb25lIHdpbnMgaW5zdGVhZCBvZiBhbHdheXMgcGlja2luZyB3aGljaGV2ZXJcbiAgICAgICAgLy8gY2hyb25vIGhhcHBlbmVkIHRvIGxpc3QgZmlyc3QsIHdoaWNoIHNpbGVudGx5IGRpc2NhcmRlZCBcImluIDNcbiAgICAgICAgLy8gbWludXRlc1wiIGFuZCByZXR1cm5lZCB0aGUgY3VycmVudCB0aW1lIHVubW9kaWZpZWQuXG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0cyB8fCBbXSkge1xuICAgICAgICAgIGlmIChtYXRjaC50ZXh0Lmxlbmd0aCA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF0Y2gudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0ID0gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWREYXRlUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdCA/IGJlc3RSZXN1bHQuc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldFBhcnNlZFJlc3VsdCh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHJldHVybiBbXTtcbiAgICBsZXQgYmVzdFJlc3VsdHM6IFBhcnNlZFJlc3VsdFtdID0gW107XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChyZXN1bHRzWzBdLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZXN1bHRzWzBdLnRleHQubGVuZ3RoO1xuICAgICAgICAgICAgYmVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybignQ2hyb25vIHBhcnNpbmcgZXJyb3IgaW4gZ2V0UGFyc2VkUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdHM7XG4gIH1cblxuICAvLyAtLS0gVElNRSBERVRFQ1RJT04gKEZPUiBESVNQTEFZKSAtLS1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBEZXRlY3RzIHZhcmlvdXMgdGltZSBleHByZXNzaW9uczpcbiAgICogLSBFeHBsaWNpdCB0aW1lczogXCJhdCAzcG1cIiwgXCJhdCAxNTowMFwiLCBcIsOgIDE1aFwiXG4gICAqIC0gVGltZSBpbiByZWxhdGl2ZSBleHByZXNzaW9uczogXCJpbiAyIGhvdXJzXCIsIFwiZGFucyAyIGhldXJlc1wiXG4gICAqIC0gV29ya3Mgd2l0aCBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICogXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dCBzdHJpbmcgdG8gY2hlY2sgZm9yIHRpbWUgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSB0aW1lIGNvbXBvbmVudCBpcyBkZXRlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzVGltZUNvbXBvbmVudCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lRGV0ZWN0b3IuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBTVEFUSVNUSUNTIChGT1IgTU9OSVRPUklORykgLS0tXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5jYWNoZS5zaXplLFxuICAgICAgbWF4U2l6ZTogdGhpcy5jYWNoZS5tYXhTaXplTGltaXQsXG4gICAgfTtcbiAgfVxufSIsImltcG9ydCB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgRWRpdG9yU3VnZ2VzdENvbnRleHQsXG4gIEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyxcbiAgVEZpbGUsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuXG4vLyBPcHRpbWFsIFN0cmluZyBBbGlnbm1lbnQgKE9TQSkgZWRpdCBkaXN0YW5jZTogbGlrZSBMZXZlbnNodGVpbiwgYnV0IGFsc29cbi8vIHRyZWF0cyBzd2FwcGluZyB0d28gYWRqYWNlbnQgY2hhcmFjdGVycyBhcyBhIHNpbmdsZSBlZGl0IChlLmcuIFwiaGVpclwiIHZzXG4vLyBcImhpZXJcIiBpcyBkaXN0YW5jZSAxLCBub3QgMikgLS0gYW4gYWRqYWNlbnQtbGV0dGVyIHRyYW5zcG9zaXRpb24gaXMgb25lIG9mXG4vLyB0aGUgbW9zdCBjb21tb24gdHlwaW5nIG1pc3Rha2VzLCBhbmQgcGxhaW4gTGV2ZW5zaHRlaW4gd291bGQgb3RoZXJ3aXNlXG4vLyBjb3VudCBpdCBhcyB0d28gc3Vic3RpdHV0aW9ucyBhbmQgcHVzaCBpdCBwYXN0IHRoZSB0aHJlc2hvbGQgaW5cbi8vIGZ1enp5TWF0Y2hlc1F1ZXJ5KCkgYmVsb3cuIFNwYWNlIGlzIGtlcHQgdG8gdGhyZWUgcm9sbGluZyByb3dzIG9mIGxlbmd0aFxuLy8gYi5sZW5ndGggKyAxIChpbnN0ZWFkIG9mIGEgZnVsbCAoYS5sZW5ndGgrMSkgeCAoYi5sZW5ndGgrMSkgdGFibGUpIHNpbmNlXG4vLyB0aGlzIHJ1bnMgb24gZXZlcnkga2V5c3Ryb2tlIGFnYWluc3QgZXZlcnkgY2FuZGlkYXRlLlxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuICBsZXQgdHdvUm93c0FnbyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuICBsZXQgcHJldlJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG4gKyAxIH0sIChfLCBqKSA9PiBqKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSBuZXcgQXJyYXk8bnVtYmVyPihuICsgMSkuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFJvd1swXSA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XG4gICAgICBjb25zdCBjb3N0ID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gMCA6IDE7XG4gICAgICBsZXQgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgcHJldlJvd1tqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGN1cnJlbnRSb3dbaiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIHByZXZSb3dbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHZhbHVlLCB0d29Sb3dzQWdvW2ogLSAyXSArIDEpOyAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICB9XG4gICAgICBjdXJyZW50Um93W2pdID0gdmFsdWU7XG4gICAgfVxuICAgIFt0d29Sb3dzQWdvLCBwcmV2Um93LCBjdXJyZW50Um93XSA9IFtwcmV2Um93LCBjdXJyZW50Um93LCB0d29Sb3dzQWdvXTtcbiAgfVxuICByZXR1cm4gcHJldlJvd1tuXTtcbn1cblxuLy8gUHJlZml4IG1hdGNoIGlmIHBvc3NpYmxlIChmYXN0LCBleGFjdCwgYW5kIHRoZSBvbmx5IGJlaGF2aW9yIGZvciBxdWVyaWVzXG4vLyB0b28gc2hvcnQgdG8gZnV6enktbWF0Y2ggcmVsaWFibHkpOyBvdGhlcndpc2UgdG9sZXJhdGUgYSBzbWFsbCBlZGl0XG4vLyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBxdWVyeSBhbmQgY2FuZGlkYXRlIHByZWZpeGVzIG9mIHNpbWlsYXIgbGVuZ3RoLCBzbyBhXG4vLyBzaW5nbGUgd3JvbmcvbWlzc2luZy90cmFuc3Bvc2VkIGxldHRlciBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcXVlcnkgc3RpbGxcbi8vIHN1cmZhY2VzIHRoZSBpbnRlbmRlZCBzdWdnZXN0aW9uIGluc3RlYWQgb2Ygbm9uZSBhdCBhbGwuIENoZWNrcyBhIHdpbmRvd1xuLy8gb2YgcHJlZml4IGxlbmd0aHMgYXJvdW5kIHRoZSBxdWVyeSdzIG93biBsZW5ndGggKHF1ZXJ5Lmxlbmd0aCDCsSB0aHJlc2hvbGQpXG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaXhlZC1sZW5ndGggc2xpY2UgLS0gY29tcGFyaW5nIGFnYWluc3QgYSBwcmVmaXhcbi8vIHRoYXQncyBmb3JjZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHF1ZXJ5IGJ5IG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIHdvdWxkXG4vLyBvdGhlcndpc2UgbWFrZSB0aGUgZWRpdCBkaXN0YW5jZSBhdCBsZWFzdCB0aGF0IGxlbmd0aCBkaWZmZXJlbmNlLCB3aGljaFxuLy8gY2FuIGV4Y2VlZCB0aGUgdGhyZXNob2xkIGV2ZW4gZm9yIGFuIGV4YWN0LXByZWZpeCBtYXRjaCAoZS5nLiBcInRvbXVyXCJcbi8vIGFnYWluc3QgYSBmaXhlZCA3LWNoYXJhY3RlciBzbGljZSBvZiBcInRvbW9ycm93XCIgaXMgYWxyZWFkeSAyIGVkaXRzIGF3YXlcbi8vIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgYWN0dWFsIHR5cG8pLiBPbmx5IHVzZWQgZm9yIHNob3J0LCBmaXhlZFxuLy8gY2FuZGlkYXRlIGxpc3RzICh0b2RheS90b21vcnJvdywgd2Vla2RheXMsIGhpc3RvcnkvY29udGV4dCkgLS0gdGhlXG4vLyBtdWx0aS1zdGFnZSBwcm9ncmVzc2l2ZS10eXBpbmcgc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGVsc2V3aGVyZSBpbiB0aGlzXG4vLyBmaWxlIGtlZXAgc3RyaWN0IHByZWZpeCBtYXRjaGluZywgc2luY2UgZnV6enkgbWF0Y2hpbmcgaW50ZXJhY3RzXG4vLyB1bnByZWRpY3RhYmx5IHdpdGggdGhlaXIgcGFydGlhbC1jb21wbGV0aW9uIGxvZ2ljLlxuZnVuY3Rpb24gZnV6enlNYXRjaGVzUXVlcnkoY2FuZGlkYXRlOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYyA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFxIHx8IGMuc3RhcnRzV2l0aChxKSkgcmV0dXJuIHRydWU7XG4gIGlmIChxLmxlbmd0aCA8PSAyKSByZXR1cm4gZmFsc2U7IC8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCB3aXRob3V0IG5vaXNlXG4gIGNvbnN0IHRocmVzaG9sZCA9IHEubGVuZ3RoIDw9IDUgPyAxIDogMjtcbiAgY29uc3QgbWluTGVuID0gTWF0aC5tYXgoMSwgcS5sZW5ndGggLSB0aHJlc2hvbGQpO1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1pbihjLmxlbmd0aCwgcS5sZW5ndGggKyB0aHJlc2hvbGQpO1xuICBmb3IgKGxldCBsZW4gPSBtaW5MZW47IGxlbiA8PSBtYXhMZW47IGxlbisrKSB7XG4gICAgaWYgKGVkaXREaXN0YW5jZShjLnNsaWNlKDAsIGxlbiksIHEpIDw9IHRocmVzaG9sZCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlU3VnZ2VzdCBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8c3RyaW5nPiB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cbiAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IE9ic2lkaWFuJ3MgRWRpdG9yU3VnZ2VzdCBzY29wZSBkb2Vzbid0IGV4cG9zZSByZWdpc3RlciBtZXRob2QgaW4gdHlwZXMsXG4gICAgLy8gYnV0IGl0IGV4aXN0cyBhdCBydW50aW1lLiBUaGlzIGFsbG93cyB1cyB0byByZWdpc3RlciBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZSBhcyB0eXBlb2YgdGhpcy5zY29wZSAmIHtcbiAgICAgIHJlZ2lzdGVyOiAobW9kaWZpZXJzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSA9PiB2b2lkO1xuICAgIH07XG4gICAgc2NvcGUucmVnaXN0ZXIoW1wiU2hpZnRcIl0sIFwiRW50ZXJcIiwgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkOiBFZGl0b3JTdWdnZXN0J3MgaW50ZXJuYWwgc3VnZ2VzdGlvbnMgQVBJIGlzIG5vdCBmdWxseSB0eXBlZC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFjY2VzcyB0byB1c2VTZWxlY3RlZEl0ZW0gbWV0aG9kIHdoaWNoIGV4aXN0cyBhdCBydW50aW1lIGZvciBTaGlmdCtFbnRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZWRpdG9yU3VnZ2VzdCA9IHRoaXMgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHN1Z2dlc3Rpb25zOiB7IHVzZVNlbGVjdGVkSXRlbTogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9O1xuICAgICAgfTtcbiAgICAgIGVkaXRvclN1Z2dlc3Quc3VnZ2VzdGlvbnMudXNlU2VsZWN0ZWRJdGVtKGV2dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rKSB7XG4gICAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbeyBjb21tYW5kOiBcIlNoaWZ0XCIsIHB1cnBvc2U6IFwiS2VlcCB0ZXh0IGFzIGFsaWFzXCIgfV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIGhhbmRsZSBubyBtYXRjaGVzXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0KTtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID8gc3VnZ2VzdGlvbnMgOiBbIGNvbnRleHQucXVlcnkgXTtcbiAgfVxuXG4gIGdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCk6IHN0cmluZ1tdIHtcbiAgICAvLyBSw6ljdXDDqXJlciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBzdGFuZGFyZFN1Z2dlc3Rpb25zID0gdGhpcy51bmlxdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmZsYXRNYXAoXG4gICAgICBsYW5ndWFnZSA9PiB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0VGltZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgICAgXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFJlbGF0aXZlU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRXZWVrZGF5U3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBTaSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBzb250IGTDqXNhY3RpdsOpZXMsIHJldG91cm5lciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIChoaXN0b3JpcXVlICsgY29udGV4dGUpXG4gICAgY29uc3Qgc21hcnRTdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0LCBzdGFuZGFyZFN1Z2dlc3Rpb25zKTtcblxuICAgIC8vIEZ1c2lvbm5lciA6IHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgZW4gcHJpb3JpdMOpLCBwdWlzIHN1Z2dlc3Rpb25zIHN0YW5kYXJkXG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNtYXJ0U3VnZ2VzdGlvbnNdO1xuICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdGFuZGFyZFN1Z2dlc3Rpb25zKSB7XG4gICAgICBpZiAoIW1lcmdlZC5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICBtZXJnZWQucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlIGV0IGxlIGNvbnRleHRlXG4gICAqL1xuICBwcml2YXRlIGdldFNtYXJ0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQsIF9zdGFuZGFyZFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN1Z2dlc3Rpb25zID0gdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKDE1KTtcbiAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIGhpc3RvcnlTdWdnZXN0aW9ucykge1xuICAgICAgICAgIC8vIFbDqXJpZmllciBxdWUgbGEgc3VnZ2VzdGlvbiBjb3JyZXNwb25kIMOgIGxhIHJlcXXDqnRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShzdWdnZXN0aW9uLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Rpb25zIGJhc8OpZXMgc3VyIGxlIGNvbnRleHRlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIgJiYgY29udGV4dC5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbmZvID0gdGhpcy5wbHVnaW4uY29udGV4dEFuYWx5emVyLmFuYWx5emVDb250ZXh0U3luYyhcbiAgICAgICAgICBjb250ZXh0LmVkaXRvcixcbiAgICAgICAgICBjb250ZXh0LnN0YXJ0LmxpbmVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFqb3V0ZXIgbGVzIGRhdGVzIHRyb3V2w6llcyBkYW5zIGxlIGNvbnRleHRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICBmb3IgKGNvbnN0IGRhdGVTdHIgb2YgY29udGV4dEluZm8uZGF0ZXNJbkNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF0ZVN0ciwgcXVlcnkpICYmICFzbWFydFN1Z2dlc3Rpb25zLmluY2x1ZGVzKGRhdGVTdHIpKSB7XG4gICAgICAgICAgICBzbWFydFN1Z2dlc3Rpb25zLnB1c2goZGF0ZVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRTdWdnZXN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBPbmx5IHRoZSBmaXJzdCB2YXJpYW50IG9mIGEgcGlwZS1zZXBhcmF0ZWQgdHJhbnNsYXRpb24gKGUuZy4gQ2hpbmVzZVxuICAgIC8vIFwi5pmC6ZaTfOaXtumXtFwiKSBpcyB1c2VkIGZvciBkaXNwbGF5L21hdGNoaW5nIC0tIGVtYmVkZGluZyB0aGUgcmF3XG4gICAgLy8gbXVsdGktdmFyaWFudCBzdHJpbmcgd291bGQgYm90aCBnYXJibGUgdGhlIHN1Z2dlc3Rpb24gdGV4dCBhbmQsIHNpbmNlXG4gICAgLy8gXCJ8XCIgaXMgYSByZWdleCBtZXRhY2hhcmFjdGVyLCBzaWxlbnRseSBicmVhayB0aGUgXCJeXCIgYW5jaG9yIGJlbG93LlxuICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCBub3dXb3JkID0gdChcIm5vd1wiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGlmIChpbnB1dFN0ci5tYXRjaChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleCh0aW1lV29yZCl9YCwgXCJpXCIpKSkge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIG5vd1dvcmQsXG4gICAgICAgIHQoXCJwbHVzbWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxNVwiIH0pLFxuICAgICAgICB0KFwicGx1c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgICB0KFwibWludXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJtaW51c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHZhbCA9PiBgJHt0aW1lV29yZH06JHt2YWx9YClcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXNjYXBlIGVhY2ggdHJhbnNsYXRpb24ncyB2YXJpYW50cyBpbmRpdmlkdWFsbHkgYmVmb3JlIGpvaW5pbmcgaW50b1xuICAgIC8vIGFuIGFsdGVybmF0aW9uOiBhIGxhbmd1YWdlJ3Mgb3duIFwifFwiLXNlcGFyYXRlZCB2YXJpYW50cyBzdGF5XG4gICAgLy8gbWVhbmluZ2Z1bCBhbHRlcm5hdGlvbiwgYnV0IGFueSBvdGhlciByZWdleCBtZXRhY2hhcmFjdGVyIG9uZSBtaWdodFxuICAgIC8vIGNvbnRhaW4gY2FuJ3QgY29ycnVwdCB0aGUgcGF0dGVybi4gQW5jaG9yZWQgd2l0aCBcIl5cIiBsaWtlIHRoZSBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gZ2VuZXJhdG9ycyBpbiB0aGlzIGZpbGUgLS0gb3RoZXJ3aXNlIGEgc2hvcnQsIGNvbW1vblxuICAgIC8vIHN1YnN0cmluZyAoZS5nLiBDaGluZXNlIFwibmV4dFwiOiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsIHRoZSBsYXN0IHZhcmlhbnRcbiAgICAvLyBiZWluZyBhIHNpbmdsZSBiYXJlIGNoYXJhY3RlcikgY2FuIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgdW5yZWxhdGVkXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgYnVpbGRQYXR0ZXJuID0gKHRyYW5zbGF0aW9uOiBzdHJpbmcpID0+XG4gICAgICB0cmFuc2xhdGlvbi5zcGxpdCgnfCcpLm1hcCh2ID0+IGVzY2FwZVJlZ2V4KHYudHJpbSgpKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gW3QoXCJuZXh0XCIsIGxhbmcpLCB0KFwibGFzdFwiLCBsYW5nKSwgdChcInRoaXNcIiwgbGFuZyldXG4gICAgICAubWFwKGJ1aWxkUGF0dGVybilcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXigke3ByZWZpeFBhdHRlcm59KWAsIFwiaVwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cClcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG1hdGNoWzFdXG4gICAgICAvLyBQcmVuZHJlIHNldWxlbWVudCBsYSBwcmVtacOocmUgdmFyaWFudGUgKGF2YW50IGxlIHwpIHBvdXIgbGVzIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBnZXRGaXJzdFZhcmlhbnQgPSAodmFsOiBzdHJpbmcpID0+IHZhbC5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIHQoXCJ3ZWVrXCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9udGhcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ5ZWFyXCIsIGxhbmcpLFxuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhcmlhbnQgPSBnZXRGaXJzdFZhcmlhbnQodmFsKTtcbiAgICAgICAgICAvLyBDYXBpdGFsaXNlciBsYSBwcmVtacOocmUgbGV0dHJlIHBvdXIgdW4gbWVpbGxldXIgYWZmaWNoYWdlXG4gICAgICAgICAgcmV0dXJuIGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCh2YWwgPT4gYCR7cmVmZXJlbmNlfSAke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVsOpcmlmaWVyIGQnYWJvcmQgbGVzIGV4cHJlc3Npb25zIGNvbWJpbsOpZXMgY29tbWUgXCJpbiAxIG1vbnRoIGFuZFwiIG91IFwiZGFucyAxIG1vaXMgZXRcIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImluIDEgbW9udGggYW5kXCIsIFwiaW4gMSBtb250aCBhbmQgM1wiLCBcImluIDMgbW9udGggYW5kXCIsIGV0Yy5cbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdChcImFuZFwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgIC8vIFJlZ2V4IHBsdXMgZmxleGlibGUgcXVpIHBlcm1ldCBsYSBzYWlzaWUgYXByw6hzIFwiYW5kXCJcbiAgICBjb25zdCBjb21iaW5lZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3QoXCJpblwiLCBsYW5nKX0gKT8oWystXT9cXFxcZCspXFxcXHMrKCR7dChcIm1pbnV0ZVwiLCBsYW5nKX18JHt0KFwiaG91clwiLCBsYW5nKX18JHt0KFwiZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWVrXCIsIGxhbmcpfXwke3QoXCJtb250aFwiLCBsYW5nKX18JHt0KFwieWVhclwiLCBsYW5nKX0pXFxcXHMrKCR7YW5kUGF0dGVybn0pKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2ggPSBpbnB1dFN0ci5tYXRjaChjb21iaW5lZFJlZ2V4KTtcbiAgICBpZiAoY29tYmluZWRNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJBbmQgPSBjb21iaW5lZE1hdGNoWzVdID8gY29tYmluZWRNYXRjaFs1XS50cmltKCkgOiAnJztcbiAgICAgIFxuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiYW5kXCIgcG91ciByZWNvbnN0cnVpcmUgY29ycmVjdGVtZW50XG4gICAgICBjb25zdCBiZWZvcmVBbmQgPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihjb21iaW5lZE1hdGNoWzRdKSArIGNvbWJpbmVkTWF0Y2hbNF0ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciBhcHLDqHMgXCJhbmRcIiwgZXh0cmFpcmUgbGUgbm9tYnJlIHMnaWwgeSBlbiBhIHVuXG4gICAgICBsZXQgc3VnZ2VzdGVkTnVtYmVyID0gXCIxXCI7XG4gICAgICBsZXQgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gYWZ0ZXJBbmQ7XG4gICAgICBpZiAoYWZ0ZXJBbmQpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBhZnRlckFuZC5tYXRjaCgvXihcXGQrKSguKikkLyk7XG4gICAgICAgIGlmIChudW1iZXJNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3RlZE51bWJlciA9IG51bWJlck1hdGNoWzFdO1xuICAgICAgICAgIGFmdGVyQW5kV2l0aG91dE51bWJlciA9IG51bWJlck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5kYXlzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaXRQYXJ0ID0gcy5yZXBsYWNlKC9eZGFucyB8XmluIC9pLCAnJyk7XG4gICAgICAgICAgLy8gdW5pdFBhcnQgZXN0IGNvbW1lIFwiMyBkYXlzXCIgb3UgXCI1IG1pbnV0ZXNcIlxuICAgICAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBjb21wbMOpdGVyIGludGVsbGlnZW1tZW50XG4gICAgICAgICAgICAvLyB1bml0UGFydCBjb21tZW5jZSBwYXIgbGUgbm9tYnJlIChleDogXCIzIGRheXNcIilcbiAgICAgICAgICAgIGNvbnN0IHVuaXRXb3JkcyA9IHVuaXRQYXJ0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBpZiAodW5pdFdvcmRzLmxlbmd0aCA+IDEgJiYgdW5pdFdvcmRzWzBdID09PSBzdWdnZXN0ZWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgLy8gTGUgbm9tYnJlIGNvcnJlc3BvbmQsIG9uIHBldXQgc3VnZ8OpcmVyIGxlIHJlc3RlIChleDogXCJkYXlzXCIpXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHVuaXRQYXJ0LnN1YnN0cmluZyhzdWdnZXN0ZWROdW1iZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChhZnRlckFuZFdpdGhvdXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBvbiBhIHRhcMOpIHF1ZWxxdWUgY2hvc2UgYXByw6hzIGxlIG5vbWJyZSwgdsOpcmlmaWVyIHNpIMOnYSBjb3JyZXNwb25kXG4gICAgICAgICAgICAgICAgLy8gTk9URToga25vd24gcm91Z2ggZWRnZSAtLSB0aGlzIGRyb3BzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG51bWJlciBhbmQgdW5pdCAoZS5nLiB0eXBpbmcgXCIzIGRheVwiIGFmdGVyIFwiYW5kXCIgcHJvZHVjZXNcbiAgICAgICAgICAgICAgICAvLyBcIi4uLmFuZCAzc1wiIGluc3RlYWQgb2YgXCIuLi5hbmQgMyBkYXlzXCIpLCBzbyB0aGUgcmVidWlsdFxuICAgICAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSB0aGVuIGZhaWxzIHRoZSBvdXRlciBwcmVmaXggZmlsdGVyIGJlbG93IGFuZCB0aGlzXG4gICAgICAgICAgICAgICAgLy8gd2hvbGUgYnJhbmNoIHNpbGVudGx5IGNvbnRyaWJ1dGVzIG5vIHN1Z2dlc3Rpb24uIFZlcmlmaWVkXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yOyBsZWZ0IGFsb25lIGFzIGEgbmFycm93XG4gICAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2ggaXNzdWUgcmF0aGVyIHRoYW4gZml4ZWQgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZFdpdGhvdXROdW1iZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7c3VnZ2VzdGVkTnVtYmVyfSR7cmVtYWluaW5nLnN1YnN0cmluZyhhZnRlckFuZFdpdGhvdXROdW1iZXIubGVuZ3RoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPbiBhIGp1c3RlIHRhcMOpIGxlIG5vbWJyZSwgc3VnZ8OpcmVyIGxlIHJlc3RlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHt1bml0UGFydH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWFjaGVkIGZvciBsYW5ndWFnZXMgdGhhdCBkb24ndCBzZXBhcmF0ZSB0aGUgbnVtYmVyIGFuZCB1bml0XG4gICAgICAgICAgICAvLyB3aXRoIGEgc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIjPlpKnlvoxcIiwgSmFwYW5lc2UgXCIz5pel5b6MXCIpOiB1bml0UGFydFxuICAgICAgICAgICAgLy8gdGhlbiBoYXMgbm8gc3BhY2UgYXQgYWxsLCBzbyB1bml0V29yZHMubGVuZ3RoID4gMSBhYm92ZSBpc1xuICAgICAgICAgICAgLy8gZmFsc2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBudW1iZXIgbWF0Y2hlcy4gTm90ZSB0aGlzIGhhc1xuICAgICAgICAgICAgLy8gaXRzIG93biByb3VnaCBlZGdlIHN5bW1ldHJpYyB0byB0aGUgb25lIGFib3ZlIC0tIHNpbmNlXG4gICAgICAgICAgICAvLyB1bml0UGFydCBoYXMgbm8gc3BhY2UsIHVuaXRQYXJ0LmluZGV4T2YoJyAnKSBpcyAtMSBhbmRcbiAgICAgICAgICAgIC8vIHVuaXRXaXRob3V0TnVtYmVyIGVuZHMgdXAgYmVpbmcgdGhlICp3aG9sZSogdW5pdFBhcnRcbiAgICAgICAgICAgIC8vIChpbmNsdWRpbmcgaXRzIG93biBsZWFkaW5nIG51bWJlciksIHNvIHRoZSByZXR1cm5lZCBzdWdnZXN0aW9uXG4gICAgICAgICAgICAvLyBkdXBsaWNhdGVzIHRoZSBudW1iZXIgKGUuZy4gXCLlnKggMyDlpKkg5ZKMIDQgNOWIhumQmOW+jFwiIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIFwiLi4u5ZKMIDTliIbpkJjlvoxcIikuIFZlcmlmaWVkIGFzIHRoZSBhY3R1YWwgY3VycmVudCBiZWhhdmlvcjtcbiAgICAgICAgICAgIC8vIGxlZnQgYWxvbmUgYXMgdGhlIHNhbWUga2luZCBvZiBuYXJyb3cgYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2hcbiAgICAgICAgICAgIC8vIGlzc3VlIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBhYm92ZSwgbm90IGZpeGVkIGhlcmUuXG4gICAgICAgICAgICBjb25zdCB1bml0V2l0aG91dE51bWJlciA9IHVuaXRQYXJ0LnN1YnN0cmluZyh1bml0UGFydC5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgICAgIGlmICh1bml0V2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYWZ0ZXJBbmQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9ICR7dW5pdFdpdGhvdXROdW1iZXJ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFbDqXJpZmllciBsZXMgcGxhZ2VzIGRlIGRhdGVzIHBhcnRpZWxsZXMgY29tbWUgXCJkZSBsdW5kaSDDoFwiIG91IFwiZnJvbSBtb25kYXkgdG9cIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImRlIGx1bmRpIGFcIiwgXCJkZSBsdW5kaSBhIHZcIiwgXCJkZSBsdW5kaSBhIHZlXCIsIGV0Yy5cbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHQoXCJmcm9tXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgY29uc3QgdG9QYXR0ZXJuID0gdChcInRvXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSBhcHLDqHMgXCLDoFwiIG91IFwiYVwiXG4gICAgY29uc3QgcmFuZ2VQYXJ0aWFsUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7ZnJvbVBhdHRlcm59fGRlfGR1KVxcXFxzKygke3QoXCJzdW5kYXlcIiwgbGFuZyl9fCR7dChcIm1vbmRheVwiLCBsYW5nKX18JHt0KFwidHVlc2RheVwiLCBsYW5nKX18JHt0KFwid2VkbmVzZGF5XCIsIGxhbmcpfXwke3QoXCJ0aHVyc2RheVwiLCBsYW5nKX18JHt0KFwiZnJpZGF5XCIsIGxhbmcpfXwke3QoXCJzYXR1cmRheVwiLCBsYW5nKX0pXFxcXHMrKCR7dG9QYXR0ZXJufXzDoHxhKShcXFxccysuKik/JGAsIFwiaVwiKTtcbiAgICBjb25zdCByYW5nZVBhcnRpYWxNYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJhbmdlUGFydGlhbFJlZ2V4KTtcbiAgICBpZiAocmFuZ2VQYXJ0aWFsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFmdGVyVG8gPSByYW5nZVBhcnRpYWxNYXRjaFs0XSA/IHJhbmdlUGFydGlhbE1hdGNoWzRdLnRyaW0oKSA6ICcnO1xuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiw6BcIiBvdSBcImFcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZVRvID0gaW5wdXRTdHIuc3Vic3RyaW5nKDAsIGlucHV0U3RyLmluZGV4T2YocmFuZ2VQYXJ0aWFsTWF0Y2hbM10pICsgcmFuZ2VQYXJ0aWFsTWF0Y2hbM10ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIEfDqW7DqXJlciBkZXMgc3VnZ2VzdGlvbnMgcG91ciBsZXMgam91cnMgZGUgZmluIHBvc3NpYmxlc1xuICAgICAgY29uc3QgYWxsRGF5cyA9IFtcbiAgICAgICAgdChcInN1bmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIm1vbmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInR1ZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ3ZWRuZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0aHVyc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcImZyaWRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInNhdHVyZGF5XCIsIGxhbmcpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gYWxsRGF5c1xuICAgICAgICAubWFwKGRheSA9PiB7XG4gICAgICAgICAgaWYgKGFmdGVyVG8pIHtcbiAgICAgICAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciwgZmlsdHJlciBsZXMgam91cnMgcXVpIGNvbW1lbmNlbnQgcGFyIGNlIHRleHRlXG4gICAgICAgICAgICBpZiAoZGF5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlclRvLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIC8vIFJlbXBsYWNlciBcImFmdGVyVG9cIiBwYXIgbGUgam91ciBjb21wbGV0XG4gICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlVG99ICR7ZGF5fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3RhbmRhcmQgcG91ciBsZXMgZGF0ZXMgcmVsYXRpdmVzIHNpbXBsZXNcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylgLCBcImlcIilcbiAgICBjb25zdCByZWxhdGl2ZURhdGUgPSBpbnB1dFN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChyZWxhdGl2ZURhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlbGF0aXZlRGF0ZVtyZWxhdGl2ZURhdGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluaG91cnNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5tb250aHNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtaW51dGVzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaG91cnNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJkYXlzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwid2Vla3NhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtb250aHNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICBdLmZpbHRlcihpdGVtcyA9PiBpdGVtcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmU6IGFueSBkaWdpdC1sZWQgaW5wdXQgKGluY2x1ZGluZ1xuICAgICAgLy8gc3VmZml4LXN0eWxlIFwiMyBkaWFzIGF0csOhc1wiKSBtYXRjaGVzIHRoaXMgcmVnZXhwIHRvbywgc2luY2UgaXRzXG4gICAgICAvLyBwcmVmaXggZ3JvdXAgaXMgb3B0aW9uYWwgLS0gcmV0dXJuaW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBtYWtlXG4gICAgICAvLyB0aGUgc3VmZml4LXBhdHRlcm4gY2hlY2sgYmVsb3cgdW5yZWFjaGFibGUgZGVhZCBjb2RlIGZvciBldmVyeVxuICAgICAgLy8gc3VmZml4LW9ubHkgbGFuZ3VhZ2UuXG4gICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZS9TcGFuaXNoIFwiMyBkaWFzIGF0csOhc1wiXG4gICAgLy8gKFggdW5pdCArIGFnb3N1ZmZpeCBtYXJrZXIpLCB0aGUgcGFzdC10ZW5zZSBtaXJyb3Igb2YgdGhlIHByZWZpeFxuICAgIC8vIHN1Z2dlc3Rpb25zIGFib3ZlLlxuICAgIGNvbnN0IGFnb1N1ZmZpeCA9IHQoXCJhZ29zdWZmaXhcIiwgbGFuZyk7XG4gICAgaWYgKGFnb1N1ZmZpeCAmJiBhZ29TdWZmaXggIT09IFwiTk9URk9VTkRcIikge1xuICAgICAgY29uc3Qgc3VmZml4TWF0Y2ggPSBpbnB1dFN0ci5tYXRjaCgvXihcXGQrKVxccysoXFx3KikvaSk7XG4gICAgICBpZiAoc3VmZml4TWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZURlbHRhID0gc3VmZml4TWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHN1ZmZpeFZhcmlhbnQgPSBhZ29TdWZmaXguc3BsaXQoJ3wnKVswXTtcblxuICAgICAgICBjb25zdCB1bml0VHlwZXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdW5pdFR5cGUgb2YgdW5pdFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgd29yZHMgPSB0KHVuaXRUeXBlLCBsYW5nKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYCR7dGltZURlbHRhfSAke3dvcmR9ICR7c3VmZml4VmFyaWFudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHN1Z2dlc3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtkYXlTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gTGUgcGFyc2VyIHBldXQgZ8OpcmVyIGxlcyBhYnLDqXZpYXRpb25zICh0aHUsIG1vbiwgc2F0LCBldGMuKSwgZG9uYyBvbiBkb2l0IGxlcyBwcm9wb3NlciBhdXNzaVxuICAgIGNvbnN0IHdlZWtkYXlzID0gW1xuICAgICAgeyBrZXk6ICdzdW5kYXknLCBhYmJyOiBbJ3N1biddIH0sXG4gICAgICB7IGtleTogJ21vbmRheScsIGFiYnI6IFsnbW9uJ10gfSxcbiAgICAgIHsga2V5OiAndHVlc2RheScsIGFiYnI6IFsndHVlJywgJ3R1ZXMnXSB9LFxuICAgICAgeyBrZXk6ICd3ZWRuZXNkYXknLCBhYmJyOiBbJ3dlZCddIH0sXG4gICAgICB7IGtleTogJ3RodXJzZGF5JywgYWJicjogWyd0aHUnLCAndGh1cicsICd0aHVycyddIH0sXG4gICAgICB7IGtleTogJ2ZyaWRheScsIGFiYnI6IFsnZnJpJ10gfSxcbiAgICAgIHsga2V5OiAnc2F0dXJkYXknLCBhYmJyOiBbJ3NhdCddIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGlucHV0TG93ZXIgPSBpbnB1dFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygd2Vla2RheXMpIHtcbiAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoLCBhbmQgZW4udHMgYWx3YXlzIGRlZmluZXMgYWxsXG4gICAgICAvLyBzZXZlbiB3ZWVrZGF5cywgc28gdGhpcyBndWFyZCBjYW4ndCBhY3R1YWxseSBiZSBmYWxzZS5cbiAgICAgIGNvbnN0IGRheU5hbWUgPSB0KGRheS5rZXksIGxhbmcpO1xuICAgICAgaWYgKCFkYXlOYW1lIHx8IGRheU5hbWUgPT09IFwiTk9URk9VTkRcIikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGRheU5hbWUuc3BsaXQoJ3wnKVswXS50cmltKCk7XG4gICAgICBjb25zdCBkYXlOYW1lTG93ZXIgPSBmaXJzdFZhcmlhbnQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIGxlIG5vbSBjb21wbGV0IGNvbW1lbmNlIHBhciBsJ2lucHV0ICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KGRheU5hbWVMb3dlciwgaW5wdXRMb3dlcikpIHtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWQgPSBmaXJzdFZhcmlhbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaXJzdFZhcmlhbnQuc2xpY2UoMSk7XG4gICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIHVuZSBhYnLDqXZpYXRpb24gY29ycmVzcG9uZCAtLSB0aGUgYWJicmV2aWF0aW9ucyBiZWxvdyBhcmVcbiAgICAgIC8vIEVuZ2xpc2gtb25seSAoZS5nLiBcIm1vblwiKSwgYnV0IGRheU5hbWUvZmlyc3RWYXJpYW50IGlzIHRyYW5zbGF0ZWRcbiAgICAgIC8vIChlLmcuIEZyZW5jaCBcImx1bmRpXCIpLCBzbyBmb3IgYW55IG5vbi1FbmdsaXNoIGxhbmd1YWdlIHRoZSBmdWxsLW5hbWVcbiAgICAgIC8vIGNoZWNrIGFib3ZlIG5ldmVyIG1hdGNoZXMgd2hpbGUgdGhpcyBhYmJyZXZpYXRpb24gY2hlY2sgc3RpbGwgZG9lcy5cbiAgICAgIC8vIFRoaXMgaXMgd2hhdCBsZXRzIEVuZ2xpc2ggd2Vla2RheSBhYmJyZXZpYXRpb25zIHdvcmsgYXMgYSBzaG9ydGN1dFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBhY3RpdmUgKHZlcmlmaWVkOiB0eXBpbmcgXCJtb25cIiB3aXRoXG4gICAgICAvLyBvbmx5IEZyZW5jaCBlbmFibGVkIGNvcnJlY3RseSBzdWdnZXN0cyBcIkx1bmRpXCIpLlxuICAgICAgZm9yIChjb25zdCBhYmJyIG9mIGRheS5hYmJyKSB7XG4gICAgICAgIGlmIChhYmJyLnN0YXJ0c1dpdGgoaW5wdXRMb3dlcikpIHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmluY2x1ZGVzKGNhcGl0YWxpemVkKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdChcInRvZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInllc3RlcmRheVwiLCBsYW5nKSxcbiAgICAgIHQoXCJ0b21vcnJvd1wiLCBsYW5nKSxcbiAgICBdLmZpbHRlcihpdGVtID0+IGZ1enp5TWF0Y2hlc1F1ZXJ5KGl0ZW0sIGlucHV0U3RyKSk7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb24pO1xuICAgIGlmICghcHJldmlldyB8fCBwcmV2aWV3ID09PSBzdWdnZXN0aW9uKSB7XG4gICAgICBlbC5zZXRUZXh0KHN1Z2dlc3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPYnNpZGlhbiByZWN5Y2xlcyBzdWdnZXN0aW9uLXJvdyBlbGVtZW50cyBhY3Jvc3MgcmVuZGVycyAodmlydHVhbGl6ZWRcbiAgICAvLyBsaXN0KSwgc28gYSBzdGFsZSBwcmV2aW91cyByZW5kZXIncyBjb250ZW50IG11c3QgYmUgY2xlYXJlZCBiZWZvcmVcbiAgICAvLyBhcHBlbmRpbmcgbmV3IHNwYW5zIC0tIG90aGVyd2lzZSBvbGQgdGV4dC9zcGFucyBzdGFjayB1cCBvbiB0b3Agb2ZcbiAgICAvLyBlYWNoIG90aGVyIG9uIHRoZSByZXVzZWQgZWxlbWVudC5cbiAgICBlbC5lbXB0eSgpO1xuICAgIGVsLmFkZENsYXNzKFwibmxkLXN1Z2dlc3Rpb24taXRlbVwiKTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXRleHRcIiwgdGV4dDogc3VnZ2VzdGlvbiB9KTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXByZXZpZXdcIiwgdGV4dDogcHJldmlldyB9KTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIGEgc3VnZ2VzdGlvbiB0byB0aGUgcGxhaW4tdGV4dCBkYXRlL3RpbWUgaXQgd291bGQgYWN0dWFsbHlcbiAgLy8gaW5zZXJ0IChubyBbW2xpbmtzXV0sIG5vIGFsaWFzKSAtLSBzaG93biBuZXh0IHRvIHRoZSBzdWdnZXN0aW9uIGluIHRoZVxuICAvLyBkcm9wZG93biBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXNvbHZlZCB2YWx1ZSBiZWZvcmUgcGlja2luZyBvbmUuXG4gIC8vIERlbGliZXJhdGVseSBtaXJyb3JzIHNlbGVjdFN1Z2dlc3Rpb24oKSdzIG93biBkYXRlL3RpbWUgcmVzb2x1dGlvblxuICAvLyAodGltZS1zdWdnZXN0aW9uIC8gZGF0ZS1yYW5nZSAvIGh5YnJpZC1kYXRlLXRpbWUgYnJhbmNoZXMpIHNvIHRoZVxuICAvLyBwcmV2aWV3IGNhbiBuZXZlciBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0IHNlbGVjdGluZyB0aGVcbiAgLy8gc3VnZ2VzdGlvbiBhY3R1YWxseSBwcm9kdWNlcyAtLSBhbmQsIHVubGlrZSBzZWxlY3RTdWdnZXN0aW9uKCksIG5ldmVyXG4gIC8vIHRvdWNoZXMgdGhlIGVkaXRvciBvciBoaXN0b3J5IGFuZCBjYW4ndCB0aHJvdzogYSBwYXJzaW5nIGZhaWx1cmUgaGVyZVxuICAvLyBqdXN0IG1lYW5zIG5vIHByZXZpZXcgaXMgc2hvd24sIG5vdCBhIGJyb2tlbiBzdWdnZXN0aW9uIGxpc3QuXG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb246IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSXNUaW1lKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCk7XG4gICAgICAgIC8vIHBhcnNlRGF0ZSgpL3BhcnNlVGltZSgpIG5ldmVyIHRocm93IC0tIG9uIHVucGFyc2VhYmxlIGlucHV0IHRoZXlcbiAgICAgICAgLy8gcmV0dXJuIGFuIE5MRFJlc3VsdCB3aXRoIGZvcm1hdHRlZFN0cmluZyBcIkludmFsaWQgZGF0ZVwiIGFuZCBhblxuICAgICAgICAvLyBpbnZhbGlkIG1vbWVudCwgbm90IGFuIGV4Y2VwdGlvbi4gQ2hlY2tpbmcgaXNWYWxpZCgpIGV4cGxpY2l0bHkgaXNcbiAgICAgICAgLy8gd2hhdCBhY3R1YWxseSBjYXRjaGVzIHRoYXQgY2FzZSAodGhlIHRyeS9jYXRjaCBiZWxvdyBpcyBvbmx5IGFcbiAgICAgICAgLy8gc2FmZXR5IG5ldCBmb3IgZ2VudWluZWx5IHVuZXhwZWN0ZWQgZXJyb3JzIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZCkuXG4gICAgICAgIGlmICghcGFyc2VkVGltZS5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFRpbWUuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGVSYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KSkuam9pbignLCAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXNbMF0gfHwgJ2VuJztcbiAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcbiAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgICAgaGFzVGltZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFwYXJzZWRSZXN1bHQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybTtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aW1lUGFydDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEYXRlU3VnZ2VzdDogZmFpbGVkIHRvIHJlc29sdmUgYXV0b3N1Z2dlc3QgcHJldmlldycsIHsgc3VnZ2VzdGlvbiwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gVXRpbGlzZXIgbCfDqWRpdGV1ciBkdSBjb250ZXh0ZSBzaSBkaXNwb25pYmxlLCBzaW5vbiBjaGVyY2hlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gICAgbGV0IGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuY29udGV4dD8uZWRpdG9yKSB7XG4gICAgICBlZGl0b3IgPSB0aGlzLmNvbnRleHQuZWRpdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVBbGlhcyA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgdHlwZWQgdGV4dCBhcyBhbGlhcyAoU2hpZnQpLCBwcmVmZXIgd2hhdCB0aGUgdXNlclxuICAgIC8vIGFjdHVhbGx5IHR5cGVkIG92ZXIgdGhlIHN1Z2dlc3Rpb24ncyBjYW5vbmljYWwgZGljdGlvbmFyeSBjYXNpbmdcbiAgICAvLyAoZS5nLiBGcmVuY2ggXCJkZW1haW5cIiB2cyB0aGUgZGljdGlvbmFyeSdzIFwiRGVtYWluXCIpIC0tIGJ1dCBvbmx5IHdoZW5cbiAgICAvLyB0aGV5IHR5cGVkIHRoZSBjb21wbGV0ZSB3b3JkL3BocmFzZSwganVzdCBpbiBhIGRpZmZlcmVudCBjYXNpbmc7IGFcbiAgICAvLyBwYXJ0aWFsIHF1ZXJ5IChcImRlbWFpXCIpIHdvdWxkIG1ha2UgZm9yIGEgYnJva2VuLWxvb2tpbmcgYWxpYXMsIHNvXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHN1Z2dlc3Rpb24gdGV4dCBpbiB0aGF0IGNhc2UuIExhbmd1YWdlLWFnbm9zdGljOlxuICAgIC8vIHRoaXMgb25seSBjb21wYXJlcyB0aGUgdHlwZWQgdGV4dCB0byB0aGUgc3VnZ2VzdGlvbiB0ZXh0LlxuICAgIGNvbnN0IHR5cGVkUXVlcnkgPSB0aGlzLmNvbnRleHQ/LnF1ZXJ5O1xuICAgIGNvbnN0IGFsaWFzVGV4dCA9ICh0eXBlZFF1ZXJ5ICYmIHR5cGVkUXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgPyB0eXBlZFF1ZXJ5XG4gICAgICA6IHN1Z2dlc3Rpb247XG4gICAgbGV0IGRhdGVTdHIgPSBcIlwiO1xuICAgIGxldCBtYWtlSW50b0xpbmsgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbms7XG5cbiAgICAvLyBXZSBjaGVjayBpZiB0aGUgaW5wdXQgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudCB1c2luZyB0aGUgcGFyc2VyIGxvZ2ljLlxuICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcblxuICAgIC8vIC0tLSBDT1JSRUNUSU9OIE1VTFRJTEFOR1VFIC0tLVxuICAgIC8vIFNpIGxlIHBhcnNlciBuJ2EgcGFzIGTDqXRlY3TDqSBsJ2hldXJlIChzb3V2ZW50IGxlIGNhcyBlbiBhbmdsYWlzIHBvdXIgXCJpbiAyIG1pbnV0ZXNcIiksXG4gICAgLy8gb24gZm9yY2UgbGEgZMOpdGVjdGlvbiBzaSBvbiB2b2l0IGRlcyBtb3RzIGNsw6lzIGV4cGxpY2l0ZXMgKG1pbiwgaG91ciwgZXRjKS5cbiAgICAvLyBJTVBPUlRBTlQ6IE5lIHBhcyBtYXRjaGVyIFwibVwiIGRhbnMgXCJtb250aFwiIC0gdsOpcmlmaWVyIHF1ZSBjJ2VzdCBiaWVuIHVuIG1vdCBkZSB0ZW1wc1xuICAgIGlmICghaGFzVGltZSkge1xuICAgICAgLy8gUmVnZXggcG91ciBkw6l0ZWN0ZXIgdW4gY2hpZmZyZSBzdWl2aSBkZSBtaW4vaG91ci9oZXVyZS9oIChtYWlzIHBhcyBcIm1cIiBzZXVsIHF1aSBwb3VycmFpdCDDqnRyZSBcIm1vbnRoXCIpXG4gICAgICAvLyBPbiB2w6lyaWZpZSBxdWUgXCJtXCIgZXN0IHN1aXZpIGRlIFwiaW5cIiwgXCJpbnNcIiwgb3UgZXN0IGVuIGZpbiBkZSBtb3QsIGV0IHBhcyBcIm9udGhcIiAobW9udGgpXG4gICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1hdGNoKGV4cGxpY2l0VGltZVJlZ2V4KSkge1xuICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLnBsdWdpbi5wYXJzZVRpbWUodGltZVBhcnQpLmZvcm1hdHRlZFN0cmluZztcbiAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgXG4gICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZGF0ZUxpc3QgJiYgZGF0ZVJhbmdlLmRhdGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSW50b0xpbmsgXG4gICAgICAgICAgICAgID8gZ2VuZXJhdGVNYXJrZG93bkxpbmsodGhpcy5hcHAsIGZvcm1hdHRlZClcbiAgICAgICAgICAgICAgOiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0ZVN0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmNpZW4gY29tcG9ydGVtZW50IChwbGFnZSlcbiAgICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICAgIGNvbnN0IHRvVHJhbnNsYXRpb24gPSB0KFwidG9cIiwgcHJpbWFyeUxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgc3RhcnRGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIGAgJHt0b1RyYW5zbGF0aW9ufSBgICsgZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBlbmRGb3JtYXR0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gRMOpasOgIGfDqXLDqSBjaS1kZXNzdXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShzdWdnZXN0aW9uKTtcblxuICAgICAgICAvLyAtLS0gT1BUSU1JU0FUSU9OIDogT21ldHRyZSBsYSBkYXRlIHBvdXIgZXhwcmVzc2lvbnMgcmVsYXRpdmVzIGNvdXJ0ZXMgYXVqb3VyZCdodWkgLS0tXG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBTVEFSVCAtLS1cbiAgICAgICAgLy8gSWYgYSB0aW1lIGlzIGRldGVjdGVkIEFORCBsaW5raW5nIGlzIGVuYWJsZWQsIHdlIHNwbGl0IHRoZSBsaW5rLlxuICAgICAgICAvLyBFeHBlY3RlZCByZXN1bHQ6IFtbWVlZWS1NTS1ERF1dIEhIOm1tXG4gICAgICAgIGlmIChoYXNUaW1lICYmIG1ha2VJbnRvTGluaykge1xuICAgICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7IC8vIFBhcyBkZSBsaWVuIG7DqWNlc3NhaXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDEuIEZvcm1hdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIDIuIEZvcm1hdCB0aGUgdGltZSBwYXJ0IChmYWxsYmFjayB0byBISDptbSBpZiBub3Qgc2V0KVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG5cbiAgICAgICAgICAgIC8vIDMuIEdlbmVyYXRlIHRoZSBtYXJrZG93biBsaW5rIE9OTFkgZm9yIHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGRhdGVTdHIgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGRhdGVQYXJ0LFxuICAgICAgICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICkgKyBcIiBcIiArIHRpbWVQYXJ0OyAvLyBBcHBlbmQgdGltZSBhcyBwbGFpbiB0ZXh0XG5cbiAgICAgICAgICAgIC8vIDQuIERpc2FibGUgc3RhbmRhcmQgbGlua2luZyBzaW5jZSB3ZSBjb25zdHJ1Y3RlZCBpdCBtYW51YWxseSBhYm92ZVxuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1RpbWUgJiYgIW1ha2VJbnRvTGluaykge1xuICAgICAgICAgIC8vIE3Dqm1lIGxvZ2lxdWUgc2kgcGFzIGRlIGxpZW4gbWFpcyBhdmVjIGhldXJlXG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gYCR7ZGF0ZVBhcnR9ICR7dGltZVBhcnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IgZm9yIGRhdGVzIHdpdGhvdXQgdGltZSAoZS5nLiwgQHRvbW9ycm93KVxuICAgICAgICAgIGRhdGVTdHIgPSBwYXJzZWRSZXN1bHQuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBFTkQgLS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgZGF0ZVN0cixcbiAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGVTdWdnZXN0OiBjb250ZXh0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVJhbmdlKGRhdGVTdHIsIHRoaXMuY29udGV4dC5zdGFydCwgdGhpcy5jb250ZXh0LmVuZCk7XG5cbiAgICAvLyBFbnJlZ2lzdHJlciBsYSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlIChkZSBtYW5pw6hyZSBhc3luY2hyb25lKVxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zICYmIFxuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbikuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXIoXG4gICAgY3Vyc29yOiBFZGl0b3JQb3NpdGlvbixcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBfZmlsZTogVEZpbGVcbiAgKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuY29udGV4dD8uc3RhcnQgfHwge1xuICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICBjaDogY3Vyc29yLmNoIC0gdHJpZ2dlclBocmFzZS5sZW5ndGgsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gZWRpdG9yLmdldFJhbmdlKHN0YXJ0UG9zLCBjdXJzb3IpO1xuXG4gICAgaWYgKCFxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gZWRpdG9yLmdldFJhbmdlKFxuICAgICAge1xuICAgICAgICBsaW5lOiBzdGFydFBvcy5saW5lLFxuICAgICAgICBjaDogc3RhcnRQb3MuY2ggLSAxLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0UG9zXG4gICAgKTtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYEBgIGFzIGEgcGFydCBvZiBhIHdvcmQgKGUuZy4gcGFydCBvZiBhbiBlbWFpbCBhZGRyZXNzKVxuICAgIGlmIChwcmVjZWRpbmdDaGFyICYmIC9bYGEtekEtWjAtOV0vLnRlc3QocHJlY2VkaW5nQ2hhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRQb3MsXG4gICAgICBlbmQ6IGN1cnNvcixcbiAgICAgIHF1ZXJ5OiBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcikuc3Vic3RyaW5nKHRyaWdnZXJQaHJhc2UubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zb21lKGxhbmcgPT4ge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChgJHt0aW1lV29yZH06YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMZW5ndGggb2YgdGhlIFwiPFRpbWVXb3JkPjpcIiBwcmVmaXggdGhhdCBnZXRUaW1lU3VnZ2VzdGlvbnMoKSBidWlsZHMgaXRzXG4gIC8vIHN1Z2dlc3Rpb25zIHdpdGgsIHNvIGNhbGxlcnMgY2FuIHN0cmlwIGV4YWN0bHkgdGhhdCBtYW55IGNoYXJhY3RlcnNcbiAgLy8gaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBsZW5ndGggLS0gXCJUaW1lOlwiIGlzIDUgY2hhcnMgb25seSBpbiBFbmdsaXNoIGFuZFxuICAvLyBhIGZldyBvdGhlcnMgYnkgY29pbmNpZGVuY2UgKGUuZy4gRnJlbmNoIFwiaGV1cmU6XCIgaXMgNiwgSXRhbGlhbiBcIm9yYTpcIlxuICAvLyBpcyA0LCBDaGluZXNlIFwi5pmC6ZaTOlwiIGlzIDMgVVRGLTE2IGNvZGUgdW5pdHMpLlxuICBwcm90ZWN0ZWQgZ2V0VGltZVByZWZpeExlbmd0aChzdWdnZXN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGAke3RpbWVXb3JkfTpgO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXgubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bmlxdWUoc3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSA6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuICAgIH0pXG4gIH1cbn0iLCJpbXBvcnQgeyBhZGp1c3RDdXJzb3IsIGdldFNlbGVjdGVkVGV4dCwgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlQ29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLCBtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIC8vIEwnw6lkaXRldXIgcG91cnJhaXQgbmUgcGFzIMOqdHJlIGRpc3BvbmlibGUgKHBhciBleGVtcGxlIGRhbnMgdW5lIHZ1ZSBub24tbWFya2Rvd24pXG4gIGlmICghZWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xuICAvLyBDYXB0dXJlZCBhZnRlciBnZXRTZWxlY3RlZFRleHQoKTogd2hlbiBub3RoaW5nIHdhcyBzZWxlY3RlZCwgdGhhdCBjYWxsXG4gIC8vIGV4cGFuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCBhdCB0aGUgY3Vyc29yLCB3aGljaCBtb3ZlcyB3aGVyZSB0aGVcbiAgLy8gc2VsZWN0aW9uIGFjdHVhbGx5IGVuZHMuIENhcHR1cmluZyB0aGUgY3Vyc29yIGJlZm9yZWhhbmQgd291bGQgYW5jaG9yXG4gIC8vIGFkanVzdEN1cnNvcigpJ3Mgb2Zmc2V0IG1hdGggdG8gdGhlIHByZS1leHBhbnNpb24gcG9zaXRpb24gaW5zdGVhZCBvZlxuICAvLyB0aGUgZWRnZSBvZiB0aGUgdGV4dCB0aGF0J3MgYWJvdXQgdG8gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoXCJ0b1wiKTtcblxuICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAvLyBDJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICBsZXQgbmV3U3RyID0gXCJcIjtcbiAgICBcbiAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0ZUxpbmtzID0gZGF0ZVJhbmdlLmRhdGVMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbWyR7Zm9ybWF0dGVkfV1dYDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmb3JtYXR0ZWR9XSgke2Zvcm1hdHRlZH0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBcImNsZWFuXCIgYW5kIFwidGltZVwiIGJvdGggcmVzb2x2ZSB0byB0aGUgcGxhaW4gZm9ybWF0dGVkIGRhdGUgaGVyZTpcbiAgICAgICAgICAvLyBlYWNoIGRhdGVMaXN0IGVudHJ5IGlzIGEgd2hvbGUgY2FsZW5kYXIgZGF5IHdpdGggbm8gcGFyc2VkIHRpbWVcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHNvIFwidGltZVwiIGZvciBhIHJhbmdlIG1lYW5zIHRoZSBzYW1lIGFzIFwiY2xlYW5cIiAoc2VlXG4gICAgICAgICAgLy8gdGhlIGlkZW50aWNhbCBtb2RlID09IFwidGltZVwiIGNhc2UgaW4gdGhlIG5vbi1saXN0IGJyYW5jaCBiZWxvdykuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXdTdHIgPSBkYXRlTGlua3Muam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2Uuc3RhcnRNb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgIFxuICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgLy8gR8OpbsOpcmVyIGRlcyBsaWVucyBwb3VyIGxhIHBsYWdlIDogW1tzdGFydF1dIHRvIFtbZW5kXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtzdGFydEZvcm1hdHRlZH1dXSAke3RvVHJhbnNsYXRpb259IFtbJHtlbmRGb3JtYXR0ZWR9XV1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgIC8vIExpZW4gTWFya2Rvd24gc3RhbmRhcmRcbiAgICAgICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZVJhbmdlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAgICAgLy8gVGV4dGUgYnJ1dCBzYW5zIGxpZW5cbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgICAgICAvLyBQYXMgZCdoZXVyZSBwb3VyIGxlcyBwbGFnZXNcbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obmV3U3RyKTtcbiAgICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5vbiwgdHJhaXRlciBjb21tZSB1bmUgZGF0ZSBub3JtYWxlXG4gIGNvbnN0IGRhdGUgPSBwbHVnaW4ucGFyc2VEYXRlKHNlbGVjdGVkVGV4dCk7XG5cbiAgaWYgKCFkYXRlLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2gsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS0tIE1PRElGSUNBVElPTiBJTlRFTExJR0VOVEUgVjAuOSAtLS1cbiAgLy8gT24gdsOpcmlmaWUgc2kgdW5lIGhldXJlIGVzdCBwcsOpc2VudGUgZGFucyBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpXG4gIGNvbnN0IGhhc1RpbWUgPSBwbHVnaW4uaGFzVGltZUNvbXBvbmVudChzZWxlY3RlZFRleHQpO1xuXG4gIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgY29uc3QgaXNUb2RheSA9IGRhdGUubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHNlbGVjdGVkVGV4dCwgcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gIGNvbnN0IHNob3VsZE9taXREYXRlID0gcGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSAmJiBpc1RvZGF5ICYmIGlzUmVsYXRpdmVTaG9ydFRlcm0gJiYgaGFzVGltZTtcblxuICBsZXQgbmV3U3RyID0gXCJcIjtcblxuICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgIC8vIEMnZXN0IGxlIG1vZGUgcGFyIGTDqWZhdXQgKENyZWF0ZSBMaW5rKVxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBuZXdTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENBUyBIWUJSSURFIDogW1tEYXRlXV0gSGV1cmVcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2EgcGFzIG1pcyBkZSBmb3JtYXQgZCdoZXVyZSwgb24gZm9yY2UgSEg6bW0gcGFyIHPDqWN1cml0w6lcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZVBhcnR9XV0gJHt0aW1lUGFydH1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ0FTIENMQVNTSVFVRSA6IFtbRGF0ZV1dXG4gICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9XV1gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZCBbdGV4dGVdKGRhdGUpXG4gICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9KWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgIG5ld1N0ciA9IGAke2RhdGUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgIC8vIEp1c3RlIGwnaGV1cmVcbiAgICBjb25zdCB0aW1lID0gcGx1Z2luLnBhcnNlVGltZShzZWxlY3RlZFRleHQpO1xuICAgIG5ld1N0ciA9IGAke3RpbWUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH1cblxuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgZWRpdG9yLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNb21lbnRDb21tYW5kKFxuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLFxuICBkYXRlOiBEYXRlLFxuICBmb3JtYXQ6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHsgd29ya3NwYWNlIH0gPSBwbHVnaW4uYXBwO1xuICBjb25zdCBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3Iod29ya3NwYWNlKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm93Q29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKTogdm9pZCB7XG4gIGNvbnN0IGZvcm1hdCA9IGAke3BsdWdpbi5zZXR0aW5ncy5mb3JtYXR9JHtwbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yfSR7cGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXR9YDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQ7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBpbnNlcnRNb21lbnRDb21tYW5kKHBsdWdpbiwgZGF0ZSwgZm9ybWF0KTtcbn0iLCJpbXBvcnQgeyBQbHVnaW4sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFbnRyeSB7XG4gIGNvdW50OiBudW1iZXI7IC8vIE5vbWJyZSBkZSBmb2lzIHF1ZSBjZXR0ZSBzdWdnZXN0aW9uIGEgw6l0w6kgc8OpbGVjdGlvbm7DqWVcbiAgbGFzdFVzZWQ6IG51bWJlcjsgLy8gRGF0ZS5ub3coKSBkZSBsYSBkZXJuacOocmUgc8OpbGVjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkhpc3Rvcnkge1xuICBbc3VnZ2VzdGlvbjogc3RyaW5nXTogSGlzdG9yeUVudHJ5O1xufVxuXG5jb25zdCBNQVhfSElTVE9SWV9TSVpFID0gMTAwOyAvLyBMaW1pdGUgZHUgbm9tYnJlIGQnZW50csOpZXMgZGFucyBsJ2hpc3RvcmlxdWVcbmNvbnN0IEhJU1RPUllfRklMRSA9IFwicGx1Z2lucy9ubGRhdGVzLXJldml2ZWQvaGlzdG9yeS5qc29uXCI7XG5jb25zdCBDTEVBTlVQX0lOVEVSVkFMID0gMzAwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyA1IG1pbnV0ZXNcblxuLy8gQSBzdWdnZXN0aW9uJ3MgcmFuayBpcyBmcmVxdWVuY3kgd2VpZ2h0ZWQgYnkgcmVjZW5jeSwgbm90IHJhdyBsaWZldGltZVxuLy8gY291bnQ6IHdpdGhvdXQgZGVjYXksIHNvbWV0aGluZyBzZWxlY3RlZCA1MCB0aW1lcyBzaXggbW9udGhzIGFnbyB3b3VsZFxuLy8gcGVybWFuZW50bHkgb3V0cmFuayBzb21ldGhpbmcgc2VsZWN0ZWQgMyB0aW1lcyB0aGlzIHdlZWssIGV2ZW4gdGhvdWdoXG4vLyB0aGUgbGF0dGVyIGlzIGNsZWFybHkgbW9yZSByZWxldmFudCAqbm93Ki4gSGFsdmluZyB0aGUgd2VpZ2h0IGV2ZXJ5XG4vLyBIQUxGX0xJRkVfTVMgb2YgaW5hY3Rpdml0eSBtZWFucyBldmVyeSByZXVzZSBcInJlZnJlc2hlc1wiIGFuIGVudHJ5LCB3aGlsZVxuLy8gZ2VudWluZWx5IHN0YWxlIGVudHJpZXMgZmFkZSBvdXQgaW5zdGVhZCBvZiBjYW1waW5nIHRoZSB0b3Agb2YgdGhlIGxpc3Rcbi8vIGZvcmV2ZXIuXG5jb25zdCBIQUxGX0xJRkVfTVMgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDMwIGpvdXJzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSBoaXN0b3J5OiBTZWxlY3Rpb25IaXN0b3J5ID0ge307XG4gIHByaXZhdGUgaGlzdG9yeUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlZFRvcFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGNhY2hlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBJRCBkZSBsJ2ludGVydmFsbGUgZGUgbmV0dG95YWdlXG5cbiAgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLnN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogRMOpbWFycmUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlIGRlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDUgbWludXRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpO1xuICAgIH0sIENMRUFOVVBfSU5URVJWQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlICjDoCBhcHBlbGVyIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24pXG4gICAqL1xuICBzdG9wUGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFudXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3R1ZSB1biBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIHNpIG7DqWNlc3NhaXJlIGV0IG5ldHRvaWUgbGVzIGVudHLDqWVzIHBldSB1dGlsaXPDqWVzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1QZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhpc3RvcnlMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoO1xuICAgIFxuICAgIC8vIFNpIGwnaGlzdG9yaXF1ZSBkw6lwYXNzZSBsYSBsaW1pdGUsIGxlIHLDqWR1aXJlXG4gICAgaWYgKGN1cnJlbnRTaXplID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlOiByw6lkdWl0IGRlICR7Y3VycmVudFNpemV9IMOgICR7T2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGh9IGVudHLDqWVzYCk7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRpdCB1biBoaXN0b3JpcXVlIGNoYXJnw6kgZGVwdWlzIGxlIGRpc3F1ZSB2ZXJzIGxlIGZvcm1hdCBhY3R1ZWwuXG4gICAqIExlcyBmaWNoaWVycyDDqWNyaXRzIHBhciB1bmUgdmVyc2lvbiBhbnTDqXJpZXVyZSBkdSBwbHVnaW4gc3RvY2tlbnQgdW5cbiAgICogc2ltcGxlIGNvbXB0ZXVyIChgeyBbc3VnZ2VzdGlvbl06IG51bWJlciB9YCkgYXUgbGlldSBkZVxuICAgKiBgeyBbc3VnZ2VzdGlvbl06IEhpc3RvcnlFbnRyeSB9YCAtLSBvbiBkb25uZSDDoCBjZXMgZW50csOpZXMgdW5cbiAgICogbGFzdFVzZWQgZGUgXCJtYWludGVuYW50XCIgcG91ciBuZSBwYXMgbGVzIGZhaXJlIGRpc3BhcmHDrnRyZVxuICAgKiBpbW3DqWRpYXRlbWVudCBkdSBjbGFzc2VtZW50IGxlIHRlbXBzIHF1J3VuIG5vdXZlbCB1c2FnZSBsZXMgcmFmcmHDrmNoaXNzZS5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZUhpc3RvcnkocmF3OiB1bmtub3duKTogU2VsZWN0aW9uSGlzdG9yeSB7XG4gICAgY29uc3QgbWlncmF0ZWQ6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgICAvLyB0eXBlb2YgW10gPT09IFwib2JqZWN0XCIsIHNvIGEgdG9wLWxldmVsIEpTT04gYXJyYXkgKGNvcnJ1cHRlZCBmaWxlLFxuICAgIC8vIHN0cmF5IG1hbnVhbCBlZGl0KSB3b3VsZCBvdGhlcndpc2Ugc2FpbCB0aHJvdWdoIHRoZSBjYWxsZXInc1xuICAgIC8vIGB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiYCBjaGVjayBhbmQgZ2V0IHdhbGtlZCBoZXJlOiBPYmplY3QuZW50cmllcygpXG4gICAgLy8gb24gYW4gYXJyYXkgeWllbGRzIG51bWVyaWMtc3RyaW5nIGtleXMgKFwiMFwiLCBcIjFcIiwgLi4uKSB0aGF0IHdvdWxkIGJlXG4gICAgLy8gbWlncmF0ZWQgaW50byBib2d1cyBoaXN0b3J5IGVudHJpZXMuXG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIHJldHVybiBtaWdyYXRlZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7IGNvdW50OiB2YWx1ZSwgbGFzdFVzZWQ6IG5vdyB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5jb3VudCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkubGFzdFVzZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDb3B5IG9ubHkgdGhlIHR3byBleHBlY3RlZCBmaWVsZHMgcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcGFyc2VkIG9iamVjdCByZWZlcmVuY2UsIHNvIHVuZXhwZWN0ZWQgZXh0cmEgcHJvcGVydGllcyBvbiBhXG4gICAgICAgIC8vIG1hbGZvcm1lZCBlbnRyeSBhcmVuJ3Qgc2lsZW50bHkgY2FycmllZCBmb3J3YXJkIGFuZCByZS1wZXJzaXN0ZWQuXG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7XG4gICAgICAgICAgY291bnQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50LFxuICAgICAgICAgIGxhc3RVc2VkOiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgKG1hbGZvcm1lZCBlbnRyeSkgaXMgc2lsZW50bHkgZHJvcHBlZCByYXRoZXIgdGhhblxuICAgICAgLy8gY2FycmllZCBmb3J3YXJkIC0tIGEgc2luZ2xlIGJhZCBlbnRyeSBzaG91bGRuJ3QgcG9pc29uIHRoZSByZXN0LlxuICAgIH1cbiAgICByZXR1cm4gbWlncmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2NvcmUgZCd1bmUgZW50csOpZSA6IGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciBkJ3V0aWxpc2F0aW9uXG4gICAqICh2b2lyIEhBTEZfTElGRV9NUykuIFV0aWxpc8OpIHBvdXIgdHJpZXIvdHJpbW1lciBsJ2hpc3RvcmlxdWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTY29yZShlbnRyeTogSGlzdG9yeUVudHJ5LCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWdlTXMgPSBNYXRoLm1heCgwLCBub3cgLSBlbnRyeS5sYXN0VXNlZCk7XG4gICAgY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjUsIGFnZU1zIC8gSEFMRl9MSUZFX01TKTtcbiAgICByZXR1cm4gZW50cnkuY291bnQgKiBkZWNheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGRlcHVpcyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgbG9hZEhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKTtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMubWlncmF0ZUhpc3RvcnkocGFyc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGV4aXN0cygpL3JlYWQoKSBjYWxscyBhYm92ZSBhbHJlYWR5IGhhbmRsZSB0aGUgXCJmaWxlIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IHlldFwiIGNhc2UgZXhwbGljaXRseSAodGhlIGBpZiAoZXhpc3RzKWAgZ3VhcmQpIC0tIHJlYWNoaW5nXG4gICAgICAvLyB0aGlzIGNhdGNoIG1lYW5zIGFuIGFjdHVhbCBhbm9tYWx5IChjb3JydXB0ZWQgSlNPTiBmcm9tIGFuXG4gICAgICAvLyBpbnRlcnJ1cHRlZCB3cml0ZSwgYSBzeW5jIGNvbmZsaWN0LCBldGMuKSwgc28gbG9nIGl0IGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgdGhlIHVzZXIncyBoaXN0b3J5IHdpdGggbm8gZGlhZ25vc3RpYyB0cmFpbC5cbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGxvYWRpbmcgaGlzdG9yeTpcIiwgeyBlcnJvciB9KTtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhpc3RvcnlMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGRhbnMgbGUgc3RvY2thZ2VcbiAgICovXG4gIGFzeW5jIHNhdmVIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIFxuICAgICAgLy8gQ3LDqWVyIGxlIGRvc3NpZXIgc2kgbsOpY2Vzc2FpcmVcbiAgICAgIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkaXIpO1xuICAgICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5LCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHNhdmluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIHN1Z2dlc3Rpb24gZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdWdnZXN0aW9uLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IGhpc3Rvcnkga2V5cyBhcmUgc3RvcmVkIGZ1bGx5IGxvd2VyY2FzZSAoc2VlXG4gICAgLy8gcmVjb3JkU2VsZWN0aW9uKCkpLCBzbyBhIG11bHRpLXdvcmQgc3VnZ2VzdGlvbiBsaWtlIFwibmV4dCBmcmlkYXlcIlxuICAgIC8vIHdvdWxkIG90aGVyd2lzZSBkaXNwbGF5IGFzIFwiTmV4dCBmcmlkYXlcIiAtLSBvbmx5IHRoZSB2ZXJ5IGZpcnN0XG4gICAgLy8gbGV0dGVyIGNhcGl0YWxpemVkIC0tIGluY29uc2lzdGVudCB3aXRoIHRoZSBcIk5leHQgRnJpZGF5XCIgdGhhdCBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gc291cmNlcyAoZS5nLiBkYXRlLXN1Z2dlc3QudHMncyBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucylcbiAgICAvLyBzaG93IGZvciB0aGUgZXhhY3Qgc2FtZSBwaHJhc2UgaW4gdGhlIHNhbWUgZHJvcGRvd24uXG4gICAgcmV0dXJuIHRyaW1tZWRcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSB1bmUgc8OpbGVjdGlvbiBkYW5zIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkU2VsZWN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIC8vIE5vcm1hbGlzZXIgbGEgc3VnZ2VzdGlvbiAoZW4gbWludXNjdWxlcyBwb3VyIGxhIGNsw6ksIMOpdml0ZSBsZXMgZG91YmxvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmNyw6ltZW50ZXIgbGUgY29tcHRldXIgZXQgcmFmcmHDrmNoaXIgbGEgZGF0ZSBkJ3V0aWxpc2F0aW9uICh1dGlsaXNlciBsYSBjbMOpIGVuIG1pbnVzY3VsZXMpXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy5oaXN0b3J5W25vcm1hbGl6ZWRdID0ge1xuICAgICAgY291bnQ6IChleGlzdGluZz8uY291bnQgfHwgMCkgKyAxLFxuICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIC8vIExpbWl0ZXIgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBzaSBuw6ljZXNzYWlyZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aCA+IE1BWF9ISVNUT1JZX1NJWkUpIHtcbiAgICAgIHRoaXMudHJpbUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZVxuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgIC8vIFNhdmUgKGFzeW5jaHJvbm91c2x5LCBkb24ndCBibG9jaylcbiAgICB0aGlzLnNhdmVIaXN0b3J5KCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lkdWl0IGxhIHRhaWxsZSBkZSBsJ2hpc3RvcmlxdWUgZW4gZ2FyZGFudCBsZXMgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdHJpbUhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gR2FyZGVyIHVuaXF1ZW1lbnQgbGVzIE1BWF9ISVNUT1JZX1NJWkUgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICBjb25zdCB0cmltbWVkID0gZW50cmllcy5zbGljZSgwLCBNQVhfSElTVE9SWV9TSVpFKTtcblxuICAgIHRoaXMuaGlzdG9yeSA9IE9iamVjdC5mcm9tRW50cmllcyh0cmltbWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGV0IG1ldCDDoCBqb3VyIGxlIGNhY2hlICjDoCBhcHBlbGVyIGF1IGTDqW1hcnJhZ2UpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0IMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIHBlcnRpbmVudGVzXG4gICAqIChmcsOpcXVlbmNlIHBvbmTDqXLDqWUgcGFyIGxhIGZyYcOuY2hldXIsIHZvaXIgY29tcHV0ZVNjb3JlKCkpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaGlzdG9yeSk7XG5cbiAgICAvLyBUcmllciBwYXIgc2NvcmUgKGTDqWNyb2lzc2FudClcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKTtcblxuICAgIC8vIE1ldHRyZSBlbiBjYWNoZSBsZXMgdG9wIHN1Z2dlc3Rpb25zIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBjYXBpdGFsaXPDqWVcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gZW50cmllcy5zbGljZSgwLCA1MCkubWFwKChbc3VnZ2VzdGlvbl0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbilcbiAgICApO1xuICAgIHRoaXMuY2FjaGVWYWxpZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKiBAcGFyYW0gbGltaXQgTm9tYnJlIG1heGltdW0gZGUgc3VnZ2VzdGlvbnMgw6AgcmV0b3VybmVyXG4gICAqL1xuICBnZXRUb3BTdWdnZXN0aW9uc1N5bmMobGltaXQgPSAxMCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVWYWxpZCkge1xuICAgICAgLy8gU2kgbGUgY2FjaGUgbidlc3QgcGFzIHZhbGlkZSwgcmV0b3VybmVyIHVuIHRhYmxlYXUgdmlkZVxuICAgICAgLy8gTGUgY2FjaGUgc2VyYSBtaXMgw6Agam91ciBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb25cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIGZyw6lxdWVudGVzLCB0cmnDqWVzIHBhciBmcsOpcXVlbmNlIChhc3luYywgbWV0IMOgIGpvdXIgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGFzeW5jIGdldFRvcFN1Z2dlc3Rpb25zKGxpbWl0ID0gMTApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpaW5pdGlhbGlzZSBsJ2hpc3RvcmlxdWVcbiAgICovXG4gIGFzeW5jIGNsZWFySGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcHJpbWUgdW5lIHNldWxlIGVudHLDqWUgZGUgbCdoaXN0b3JpcXVlIChnZXN0aW9uIGZpbmUsIHBhciBvcHBvc2l0aW9uXG4gICAqIMOgIGNsZWFySGlzdG9yeSgpIHF1aSB2aWRlIHRvdXQpLiBgc3VnZ2VzdGlvbmAgcGV1dCDDqnRyZSBsYSBmb3JtZSBub3JtYWxpc8OpZVxuICAgKiBhZmZpY2jDqWUgw6AgbCd1dGlsaXNhdGV1ciAoZXg6IFwiTmV4dCBGcmlkYXlcIikgb3UgbGEgY2zDqSBicnV0ZSBzdG9ja8OpZSBlblxuICAgKiBpbnRlcm5lIChleDogXCJuZXh0IGZyaWRheVwiKSAtLSBsZXMgZGV1eCBzb250IGFjY2VwdMOpZXMgcHVpc3F1ZVxuICAgKiBsJ3V0aWxpc2F0ZXVyIG5lIHZvaXQgamFtYWlzIGxhIGNsw6kgYnJ1dGUsIHNldWxlbWVudCBsYSB2ZXJzaW9uIGFmZmljaMOpZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUVudHJ5KHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghKG5vcm1hbGl6ZWQgaW4gdGhpcy5oaXN0b3J5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgdG91dGVzIGxlcyBlbnRyw6llcyBkZSBsJ2hpc3RvcmlxdWUsIHRyacOpZXMgcGFyIHBlcnRpbmVuY2VcbiAgICogKHZvaXIgY29tcHV0ZVNjb3JlKCkpLCBhdmVjIGxldXJzIG3DqXRhZG9ubsOpZXMgLS0gdXRpbGlzw6kgcGFyIGwnaW50ZXJmYWNlXG4gICAqIGRlIGdlc3Rpb24gZmluZSBkZSBsJ2hpc3RvcmlxdWUgKGFmZmljaGFnZSArIHN1cHByZXNzaW9uIGluZGl2aWR1ZWxsZSkuXG4gICAqIENvbnRyYWlyZW1lbnQgw6AgZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKCkvZ2V0VG9wU3VnZ2VzdGlvbnMoKSwgcXVpIG5lXG4gICAqIHJlbnZvaWVudCBxdWUgbGUgdGV4dGUgYWZmaWNow6ksIGNlY2kgcmVudm9pZSBhdXNzaSBsYSBjbMOpIGJydXRlIChwb3VyXG4gICAqIHJlbW92ZUVudHJ5KCkpIGV0IGxlcyBtw6l0YWRvbm7DqWVzIGNvdW50L2xhc3RVc2VkIChwb3VyIGwnYWZmaWNoYWdlKS5cbiAgICovXG4gIGFzeW5jIGdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk6IFByb21pc2U8QXJyYXk8eyBrZXk6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBjb3VudDogbnVtYmVyOyBsYXN0VXNlZDogbnVtYmVyIH0+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKVxuICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGRpc3BsYXk6IHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihrZXkpLFxuICAgICAgICBjb3VudDogZW50cnkuY291bnQsXG4gICAgICAgIGxhc3RVc2VkOiBlbnRyeS5sYXN0VXNlZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlcyByZXNzb3VyY2VzIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0IChwb3VyIGRlYnVnKVxuICAgKi9cbiAgYXN5bmMgZ2V0SGlzdG9yeSgpOiBQcm9taXNlPFNlbGVjdGlvbkhpc3Rvcnk+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5oaXN0b3J5IH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5cbi8vIENoZWFwLCBub24tY3J5cHRvZ3JhcGhpYyBzdHJpbmcgaGFzaCAoZGpiMiB2YXJpYW50KSB1c2VkIHRvIGZpbmdlcnByaW50XG4vLyB0aGUgc2Nhbm5lZCBjb250ZXh0IHdpbmRvdyBmb3IgY2FjaGUga2V5cyAtLSBmYXN0IGVub3VnaCB0byBydW4gb24gZXZlcnlcbi8vIGtleXN0cm9rZSB3aGlsZSBzdGlsbCBkaXN0aW5ndWlzaGluZyBkaWZmZXJlbnQgY29udGVudCByZWxpYWJseS5cbmZ1bmN0aW9uIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgaGFzaCA9IDUzODE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKSkgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufVxuXG5jb25zdCBDT05URVhUX0xJTkVTID0gMTA7IC8vIE5vbWJyZSBkZSBsaWduZXMgw6AgYW5hbHlzZXIgYXZhbnQgZXQgYXByw6hzIGxlIGN1cnNldXJcbmNvbnN0IE1BWF9EQVRFU19UT19FWFRSQUNUID0gMTA7IC8vIE5vbWJyZSBtYXhpbXVtIGRlIGRhdGVzIMOgIGV4dHJhaXJlIGR1IGNvbnRleHRlXG5jb25zdCBNQVhfQ0FDSEVfU0laRSA9IDIwMDsgLy8gTGltaXRlIGRlIHRhaWxsZSBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuY29uc3QgQ0FDSEVfVElNRU9VVCA9IDUwMDA7IC8vIDUgc2Vjb25kZXMgZGUgY2FjaGVcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDsgLy8gTmV0dG95YWdlIHDDqXJpb2RpcXVlIHRvdXRlcyBsZXMgMzAgc2Vjb25kZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0SW5mbyB7XG4gIGRhdGVzSW5Db250ZXh0OiBzdHJpbmdbXTsgLy8gRGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKGZvcm1hdHMgbmF0dXJlbHMgZMOpdGVjdMOpcylcbiAgdGl0bGU/OiBzdHJpbmc7IC8vIFRpdHJlIGRlIGxhIG5vdGVcbiAgdGFnczogc3RyaW5nW107IC8vIFRhZ3MgZGUgbGEgbm90ZVxuICB0aW1lc3RhbXA6IG51bWJlcjsgLy8gVGltZXN0YW1wIGRlIGNyw6lhdGlvbiBwb3VyIGxlIG5ldHRveWFnZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0QW5hbHl6ZXIge1xuICBwcml2YXRlIGFwcDogQXBwO1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgY2FjaGU6IExSVUNhY2hlPHN0cmluZywgQ29udGV4dEluZm8+OyAvLyBDYWNoZSB0ZW1wb3JhaXJlIHBhciBmaWNoaWVyIGF2ZWMgbGltaXRlIGRlIHRhaWxsZVxuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcbiAgXG4gIC8vIFBhdHRlcm5zIHJlZ2V4IHBvdXIgbGEgZMOpdGVjdGlvbiBkZSBkYXRlcyAoZ8OpbsOpcsOpcyBkeW5hbWlxdWVtZW50KVxuICBwcml2YXRlIGRhdGVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz4oTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGVQYXR0ZXJucygpO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZHUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gTmV0dG95ZXIgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cEV4cGlyZWRFbnRyaWVzKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIGVudHLDqWVzIGV4cGlyw6llcyBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZEVudHJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBQYXJjb3VyaXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAodmFsdWUudGltZXN0YW1wICYmIChub3cgLSB2YWx1ZS50aW1lc3RhbXApID4gQ0FDSEVfVElNRU9VVCkge1xuICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByaW1lciBsZXMgZW50csOpZXMgZXhwaXLDqWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChrZXlzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgZHUgY2FjaGUgZGUgY29udGV4dGU6ICR7a2V5c1RvRGVsZXRlLmxlbmd0aH0gZW50csOpZXMgc3VwcHJpbcOpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBsZXMgcGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIGRhbnMgdG91dGVzIGxlcyBsYW5ndWVzIGFjdGl2w6llc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHRjID0gbmV3IFRyYW5zbGF0aW9uQ29sbGVjdG9yKHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheUtleXMuZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lV29yZFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoJ2luJyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWy4uLnRjLmNvbGxlY3RXb3JkcygnbmV4dCcpLCAuLi50Yy5jb2xsZWN0V29yZHMoJ2xhc3QnKV0pO1xuXG4gICAgdGhpcy5kYXRlUGF0dGVybnMgPSBbXTtcblxuICAgIC8vIFxcYiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIFxcdywgd2hpY2ggaXMgQVNDSUktb25seTogaXQgbmV2ZXIgbWF0Y2hlc1xuICAgIC8vIGFyb3VuZCBDSksgY2hhcmFjdGVycyAobm8gYm91bmRhcnkgZXhpc3RzIGJldHdlZW4gdHdvIENoaW5lc2VcbiAgICAvLyBjaGFyYWN0ZXJzIGFzIGZhciBhcyBcXGIgaXMgY29uY2VybmVkKSwgc28gaXQgc2lsZW50bHkgZHJvcHMgZXZlcnkgQ0pLXG4gICAgLy8gbWF0Y2guIFVzaW5nIGV4cGxpY2l0IGxvb2thcm91bmQgYWdhaW5zdCBMYXRpbiBhbHBoYW51bWVyaWNzIGluc3RlYWRcbiAgICAvLyBzdGlsbCBibG9ja3MgcGFydGlhbC13b3JkIG1hdGNoZXMgZm9yIExhdGluIHNjcmlwdHMgKGUuZy4gXCJNb25kYXlcIlxuICAgIC8vIGluc2lkZSBcIk1vbmRheWlzaFwiKSB3aGlsZSBpbXBvc2luZyBubyBib3VuZGFyeSBhdCBhbGwgbmV4dCB0byBDSktcbiAgICAvLyBjaGFyYWN0ZXJzLCB3aGljaCBkb24ndCBoYXZlIHdvcmQgc2VwYXJhdG9ycyB0byBjaGVjayBhZ2FpbnN0IGFueXdheS5cbiAgICAvL1xuICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNhbid0IGJlIGEgbG9va2JlaGluZCAoXCIoPzwhLi4uKVwiKTogdGhhdCBzeW50YXhcbiAgICAvLyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TL1NhZmFyaSBiZWZvcmUgMTYuNCBhbmQgdGhyb3dzIGF0IFJlZ0V4cFxuICAgIC8vIGNvbnN0cnVjdGlvbiB0aW1lLCBicmVha2luZyBldmVyeSBvbmUgb2YgdGhlc2UgcGF0dGVybnMgb24gb2xkZXJcbiAgICAvLyBkZXZpY2VzLiBVc2luZyBhIGNvbnN1bWluZyBhbHRlcm5hdGlvbiAoXCJzdGFydC1vZi1zdHJpbmcgb3IgYSBzaW5nbGVcbiAgICAvLyBub24td29yZCBjaGFyYWN0ZXJcIikgaW5zdGVhZCB3b3JrcyB0aGUgc2FtZSB3YXkgYnV0IGFjdHVhbGx5IGNvbnN1bWVzXG4gICAgLy8gdGhhdCBsZWFkaW5nIGNoYXJhY3Rlciwgc28gdGhlIGNvbnRlbnQgdG8gZXh0cmFjdCBpcyB3cmFwcGVkIGluIGl0c1xuICAgIC8vIG93biBjYXB0dXJpbmcgZ3JvdXAgYmVsb3cgcmF0aGVyIHRoYW4gcmVhZCBvZmYgdGhlIHdob2xlIG1hdGNoLlxuICAgIC8vIExvb2thaGVhZCAoXCIoPyEuLi4pXCIpIGhhcyBubyBzdWNoIGNvbXBhdGliaWxpdHkgaXNzdWUgYW5kIGNhbiBzdGF5LlxuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUJlZm9yZSA9ICcoPzpefFteYS16QS1aMC05X10pJztcbiAgICBjb25zdCB3b3JkQm91bmRhcnlBZnRlciA9ICcoPyFbYS16QS1aMC05X10pJztcblxuICAgIC8vIFBhdHRlcm4gMTogSm91cnMgZGUgbGEgc2VtYWluZVxuICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt3ZWVrZGF5UGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAyOiBNb3RzIHRlbXBvcmVscyBjb3VyYW50cyAodG9kYXksIHRvbW9ycm93LCB5ZXN0ZXJkYXkpXG4gICAgaWYgKHRpbWVXb3JkUGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt0aW1lV29yZFBhdHRlcm59KSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogRXhwcmVzc2lvbnMgcmVsYXRpdmVzIFwiZGFucyBYIGpvdXJzL3NlbWFpbmVzL21vaXNcIlxuICAgIGlmIChpblBhdHRlcm4gJiYgdGltZVVuaXRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke2luUGF0dGVybn0pXFxcXHMqXFxcXGQrXFxcXHMqKD86JHt0aW1lVW5pdFBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDQ6IEV4cHJlc3Npb25zIFwibmV4dC9sYXN0IHdlZWtkYXkvd2Vlay9tb250aC95ZWFyXCJcbiAgICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyB3ZWVrZGF5cyBhbmQgdGltZVxuICAgIC8vIHVuaXRzIHRvZ2V0aGVyIHdpdGggbmV4dC9sYXN0LCBzbyB0aGUgbmVzdGVkIGNoZWNrcyBiZWxvdyBjYW4ndFxuICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHByZWZpeFBhdHRlcm4gaXMgdHJ1ZSAtLSBrZXB0IGFzIGEgZ3VhcmQgaW5cbiAgICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG4gICAgaWYgKHByZWZpeFBhdHRlcm4pIHtcbiAgICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7d2Vla2RheVBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oKD86JHtwcmVmaXhQYXR0ZXJufSlcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGxlcyBwYXR0ZXJucyAow6AgYXBwZWxlciBxdWFuZCBsZXMgbGFuZ3VlcyBjaGFuZ2VudClcbiAgICovXG4gIHJlc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5jbGVhckNhY2hlKCk7IC8vIFZpZGVyIGxlIGNhY2hlIGNhciBsZXMgcGF0dGVybnMgb250IGNoYW5nw6lcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRlIG1hbmnDqHJlIHN5bmNocm9uZSAodXRpbGlzZSBsZSBjYWNoZSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0U3luYyhlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogQ29udGV4dEluZm8ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgIGlmICghYWN0aXZlVmlldykge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGFjdGl2ZVZpZXcuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB7IGRhdGVzSW5Db250ZXh0OiBbXSwgdGFnczogW10sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHRJbmZvID0ge1xuICAgICAgZGF0ZXNJbkNvbnRleHQ6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBbmFseXNlciBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1clxuICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCBjdXJzb3JMaW5lIC0gQ09OVEVYVF9MSU5FUyk7XG4gICAgICBjb25zdCBlbmRMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgY3Vyc29yTGluZSArIENPTlRFWFRfTElORVMpO1xuXG4gICAgICBjb25zdCBjb250ZXh0TGluZXMgPSBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUgKyAxKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXh0ID0gY29udGV4dExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIC8vIFbDqXJpZmllciBsZSBjYWNoZSAoYXZlYyB0aW1lb3V0KS4gVGhlIGtleSBpbmNsdWRlcyBhIGNoZWFwIGhhc2ggb2ZcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2Nhbm5lZCB3aW5kb3csIG5vdCBqdXN0IGZpbGUrbGluZTogd2l0aG91dCBpdCwgZWRpdGluZ1xuICAgICAgLy8gY29udGVudCB3aXRoaW4gdGhlIMKxQ09OVEVYVF9MSU5FUyB3aW5kb3cgKHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3JcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGxpbmUpIHdvdWxkIGtlZXAgc2VydmluZyBhIHN0YWxlIGNhY2hlZCByZXN1bHQgdW50aWxcbiAgICAgIC8vIENBQ0hFX1RJTUVPVVQgZXhwaXJlcywgc2luY2UgZmlsZStsaW5lIGFsb25lIGRvZXNuJ3QgY2hhbmdlIHdoZW5cbiAgICAgIC8vIG5lYXJieSBjb250ZW50IGRvZXMuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZpbGUucGF0aH0tJHtjdXJzb3JMaW5lfS0ke3NpbXBsZUhhc2goY29udGV4dFRleHQpfWA7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIC8vIFbDqXJpZmllciBzaSBsJ2VudHLDqWUgbidlc3QgcGFzIGV4cGlyw6llXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWQudGltZXN0YW1wICYmIChub3cgLSBjYWNoZWQudGltZXN0YW1wKSA8PSBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbnRyw6llIGV4cGlyw6llLCBsYSBzdXBwcmltZXJcbiAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFpcmUgbGVzIHRhZ3MgZGVwdWlzIGxlcyBtw6l0YWRvbm7DqWVzXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YS50YWdzKSB7XG4gICAgICAgICAgY29udGV4dC50YWdzID0gbWV0YWRhdGEudGFncy5tYXAodGFnID0+IHRhZy50YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFpcmUgbGUgdGl0cmUgZGVwdWlzIGxlcyBmcm9udG1hdHRlciBvdSBsZSBwcmVtaWVyIHRpdHJlXG4gICAgICAgIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgdXNlci1hdXRob3JlZCBZQU1MLCBzbyBcInRpdGxlXCIgaXNuJ3RcbiAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBhY3R1YWxseSBiZSBhIHN0cmluZyAoZS5nLiBgdGl0bGU6IDQyYCkuXG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEuZnJvbnRtYXR0ZXI/LnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udGV4dC50aXRsZSA9IG1ldGFkYXRhLmZyb250bWF0dGVyLnRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmhlYWRpbmdzICYmIG1ldGFkYXRhLmhlYWRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuaGVhZGluZ3NbMF0uaGVhZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgZGF0ZXMgZHUgY29udGV4dGVcbiAgICAgIGNvbnRleHQuZGF0ZXNJbkNvbnRleHQgPSB0aGlzLmV4dHJhY3REYXRlc0Zyb21Db250ZXh0KGNvbnRleHRUZXh0KTtcblxuICAgICAgLy8gTWV0dHJlIGVuIGNhY2hlIChsZSBMUlUgY2FjaGUgZ8OocmUgYXV0b21hdGlxdWVtZW50IGxhIGxpbWl0ZSBkZSB0YWlsbGUpXG4gICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY29udGV4dCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgYW5hbHl6aW5nIGNvbnRleHQ6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHlzZSBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1ciBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCAoYXN5bmMsIHBvdXIgY29tcGF0aWJpbGl0w6kpXG4gICAqL1xuICBhbmFseXplQ29udGV4dChlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hbmFseXplQ29udGV4dFN5bmMoZWRpdG9yLCBjdXJzb3JMaW5lKSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXNlIHVuZSBkYXRlIGV4dHJhaXRlIGVuIGNhcGl0YWxpc2FudCBsYSBwcmVtacOocmUgbGV0dHJlXG4gICAqIEV4ZW1wbGU6IFwiZGVtYWluXCIgLT4gXCJEZW1haW5cIiwgXCJsdW5kaSBwcm9jaGFpblwiIC0+IFwiTHVuZGkgcHJvY2hhaW5cIlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gZGF0ZVN0ci50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG5cbiAgICAvLyBDYXBpdGFsaXplIGVhY2ggd29yZCBpbmRpdmlkdWFsbHksIG5vdCBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2ZcbiAgICAvLyB0aGUgd2hvbGUgc3RyaW5nOiBtdWx0aS13b3JkIG1hdGNoZXMgZnJvbSB0aGUgcHJlZml4K3dlZWtkYXkvcHJlZml4K1xuICAgIC8vIHVuaXQgcGF0dGVybnMgKGUuZy4gXCJuZXh0IEZyaWRheVwiKSB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0aGVpciBzZWNvbmRcbiAgICAvLyB3b3JkIGZvcmNlZCB0byBsb3dlcmNhc2UgKFwiTmV4dCBmcmlkYXlcIiksIGluY29ycmVjdGx5IG1hbmdsaW5nXG4gICAgLy8gY2FwaXRhbGl6ZWQgd2Vla2RheS9tb250aCBuYW1lcyB0aGUgdXNlciBhY3R1YWxseSB0eXBlZC5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWl0IGxlcyBleHByZXNzaW9ucyBkZSBkYXRlcyBwb3RlbnRpZWxsZXMgZHUgdGV4dGVcbiAgICogVXRpbGlzZSBkZXMgcGF0dGVybnMgZHluYW1pcXVlcyBtdWx0aS1sYW5ndWUgcG91ciBkw6l0ZWN0ZXIgbGVzIGRhdGVzIG5hdHVyZWxsZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdERhdGVzRnJvbUNvbnRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFV0aWxpc2VyIGxlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIGfDqW7DqXLDqXMgcG91ciB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuZGF0ZVBhdHRlcm5zKSB7XG4gICAgICAvLyBUaGUgbGVhZGluZyBib3VuZGFyeSBjb25zdW1lcyBhIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHVzaW5nIGFcbiAgICAgIC8vIHplcm8td2lkdGggbG9va2JlaGluZCAoc2VlIGluaXRpYWxpemVEYXRlUGF0dGVybnMpLCBzbyB0aGUgdGV4dCB0b1xuICAgICAgLy8gZXh0cmFjdCBpcyByZWFkIGZyb20gY2FwdHVyZSBncm91cCAxLCBub3QgdGhlIHdob2xlIG1hdGNoLlxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAvLyBQb3VyIGxlcyBsYW5ndWVzIHNhbnMgY2Fzc2UgKGNvbW1lIGxlIGphcG9uYWlzKSwgdG9Mb3dlckNhc2UoKSBuZSBjaGFuZ2UgcmllblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGlmICghc2Vlbi5oYXMobm9ybWFsaXplZCkgJiYgZGF0ZXMubGVuZ3RoIDwgTUFYX0RBVEVTX1RPX0VYVFJBQ1QpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXNlciBhdmVjIGxhIHByZW1pw6hyZSBsZXR0cmUgZW4gbWFqdXNjdWxlIChvdSBsYWlzc2VyIHRlbCBxdWVsIHBvdXIgbGUgamFwb25haXMpXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHRoaXMubm9ybWFsaXplRGF0ZShjb250ZW50LnRyaW0oKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIChwZXV0IMOqdHJlIGFwcGVsw6kgcMOpcmlvZGlxdWVtZW50KVxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGVzIHN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENsYXNzZSBkJ2VycmV1ciBwZXJzb25uYWxpc8OpZSBwb3VyIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5MRFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcbiAgcHVibGljIHJlYWRvbmx5IHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcicsXG4gICAgY29udGV4dD86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05MRFBhcnNlRXJyb3InO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAvLyBNYWludGllbnQgbGEgc3RhY2sgdHJhY2UgcG91ciBsZSBkw6lib2dhZ2UgKFY4IG9ubHkpXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOTERQYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2RlcyBkJ2VycmV1ciBjb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIC8vIEluaXRpYWxpc2F0aW9uXG4gIFBBUlNFUl9JTklUX0ZBSUxFRDogJ1BBUlNFUl9JTklUX0ZBSUxFRCcsXG4gIENIUk9OT19JTklUX0ZBSUxFRDogJ0NIUk9OT19JTklUX0ZBSUxFRCcsXG4gIFxuICAvLyBQYXJzaW5nXG4gIFBBUlNFX0ZBSUxFRDogJ1BBUlNFX0ZBSUxFRCcsXG4gIENIUk9OT19QQVJTRV9FUlJPUjogJ0NIUk9OT19QQVJTRV9FUlJPUicsXG4gIFxuICAvLyBDb25maWd1cmF0aW9uXG4gIFNFVFRJTkdTX0xPQURfRkFJTEVEOiAnU0VUVElOR1NfTE9BRF9GQUlMRUQnLFxuICBJTlZBTElEX0xBTkdVQUdFOiAnSU5WQUxJRF9MQU5HVUFHRScsXG59IGFzIGNvbnN0O1xuXG4iLCJpbXBvcnQgeyBOb3RpY2UsIE9ic2lkaWFuUHJvdG9jb2xEYXRhLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IERhdGVQaWNrZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvZGF0ZS1waWNrZXJcIjtcbmltcG9ydCBOTERQYXJzZXIsIHsgTkxEUmVzdWx0IH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBOTERTZXR0aW5nc1RhYiwgTkxEU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IERhdGVTdWdnZXN0IGZyb20gXCIuL3N1Z2dlc3QvZGF0ZS1zdWdnZXN0XCI7XG5pbXBvcnQge1xuICBnZXRQYXJzZUNvbW1hbmQsXG4gIGdldEN1cnJlbnREYXRlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudFRpbWVDb21tYW5kLFxuICBnZXROb3dDb21tYW5kLFxufSBmcm9tIFwiLi9jb21tYW5kc1wiO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVEYWlseU5vdGUsIHBhcnNlVHJ1dGh5LCB2YWxpZGF0ZVVyaVBhcmFtLCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IEhpc3RvcnlNYW5hZ2VyIGZyb20gXCIuL2hpc3RvcnktbWFuYWdlclwiO1xuaW1wb3J0IENvbnRleHRBbmFseXplciBmcm9tIFwiLi9jb250ZXh0LWFuYWx5emVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE5MRFBhcnNlRXJyb3IsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBleHRlbmRzIFBsdWdpbiB7XG4gIHB1YmxpYyBwYXJzZXI6IE5MRFBhcnNlcjtcbiAgcHVibGljIHNldHRpbmdzOiBOTERTZXR0aW5ncztcbiAgcHVibGljIGhpc3RvcnlNYW5hZ2VyOiBIaXN0b3J5TWFuYWdlcjtcbiAgcHVibGljIGNvbnRleHRBbmFseXplcjogQ29udGV4dEFuYWx5emVyO1xuICBwcml2YXRlIG1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwgPSA2MDAwMDA7IC8vIFRvdXRlcyBsZXMgMTAgbWludXRlc1xuXG4gIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2VyIGltbWVkaWF0ZWx5IChubyBuZWVkIHRvIHdhaXQgZm9yIG9uTGF5b3V0UmVhZHkpXG4gICAgdGhpcy5yZXNldFBhcnNlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzbWFydCBzdWdnZXN0aW9uIG1hbmFnZXJzXG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlciA9IG5ldyBIaXN0b3J5TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbnRleHRBbmFseXplciA9IG5ldyBDb250ZXh0QW5hbHl6ZXIodGhpcy5hcHAsIHRoaXMpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaGlzdG9yeSBhc3luY2hyb25vdXNseVxuICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuaW5pdGlhbGl6ZSgpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGluaXRpYWxpemluZyBoaXN0b3J5XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXNcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSBkYXRlXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwicmVwbGFjZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXMtbGlua1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIGxpbmspXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwibGlua1wiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZS1jbGVhblwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIHBsYWluIHRleHQpXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwiY2xlYW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBhcnNlLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwidGltZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtbm93XCIsXG4gICAgICBuYW1lOiBcIkluc2VydCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0Tm93Q29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdG9kYXlcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50VGltZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBpY2tlclwiLFxuICAgICAgbmFtZTogXCJEYXRlIHBpY2tlclwiLFxuICAgICAgY2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChjaGVja2luZykge1xuICAgICAgICAgIHJldHVybiAhIWdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBEYXRlUGlja2VyTW9kYWwodGhpcy5hcHAsIHRoaXMpLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE5MRFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gICAgdGhpcy5yZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKFwibmxkYXRlc1wiLCBwYXJhbXMgPT4gdGhpcy5hY3Rpb25IYW5kbGVyKHBhcmFtcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KG5ldyBEYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgLy8gRMOpbWFycmVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0YXJ0TWVtb3J5TW9uaXRvcmluZygpO1xuICB9XG5cbiAgcmVzZXRQYXJzZXIoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcih0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJQYXJzZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIsIHsgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcGFyc2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgTkxEUGFyc2VFcnJvciBcbiAgICAgICAgPyBlcnJvciBcbiAgICAgICAgOiBuZXcgTkxEUGFyc2VFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLFxuICAgICAgICAgICAgRXJyb3JDb2Rlcy5QQVJTRVJfSU5JVF9GQUlMRUQsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgeyBvcmlnaW5hbEVycm9yOiBlcnJvciwgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9XG4gICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlRXJyb3IuY29kZSxcbiAgICAgICAgZXJyb3I6IHBhcnNlRXJyb3IubWVzc2FnZSxcbiAgICAgICAgY29udGV4dDogcGFyc2VFcnJvci5jb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwYXJzZXIgd2l0aCBFbmdsaXNoIGFzIGRlZmF1bHQgaW4gY2FzZSBvZiBlcnJvciB0byBwcmV2ZW50IHBsdWdpbiBmcm9tIGNyYXNoaW5nIGNvbXBsZXRlbHlcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJ10pO1xuICAgICAgICBsb2dnZXIuaW5mbygnUGFyc2VyIGluaXRpYWxpemVkIHdpdGggRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90aWZpZXIgbCd1dGlsaXNhdGV1ciB1bmlxdWVtZW50IHBvdXIgbGVzIGVycmV1cnMgY3JpdGlxdWVzXG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdpdGggc2VsZWN0ZWQgbGFuZ3VhZ2VzLiBVc2luZyBFbmdsaXNoIGFzIGZhbGxiYWNrLicsXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciBldmVuIHdpdGggRW5nbGlzaCBmYWxsYmFjaycsIHsgZXJyb3I6IGZhbGxiYWNrRXJyb3IgfSk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IENyaXRpY2FsIGVycm9yIC0gcGFyc2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gUGxlYXNlIHJlc3RhcnQgT2JzaWRpYW4uJyxcbiAgICAgICAgICAxMDAwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBjb250ZXh0IHBhdHRlcm5zIHdoZW4gbGFuZ3VhZ2VzIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIucmVzZXRQYXR0ZXJucygpO1xuICAgIH1cbiAgfVxuXG4gIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIEFycsOqdGVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0b3BNZW1vcnlNb25pdG9yaW5nKCk7XG4gICAgXG4gICAgLy8gTmV0dG95ZXIgbGVzIHJlc3NvdXJjZXNcbiAgICBpZiAodGhpcy5jb250ZXh0QW5hbHl6ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dEFuYWx5emVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBtb25pdG9yaW5nIHDDqXJpb2RpcXVlIGRlIGwndXRpbGlzYXRpb24gbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIC8vIExvZ2dlciBsZXMgc3RhdGlzdGlxdWVzIHRvdXRlcyBsZXMgMTAgbWludXRlc1xuICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgICB9LCB0aGlzLk1FTU9SWV9NT05JVE9SSU5HX0lOVEVSVkFMKTtcbiAgICBcbiAgICAvLyBMb2dnZXIgaW1tw6lkaWF0ZW1lbnQgYXUgZMOpbWFycmFnZVxuICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RvcE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBsZXMgc3RhdGlzdGlxdWVzIGQndXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBsb2dNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IHtcbiAgICAgICAgcGFyc2luZ0NhY2hlPzogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9O1xuICAgICAgICBjb250ZXh0Q2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGhpc3Rvcnk/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICB9ID0ge307XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBwYXJzaW5nXG4gICAgICBpZiAodGhpcy5wYXJzZXIpIHtcbiAgICAgICAgc3RhdHMucGFyc2luZ0NhY2hlID0gdGhpcy5wYXJzZXIuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgY29udGV4dGVcbiAgICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgICBzdGF0cy5jb250ZXh0Q2FjaGUgPSB0aGlzLmNvbnRleHRBbmFseXplci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZ2V0SGlzdG9yeSgpLnRoZW4oaGlzdG9yeSA9PiB7XG4gICAgICAgICAgc3RhdHMuaGlzdG9yeSA9IHtcbiAgICAgICAgICAgIHNpemU6IE9iamVjdC5rZXlzKGhpc3RvcnkpLmxlbmd0aCxcbiAgICAgICAgICAgIG1heFNpemU6IDEwMCwgLy8gTUFYX0hJU1RPUllfU0laRVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH0pLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICAgIC8vIExvZ2dlciBxdWFuZCBtw6ptZSBsZXMgYXV0cmVzIHN0YXRpc3RpcXVlc1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlV0aWxpc2F0aW9uIG3DqW1vaXJlIGRlcyBjYWNoZXNcIiwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRXJyZXVyIGxvcnMgZHUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWREYXRhID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpIGFzIFBhcnRpYWw8TkxEU2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGxhbmd1YWdlcyBpcyBub3QgZW1wdHkgKHVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB8fCB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzID0gWy4uLkRFRkFVTFRfU0VUVElOR1MubGFuZ3VhZ2VzXTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3luY2hyb25pemUgZmxhZ3Mgd2l0aCBsYW5ndWFnZXMgYXJyYXkgaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zeW5jTGFuZ3VhZ2VGbGFncygpO1xuICB9XG5cbiAgLy8gU3luY2hyb25pemVzIGxhbmd1YWdlIGZsYWdzIChlbmdsaXNoLCBmcmVuY2gsIGV0Yy4pIHdpdGggbGFuZ3VhZ2VzIGFycmF5XG4gIHByaXZhdGUgc3luY0xhbmd1YWdlRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IHsgW2tleTogc3RyaW5nXToga2V5b2YgTkxEU2V0dGluZ3MgfSA9IHtcbiAgICAgICdlbic6ICdlbmdsaXNoJyxcbiAgICAgICdqYSc6ICdqYXBhbmVzZScsXG4gICAgICAnZnInOiAnZnJlbmNoJyxcbiAgICAgICdkZSc6ICdnZXJtYW4nLFxuICAgICAgJ3B0JzogJ3BvcnR1Z3Vlc2UnLFxuICAgICAgJ25sJzogJ2R1dGNoJyxcbiAgICAgICdlcyc6ICdzcGFuaXNoJyxcbiAgICAgICdpdCc6ICdpdGFsaWFuJyxcbiAgICAgICdydSc6ICdydXNzaWFuJyxcbiAgICAgICd1ayc6ICd1a3JhaW5pYW4nLFxuICAgICAgJ3poLmhhbnQnOiAnY2hpbmVzZScsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZXNldCBhbGwgZmxhZ3NcbiAgICB0aGlzLnNldHRpbmdzLmVuZ2xpc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmphcGFuZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5mcmVuY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmdlcm1hbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydHVndWVzZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZHV0Y2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnNwYW5pc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLml0YWxpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnJ1c3NpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnVrcmFpbmlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuY2hpbmVzZSA9IGZhbHNlO1xuICAgIFxuICAgIC8vIEVuYWJsZSBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGxhbmd1YWdlcyBpbiBhcnJheVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgZmxhZ0tleSA9IGxhbmd1YWdlTWFwW2xhbmddO1xuICAgICAgaWYgKGZsYWdLZXkpIHtcbiAgICAgICAgKHRoaXMuc2V0dGluZ3NbZmxhZ0tleV0gYXMgYm9vbGVhbikgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBcbiAgICogVGhpcyBpcyB0aGUgY29yZSBwYXJzaW5nIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBjdXN0b20gZm9ybWF0IHN0cmluZy5cbiAgICogVGhlIGlucHV0IGlzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkIGJlZm9yZSBwYXJzaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gZm9ybWF0IC0gTW9tZW50LmpzIGZvcm1hdCBzdHJpbmcgKGUuZy4sIFwiWVlZWS1NTS1ERFwiLCBcIkREL01NL1lZWVlcIiwgXCJNTU1NIERvLCBZWVlZXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZywgRGF0ZSBvYmplY3QsIGFuZCBNb21lbnQgb2JqZWN0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZShcInRvbW9ycm93XCIsIFwiWVlZWS1NTS1ERFwiKTtcbiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNlwiXG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQyID0gcGx1Z2luLnBhcnNlKFwibmV4dCBNb25kYXlcIiwgXCJkZGRkLCBNTU1NIERvXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiTW9uZGF5LCBKYW51YXJ5IDZ0aFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2UoZGF0ZVN0cmluZzogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgLy8gUGFyc2VyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0KTtcbiAgICBpZiAoIWZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBmb3JtYXQgaW4gcGFyc2UoKVwiLCB7IGZvcm1hdCwgZXJyb3I6IGZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXQgZW4gY2FzIGQnZXJyZXVyXG4gICAgICBmb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2UoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICAvLyBSZXRvdXJuZXIgdW5lIGRhdGUgaW52YWxpZGUgcGx1dMO0dCBxdWUgZGUgcGxhbnRlclxuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkRGF0ZShzYW5pdGl6ZWRJbnB1dCwgdGhpcy5zZXR0aW5ncy53ZWVrU3RhcnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gICAgaWYgKGZvcm1hdHRlZFN0cmluZyA9PT0gXCJJbnZhbGlkIGRhdGVcIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiSW5wdXQgZGF0ZSBjYW4ndCBiZSBwYXJzZWQgYnkgbmxkYXRlc1wiLCB7IGRhdGVTdHJpbmc6IHNhbml0aXplZElucHV0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXR0ZWRTdHJpbmcsXG4gICAgICBkYXRlLFxuICAgICAgbW9tZW50OiBtb21lbnQoZGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGRhdGUgZm9ybWF0LlxuICAgKiBcbiAgICogQXV0b21hdGljYWxseSBkZXRlY3RzIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgb3V0cHV0LlxuICAgKiBVc2VzIHRoZSBmb3JtYXQgZnJvbSBwbHVnaW4gc2V0dGluZ3MgKGRlZmF1bHQ6IFwiWVlZWS1NTS1ERFwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyAoZS5nLiwgXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwibmV4dCBNb25kYXkgYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIElmIHNldHRpbmdzLmZvcm1hdCBpcyBcIllZWVktTU0tRERcIiBhbmQgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlRGF0ZShcInRvbW9ycm93XCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VEYXRlKFwibmV4dCBNb25kYXkgYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNiAxNTowMFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgLy8gVmFsaWRlciBldCBzYW5pdGl6ZXIgbCdlbnRyw6llIHV0aWxpc2F0ZXVyXG4gICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB2YWxpZGF0ZVVyaVBhcmFtKGRhdGVTdHJpbmcsIDIwMCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRJbnB1dCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGlucHV0IGluIHBhcnNlRGF0ZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIGNvbnN0IGludmFsaWREYXRlID0gbmV3IERhdGUoTmFOKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZzogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgZGF0ZTogaW52YWxpZERhdGUsXG4gICAgICAgIG1vbWVudDogbW9tZW50KGludmFsaWREYXRlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgZGF0ZVxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBkYXRlIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy5mb3JtYXQsIGVycm9yOiBkYXRlRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dFxuICAgICAgdGhpcy5zZXR0aW5ncy5mb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyAxLiBBc2sgdGhlIHBhcnNlciBpZiB0aW1lIGlzIGRldGVjdGVkXG4gICAgY29uc3QgaGFzVGltZSA9IHRoaXMucGFyc2VyLmhhc1RpbWVDb21wb25lbnQoc2FuaXRpemVkSW5wdXQpO1xuICAgIGxldCBmb3JtYXRUb1VzZSA9IHRoaXMuc2V0dGluZ3MuZm9ybWF0O1xuXG4gICAgLy8gMi4gSWYgdGltZSBpcyBkZXRlY3RlZC4uLlxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIjtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgdGVtcHNcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGltZUZvcm1hdCk7XG4gICAgICBpZiAoIXRpbWVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGltZUZvcm1hdCwgZXJyb3I6IHRpbWVGb3JtYXRWYWxpZGF0aW9uLmVycm9yIH0pO1xuICAgICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHt0aGlzLnNldHRpbmdzLmZvcm1hdH0gJHtERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRJUDogSGVyZSB3ZSBmb3JtYXQgXCJEYXRlIFRJTUUuXCJcbiAgICAgICAgLy8gQnV0IEJFV0FSRTogaXQgaXMgdGhlIFwiZGF0ZS1zdWdnZXN0LnRzXCIgZmlsZSB0aGF0IHdpbGwgYWRkIHRoZSBbWyBdXS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdG91Y2ggZGF0ZS1zdWdnZXN0LCBpdCB3aWxsIG1ha2UgW1tEYXRlIFRpbWVdXS5cbiAgICAgICAgLy8gVG8gbWFrZSBbW0RhdGVdXSBUaW1lLCB3ZSBoYXZlIHRvIGJlIGNsZXZlci5cbiAgICAgICAgXG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7Zm9ybWF0VG9Vc2V9ICR7dGltZUZvcm1hdH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2Uoc2FuaXRpemVkSW5wdXQsIGZvcm1hdFRvVXNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsImtvIiwibm9ybWFsaXplUGF0aCIsImdldERhaWx5Tm90ZSIsImdldEFsbERhaWx5Tm90ZXMiLCJjcmVhdGVEYWlseU5vdGUiLCJleHRyYWN0VGVybXMiLCJtYXRjaEFueVBhdHRlcm4iLCJPUkRJTkFMX1dPUkRfRElDVElPTkFSWSIsIk9SRElOQUxfTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwiTWFya2Rvd25WaWV3IiwiTW9kYWwiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIldFRUtEQVlfRElDVElPTkFSWSIsIkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZIiwiTU9OVEhfRElDVElPTkFSWSIsIklOVEVHRVJfV09SRF9ESUNUSU9OQVJZIiwiVElNRV9VTklUX0RJQ1RJT05BUlkiLCJOVU1CRVJfUEFUVEVSTiIsInBhcnNlTnVtYmVyUGF0dGVybiIsIllFQVJfUEFUVEVSTiIsInBhcnNlWWVhciIsIlNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiIsIlNJTkdMRV9USU1FX1VOSVRfUkVHRVgiLCJTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTiIsIlRJTUVfVU5JVFNfUEFUVEVSTiIsIlRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIiwicGFyc2VEdXJhdGlvbiIsImNvbGxlY3REYXRlVGltZUZyYWdtZW50IiwiUEFUVEVSTl9XSVRIX1BSRUZJWCIsIkVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIiLCJQQVRURVJOIiwiREFURV9HUk9VUCIsIkRBVEVfVE9fR1JPVVAiLCJNT05USF9OQU1FX0dST1VQIiwiWUVBUl9HUk9VUCIsIkVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIiwiRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIiLCJQUkVGSVhfR1JPVVAiLCJFTk1vbnRoTmFtZVBhcnNlciIsIllFQVJfTlVNQkVSX0dST1VQIiwiTU9OVEhfTlVNQkVSX0dST1VQIiwiREFURV9OVU1CRVJfR1JPVVAiLCJNT05USF9HUk9VUCIsIkVOU2xhc2hNb250aEZvcm1hdFBhcnNlciIsIkhPVVJfR1JPVVAiLCJNSU5VVEVfR1JPVVAiLCJTRUNPTkRfR1JPVVAiLCJBTV9QTV9IT1VSX0dST1VQIiwiRU5UaW1lRXhwcmVzc2lvblBhcnNlciIsIlNUUklDVF9QQVRURVJOIiwiRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkdST1VQX05VTV9USU1FVU5JVFMiLCJFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIiLCJFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciIsIkVOTWVyZ2VEYXRlVGltZVJlZmluZXIiLCJkYXRlcy5pbXBseVNpbWlsYXJEYXRlIiwicmVmZXJlbmNlcy5ub3ciLCJyZWZlcmVuY2VzLnRvZGF5IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXkiLCJyZWZlcmVuY2VzLnRvbW9ycm93IiwicmVmZXJlbmNlcy50b25pZ2h0IiwicmVmZXJlbmNlcy50aGVEYXlBZnRlciIsImNhc3VhbFJlZmVyZW5jZXMuYWZ0ZXJub29uIiwiY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nIiwiY2FzdWFsUmVmZXJlbmNlcy5taWRuaWdodCIsImNhc3VhbFJlZmVyZW5jZXMubW9ybmluZyIsImNhc3VhbFJlZmVyZW5jZXMubm9vbiIsIldFRUtEQVlfR1JPVVAiLCJQT1NURklYX0dST1VQIiwiTU9ESUZJRVJfV09SRF9HUk9VUCIsIlJFTEFUSVZFX1dPUkRfR1JPVVAiLCJQQVRURVJOX05PX0FCQlIiLCJFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUiLCJoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlIiwiY2FzdWFsIiwic3RyaWN0IiwiR0IiLCJwYXJzZSIsInBhcnNlRGF0ZSIsIlNVRkZJWF9HUk9VUCIsIkZJUlNUX1JFR19QQVRURVJOIiwiU0VDT05EX1JFR19QQVRURVJOIiwiVElNRV9HUk9VUCIsImNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24iLCJjcmVhdGVDb25maWd1cmF0aW9uIiwiREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIk5VTUJFUiIsIldFRUtEQVlfT0ZGU0VUIiwiREFZX0dST1VQIiwiemhTdHJpbmdUb051bWJlciIsInpoU3RyaW5nVG9ZZWFyIiwiTlVNQkVSX0dST1VQIiwiVU5JVF9HUk9VUCIsIkRBWV9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8yIiwiREFZX0dST1VQXzMiLCJaSF9BTV9QTV9IT1VSX0dST1VQXzMiLCJOT1dfR1JPVVAiLCJUSU1FX0dST1VQXzEiLCJUSU1FX0dST1VQXzIiLCJUSU1FX0dST1VQXzMiLCJSRUdFWF9QQVJUUyIsInllYXIiLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyIsIkFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmciLCJyZWZlcmVuY2VzLnRoZURheUJlZm9yZSIsInJlZmVyZW5jZXMuZXZlbmluZyIsInJlZmVyZW5jZXMubW9ybmluZyIsInJlZmVyZW5jZXMubm9vbiIsInJlZmVyZW5jZXMubGFzdE5pZ2h0IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nIiwicmVmZXJlbmNlcy5taWRuaWdodCIsIkVOQ2FzdWFsRGF0ZVBhcnNlciIsIkVOQ2FzdWFsVGltZVBhcnNlciIsIkVOV2Vla2RheVBhcnNlciIsIlRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkiLCJlbi5zdHJpY3QiLCJlbi5jYXN1YWwiLCJjaHJvbm8uZW4i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RUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ2QsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2Is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QUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJ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QUFJLENBQUMsRUFBRTtBQUN4QixRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QixRQUFRLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsUUFBUSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFB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UUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0ssTUFBTUUsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUs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aEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1B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QUssUUFBUSxDQUFDO0FBQzFCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVyxDQUFDO0FBQzdCLFlBQVksS0FBSyxhQUFhO0FBQzlCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssUUFBUSxDQUFDO0FBQzFCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssYUFBYSxD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QUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssY0FBYztBQUMvQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUss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QUFFLElBQUksQ0FBQyxDQUFBLGNBQUEsQ0FBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNsRSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFFBQUEsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsWUFBQSxNQUFNLFdBQVcsR0FBRztnQkFDbEIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNwQyxhQUFBLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7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 diff --git a/src/modals/date-picker.ts b/src/modals/date-picker.ts index 06662df..dc01f8f 100644 --- a/src/modals/date-picker.ts +++ b/src/modals/date-picker.ts @@ -23,7 +23,13 @@ export default class DatePickerModal extends Modal { constructor(app: App, plugin: NaturalLanguageDates) { super(app); this.plugin = plugin; - this.selectedDate = moment(); + // Normalized to midnight: this is a date picker, not a time picker, and + // nothing in the UI lets the user set a time-of-day. Carrying the real + // current wall-clock time here (moment()) meant that opening the modal + // and immediately inserting produced whatever the clock happened to + // read, not a clean date -- and getDateStr() below formats *some* + // moment with a format string that includes "HH:mm" by default. + this.selectedDate = moment().startOf("day"); this.currentMonth = moment(); // Détecter le mode sombre this.isDarkMode = activeDocument.body.classList.contains("theme-dark"); @@ -43,25 +49,58 @@ export default class DatePickerModal extends Modal { let insertAsLink = this.plugin.settings.modalToggleLink; let dateInput = ""; - const getDateStr = () => { - let cleanDateInput = dateInput; - let shouldIncludeAlias = false; - - if (dateInput.endsWith("|")) { - shouldIncludeAlias = true; - cleanDateInput = dateInput.slice(0, -1); + // Strips the trailing "|" that marks "keep as alias" (see shouldIncludeAlias + // below) -- shared so the input's onChange handler and getDateStr() agree + // on exactly what text gets parsed/cached. + const stripAliasSuffix = (text: string): string => + text.endsWith("|") ? text.slice(0, -1) : text; + + let cachedManualParse: { input: string; moment: Moment } | null = null; + + // Parses manually-typed text via the NLP parser, caching the result. + // Called from both the input's onChange handler (to validate/update the + // calendar selection) and getDateStr() (to build the preview/output) -- + // without the cache, typing a single character invoked + // plugin.parseDate() 2-3 times (onChange's own validation call, then + // updateSelectedDate -> updatePreview -> getDateStr, plus onChange's + // trailing updatePreview() call), which matters since NLP parsing isn't + // free. + const parseManualInput = (cleanText: string): Moment => { + if (cachedManualParse && cachedManualParse.input === cleanText) { + return cachedManualParse.moment; } + const parsedMoment = this.plugin.parseDate(cleanText).moment; + cachedManualParse = { input: cleanText, moment: parsedMoment }; + return parsedMoment; + }; + + const getDateStr = () => { + const shouldIncludeAlias = dateInput.endsWith("|"); + const cleanDateInput = stripAliasSuffix(dateInput); - // Utiliser la date sélectionnée dans le calendrier si disponible - const dateToParse = cleanDateInput || this.selectedDate.format("YYYY-MM-DD"); - const parsedDate = this.plugin.parseDate(dateToParse); - // Valider le format avant utilisation const formatValidation = validateMomentFormat(momentFormat); const formatToUse = formatValidation.valid ? momentFormat : DEFAULT_SETTINGS.modalMomentFormat; - - let parsedDateString = parsedDate.moment.isValid() - ? parsedDate.moment.format(formatToUse) + + // Only round-trip through the NLP parser when the user actually typed + // something in the manual field (e.g. "next friday") -- this.selectedDate + // (calendar clicks, quick-select buttons) is already a resolved moment + // with nothing left to parse. + const parsedMoment = cleanDateInput + ? parseManualInput(cleanDateInput) + : this.selectedDate; + + // This is a date picker, not a time picker -- there's no time-of-day + // control anywhere in this modal's UI, so any time the NLP parser + // might have inferred from typed text (e.g. "today at 3pm") is + // deliberately discarded here, not just left at whatever default + // chrono-node happened to produce. Cloned first: parsedMoment may be + // the cached result from parseManualInput(), and moment's mutating + // .startOf() would otherwise corrupt that cache entry. + const momentToFormat = parsedMoment.isValid() ? parsedMoment.clone().startOf("day") : parsedMoment; + + let parsedDateString = momentToFormat.isValid() + ? momentToFormat.format(formatToUse) : ""; if (insertAsLink) { @@ -188,9 +227,14 @@ export default class DatePickerModal extends Modal { textEl.onChange((value) => { dateInput = value; if (value) { - const parsed = this.plugin.parseDate(value); - if (parsed.moment.isValid()) { - updateSelectedDate(parsed.moment, false); + const parsedMoment = parseManualInput(stripAliasSuffix(value)); + if (parsedMoment.isValid()) { + // updateSelectedDate() already calls updatePreview() itself; + // an unconditional call below on top of this would just + // re-run getDateStr() (and, before parseManualInput()'s + // caching, re-invoke the NLP parser) for no reason. + updateSelectedDate(parsedMoment, false); + return; } } updatePreview(); @@ -206,12 +250,12 @@ export default class DatePickerModal extends Modal { .setName("Date format") .setDesc("Moment format to be used") .addMomentFormat((momentEl) => { - momentEl.setPlaceholder("YYYY-MM-DD HH:mm"); + momentEl.setPlaceholder("YYYY-MM-DD"); momentEl.setValue(momentFormat); momentEl.onChange((value) => { - const validated = validateMomentFormat(value.trim() || "YYYY-MM-DD HH:mm"); + const validated = validateMomentFormat(value.trim() || "YYYY-MM-DD"); if (validated.valid) { - momentFormat = value.trim() || "YYYY-MM-DD HH:mm"; + momentFormat = value.trim() || "YYYY-MM-DD"; this.plugin.settings.modalMomentFormat = momentFormat; void this.plugin.saveSettings(); updatePreview(); @@ -283,30 +327,35 @@ export default class DatePickerModal extends Modal { return translation.split("|")[0].trim(); }; + // .startOf("day") on every option: without it these carried the real + // current wall-clock time (e.g. clicking "Tomorrow" at 14:32 selected + // tomorrow at 14:32, not a clean date), inconsistent with calendar-grid + // clicks (already midnight-based) and liable to the same "unexpected + // time baked into the output" confusion as the getDateStr() bug above. const quickOptions = [ - { - label: getFirstVariant("today"), - moment: moment() + { + label: getFirstVariant("today"), + moment: moment().startOf("day") }, - { - label: getFirstVariant("tomorrow"), - moment: moment().add(1, "day") + { + label: getFirstVariant("tomorrow"), + moment: moment().add(1, "day").startOf("day") }, - { - label: getFirstVariant("yesterday"), - moment: moment().subtract(1, "day") + { + label: getFirstVariant("yesterday"), + moment: moment().subtract(1, "day").startOf("day") }, - { - label: `${getFirstVariant("next")} ${getFirstVariant("week")}`, - moment: moment().add(1, "week") + { + label: `${getFirstVariant("next")} ${getFirstVariant("week")}`, + moment: moment().add(1, "week").startOf("day") }, - { - label: `${getFirstVariant("next")} ${getFirstVariant("month")}`, - moment: moment().add(1, "month") + { + label: `${getFirstVariant("next")} ${getFirstVariant("month")}`, + moment: moment().add(1, "month").startOf("day") }, - { - label: `${getFirstVariant("next")} ${getFirstVariant("year")}`, - moment: moment().add(1, "year") + { + label: `${getFirstVariant("next")} ${getFirstVariant("year")}`, + moment: moment().add(1, "year").startOf("day") }, ]; @@ -451,7 +500,7 @@ export default class DatePickerModal extends Modal { break; case "Home": e.preventDefault(); - updateSelectedDate(moment()); + updateSelectedDate(moment().startOf("day")); this.currentMonth = moment(); this.renderCalendar(); break; diff --git a/src/settings.ts b/src/settings.ts index 16e5739..16c9dfb 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -46,8 +46,13 @@ export interface NLDSettings { chinese: boolean; korean: boolean; - modalToggleTime: boolean; modalToggleLink: boolean; + // Date-only: the Date Picker deliberately never surfaces a time -- there's + // no time-of-day control anywhere in that modal's UI, so a format + // including time tokens would only ever display a meaningless constant + // (the picked date normalized to midnight). Use the "Insert the current + // date and time" command, or type a full expression into the autosuggest, + // for anything that actually needs a time. modalMomentFormat: string; // Smart suggestions @@ -83,9 +88,8 @@ export const DEFAULT_SETTINGS: NLDSettings = { chinese: false, korean: false, - modalToggleTime: false, modalToggleLink: false, - modalMomentFormat: "YYYY-MM-DD HH:mm", + modalMomentFormat: "YYYY-MM-DD", // Smart suggestions enableSmartSuggestions: true, diff --git a/tests/date-picker.test.ts b/tests/date-picker.test.ts index 5c11aed..ab0b36b 100644 --- a/tests/date-picker.test.ts +++ b/tests/date-picker.test.ts @@ -360,5 +360,148 @@ describe('DatePickerModal Integration Tests', () => { expect(inputElBefore.value).toBe(valueBefore); }); }); + + describe('Calendar/quick-button selections must not insert a spurious noon time (regression)', () => { + // Reported: picking a date via the calendar or a quick-select button + // always inserted "12:00" as the time, regardless of what was actually + // selected. Root cause: getDateStr() used to re-derive the date from + // this.selectedDate by formatting it down to a bare "YYYY-MM-DD" string + // and feeding that back into plugin.parseDate() -- discarding whatever + // time this.selectedDate actually had. chrono-node defaults a date given + // with no time component to noon, so that round-trip always produced + // 12:00 once formatted with modalMomentFormat's format at the time, + // which included "HH:mm" (the format is now date-only, see below). + // + // This mock reproduces that exact real-world chrono behavior (unlike + // this file's default beforeEach mock, which uses plain moment(text) -- + // moment("2026-07-20") parses to midnight, not noon, so it would never + // have caught this bug). + function mockParseDateAlwaysNoon() { + return vi.fn((text: string) => { + const withNoon = moment(text || 'today').startOf('day').add(12, 'hours'); + return { + formattedString: withNoon.format('YYYY-MM-DD'), + date: withNoon.toDate(), + moment: withNoon, + }; + }); + } + + function fakeEl(): any { + const el: any = { + empty: () => {}, + addClass: () => {}, + removeClass: () => {}, + addEventListener: () => {}, + setText: () => {}, + selected: false, + value: '', + createDiv: (_cls?: unknown, cb?: (e: unknown) => void) => { + const child = fakeEl(); + if (typeof cb === 'function') cb(child); + return child; + }, + createEl: (_tag?: unknown, _opts?: unknown, cb?: (e: unknown) => void) => { + const child = fakeEl(); + if (typeof cb === 'function') cb(child); + return child; + }, + createSpan: (_opts?: unknown, cb?: (e: unknown) => void) => { + const child = fakeEl(); + if (typeof cb === 'function') cb(child); + return child; + }, + }; + return el; + } + + function openModalWithPreviewSpy() { + Setting.resetInstances(); + (modal as any).contentEl = fakeEl(); + (window as any).setTimeout = (fn: () => void) => fn(); + (globalThis as any).MutationObserver = class { + observe() {} + disconnect() {} + }; + modal.onOpen(); + + const dateSetting = Setting.instances.find((s: any) => s.nameText === 'Date'); + const previewSpy = vi.fn(); + dateSetting.descEl.setText = previewSpy; + return previewSpy; + } + + it('does not call plugin.parseDate (and does not show noon) when a calendar day is clicked', () => { + plugin.parseDate = mockParseDateAlwaysNoon(); + const previewSpy = openModalWithPreviewSpy(); + + const clickedDay = moment('2026-07-20').startOf('day'); // calendar cells are midnight-based + (modal as any).updateSelectedDateFn(clickedDay); + + expect(plugin.parseDate).not.toHaveBeenCalled(); + const lastPreview = previewSpy.mock.calls.at(-1)?.[0]; + expect(lastPreview).not.toContain('12:00'); + expect(lastPreview).toContain('2026-07-20'); + }); + + it('does not show noon for a quick-select button pick either', () => { + plugin.parseDate = mockParseDateAlwaysNoon(); + const previewSpy = openModalWithPreviewSpy(); + + // Simulates the "Tomorrow" quick button: startOf("day") applied, no + // real wall-clock time leaking through. + const tomorrow = moment().add(1, 'day').startOf('day'); + (modal as any).updateSelectedDateFn(tomorrow); + + expect(plugin.parseDate).not.toHaveBeenCalled(); + const lastPreview = previewSpy.mock.calls.at(-1)?.[0]; + expect(lastPreview).not.toContain('12:00'); + }); + + it('still parses typed free-form text through the NLP parser, but discards any time it carries (this is a date picker, not a time picker)', () => { + // A custom format that *would* reveal a leaked time if one weren't + // discarded -- the default "YYYY-MM-DD" can't tell HH:mm leaking + // through apart from HH:mm being correctly stripped, since neither + // token is in the format string either way. + plugin.settings.modalMomentFormat = 'YYYY-MM-DD HH:mm'; + plugin.parseDate = vi.fn(() => ({ + formattedString: '2026-07-24 15:00', + date: moment('2026-07-24 15:00').toDate(), + moment: moment('2026-07-24 15:00'), + })) as any; + const previewSpy = openModalWithPreviewSpy(); + + const dateSetting = Setting.instances.find((s: any) => s.nameText === 'Date'); + const textComponent = dateSetting.components[0]; + textComponent.onChangeHandler('friday at 3pm'); + + expect(plugin.parseDate).toHaveBeenCalledWith('friday at 3pm'); + const lastPreview = previewSpy.mock.calls.at(-1)?.[0]; + expect(lastPreview).not.toContain('15:00'); + expect(lastPreview).toContain('2026-07-24'); + expect(lastPreview).toContain('00:00'); + }); + + it('defaults selectedDate to midnight on construction, not the real current time', () => { + const fresh = new (modal.constructor as any)(mockApp, plugin); + expect(fresh.selectedDate.hour()).toBe(0); + expect(fresh.selectedDate.minute()).toBe(0); + }); + + it('parses typed input through the NLP parser only once per keystroke, not 2-3 times (regression)', () => { + plugin.parseDate = vi.fn(() => ({ + formattedString: '2026-07-24', + date: moment('2026-07-24').toDate(), + moment: moment('2026-07-24'), + })) as any; + openModalWithPreviewSpy(); + + const dateSetting = Setting.instances.find((s: any) => s.nameText === 'Date'); + const textComponent = dateSetting.components[0]; + textComponent.onChangeHandler('friday'); + + expect(plugin.parseDate).toHaveBeenCalledTimes(1); + }); + }); });