/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // main.ts var main_exports = {}; __export(main_exports, { default: () => Prozen }); module.exports = __toCommonJS(main_exports); var import_obsidian = require("obsidian"); var DEFAULT_SETTINGS = { animationDuration: 2, showHeader: false, showScroll: false, showGraphControls: false, forceReadable: true, vignetteOpacity: 0.75, vignetteScaleLinear: 20, vignetteScaleRadial: 75 }; var Prozen = class extends import_obsidian.Plugin { async onload() { await this.loadSettings(); this.addCommand({ id: "zenmode", name: "Zen mode", callback: this.fullscreenMode.bind(this) }); this.addSettingTab(new ProzenSettingTab(this.app, this)); } onunload() { } async loadSettings() { this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); } async saveSettings() { await this.saveData(this.settings); } fullscreenMode() { const leaf = this.app.workspace.getActiveViewOfType(import_obsidian.ItemView).leaf; if (!leaf) return; if (leaf.view.getViewType() === "empty") return; const root = document.documentElement; root.style.setProperty("--fadeIn-duration", this.settings.animationDuration + "s"); root.style.setProperty("--vignette-opacity", this.settings.vignetteOpacity); root.style.setProperty("--vignette-scale-linear", this.settings.vignetteScaleLinear + "%"); root.style.setProperty("--vignette-scale-radial", this.settings.vignetteScaleRadial + "%"); const containerEl = leaf.containerEl; if (!document.fullscreenElement) { containerEl.requestFullscreen(); this.addStyles(leaf); } else { document.exitFullscreen(); this.removeStyles(leaf); } containerEl.onfullscreenchange = () => { if (!document.fullscreenElement) { this.removeStyles(leaf); } }; } addStyles(leaf) { const viewEl = leaf.view.contentEl; const header = leaf.view.headerEl; const isGraph = leaf.view.getViewType() === "graph"; let graphControls; if (isGraph) { graphControls = leaf.view.dataEngine.controlsEl; } if (!this.settings.showScroll) { viewEl.classList.add("noscroll"); } if (isGraph && !this.settings.showGraphControls) { graphControls.classList.add("hide"); } isGraph ? viewEl.classList.add("vignette-radial") : viewEl.classList.add("vignette-linear"); if (!isGraph && this.settings.forceReadable) { leaf.view.editMode.editorEl.classList.add("is-readable-line-width"); } viewEl.classList.add("animate"); this.settings.showHeader ? header.classList.add("animate") : header.classList.add("hide"); } removeStyles(leaf) { const viewEl = leaf.view.contentEl; const header = leaf.view.headerEl; const isGraph = leaf.view.getViewType() === "graph"; let graphControls; if (isGraph) { graphControls = leaf.view.dataEngine.controlsEl; graphControls.classList.remove("animate", "hide"); } else if (!this.app.vault.getConfig("readableLineLength")) { leaf.view.editMode.editorEl.classList.remove("is-readable-line-width"); } viewEl.classList.remove("vignette-linear", "vignette-radial", "animate", "noscroll"); header.classList.remove("animate", "hide"); } }; var ProzenSettingTab = class extends import_obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; } display() { const { containerEl } = this; containerEl.empty(); this.containerEl.createEl("h3", { text: "Vignette" }); let vignetteOpacityNumber; new import_obsidian.Setting(containerEl).setName("Opacity").setDesc("Intensity of vignette's dimming effect. Set to 0 to turn vignetting off.").addSlider((slider) => slider.setLimits(0, 1, 0.01).setValue(this.plugin.settings.vignetteOpacity).onChange(async (value) => { vignetteOpacityNumber.innerText = " " + value.toString(); this.plugin.settings.vignetteOpacity = value; await this.plugin.saveSettings(); })).settingEl.createDiv("", (el) => { vignetteOpacityNumber = el; el.style.minWidth = "2.0em"; el.style.textAlign = "right"; el.innerText = " " + this.plugin.settings.vignetteOpacity.toString(); }); let vignetteScaleLinearNumber; new import_obsidian.Setting(containerEl).setName("Scale in text views").setDesc("Determines how close to the screen's center vignetting spreads from both sides of the screen, as linear gradients.").addSlider((slider) => slider.setLimits(5, 50, 5).setValue(this.plugin.settings.vignetteScaleLinear).onChange(async (value) => { vignetteScaleLinearNumber.innerText = " " + value.toString(); this.plugin.settings.vignetteScaleLinear = value; await this.plugin.saveSettings(); })).settingEl.createDiv("", (el) => { vignetteScaleLinearNumber = el; el.style.minWidth = "2.0em"; el.style.textAlign = "right"; el.innerText = " " + this.plugin.settings.vignetteScaleLinear.toString(); }); let vignetteScaleRadialNumber; new import_obsidian.Setting(containerEl).setName("Scale in graph view").setDesc("Determines how close to the screen's center vignetting spreads from borders of the screen, as a radial gradient.").addSlider((slider) => slider.setLimits(5, 100, 5).setValue(this.plugin.settings.vignetteScaleRadial).onChange(async (value) => { vignetteScaleRadialNumber.innerText = " " + value.toString(); this.plugin.settings.vignetteScaleRadial = value; await this.plugin.saveSettings(); })).settingEl.createDiv("", (el) => { vignetteScaleRadialNumber = el; el.style.minWidth = "2.0em"; el.style.textAlign = "right"; el.innerText = " " + this.plugin.settings.vignetteScaleRadial.toString(); }); this.containerEl.createEl("h3", { text: "Animation" }); new import_obsidian.Setting(containerEl).setName("Fade-in duration").setDesc("The duration (in seconds) of fade-in animation on entering Zen mode").addText((text) => text.setPlaceholder("1.2").setValue(String(this.plugin.settings.animationDuration)).onChange(async (value) => { this.plugin.settings.animationDuration = Number(value); await this.plugin.saveSettings(); })); this.containerEl.createEl("h3", { text: "Element Toggles" }); new import_obsidian.Setting(containerEl).setName("Show header").setDesc("Show the tab's header in Zen mode").addToggle((toggle) => toggle.setValue(this.plugin.settings.showHeader).onChange(async (value) => { this.plugin.settings.showHeader = value; await this.plugin.saveSettings(); })); new import_obsidian.Setting(containerEl).setName("Show scrollbar").setDesc("Show the scrollbar in Zen mode. If it is hidden, scrolling is still available with mousewheel, arrows, touchpad, etc.").addToggle((toggle) => toggle.setValue(this.plugin.settings.showScroll).onChange(async (value) => { this.plugin.settings.showScroll = value; await this.plugin.saveSettings(); })); new import_obsidian.Setting(containerEl).setName("Show graph controls").setDesc("Show the graph view's controls in Zen mode").addToggle((toggle) => toggle.setValue(this.plugin.settings.showGraphControls).onChange(async (value) => { this.plugin.settings.showGraphControls = value; await this.plugin.saveSettings(); })); this.containerEl.createEl("h3", { text: "Misc" }); new import_obsidian.Setting(containerEl).setName("Force content centering").setDesc("Center text content in Zen mode, even if in regular view it takes all of the screen's width (ignore 'Editor -> Readable line length' being off in Zen mode)").addToggle((toggle) => toggle.setValue(this.plugin.settings.forceReadable).onChange(async (value) => { this.plugin.settings.forceReadable = value; await this.plugin.saveSettings(); })); } }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBJdGVtVmlldywgUGx1Z2luLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcblxyXG5pbnRlcmZhY2UgUGx1Z2luU2V0dGluZ3Mge1xyXG5cdGFuaW1hdGlvbkR1cmF0aW9uOiBudW1iZXIsXHJcblx0c2hvd0hlYWRlcjogYm9vbGVhbixcclxuXHRzaG93U2Nyb2xsOiBib29sZWFuLFxyXG5cdHNob3dHcmFwaENvbnRyb2xzOiBib29sZWFuLFxyXG5cdGZvcmNlUmVhZGFibGU6IGJvb2xlYW4sXHJcblx0dmlnbmV0dGVPcGFjaXR5OiBudW1iZXIsXHJcblx0dmlnbmV0dGVTY2FsZUxpbmVhcjogbnVtYmVyLFxyXG5cdHZpZ25ldHRlU2NhbGVSYWRpYWw6IG51bWJlclxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBQbHVnaW5TZXR0aW5ncyA9IHtcclxuXHRhbmltYXRpb25EdXJhdGlvbjogMixcclxuXHRzaG93SGVhZGVyOiBmYWxzZSxcclxuXHRzaG93U2Nyb2xsOiBmYWxzZSxcclxuXHRzaG93R3JhcGhDb250cm9sczogZmFsc2UsXHJcblx0Zm9yY2VSZWFkYWJsZTogdHJ1ZSwgXHJcblx0dmlnbmV0dGVPcGFjaXR5OiAwLjc1LFxyXG5cdHZpZ25ldHRlU2NhbGVMaW5lYXI6IDIwLFxyXG5cdHZpZ25ldHRlU2NhbGVSYWRpYWw6IDc1XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3plbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0c2V0dGluZ3M6IFBsdWdpblNldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0aWQ6IFwiemVubW9kZVwiLFxyXG5cdFx0XHRuYW1lOiBcIlplbiBtb2RlXCIsXHJcblx0XHRcdGNhbGxiYWNrOiB0aGlzLmZ1bGxzY3JlZW5Nb2RlLmJpbmQodGhpcyksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgUHJvemVuU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG5cclxuXHRmdWxsc2NyZWVuTW9kZSgpIHtcclxuXHRcdC8vIFVzZSBJdGVtVmlldyBmb3IgbXVsdGlwbGUgdmlldyB0eXBlcyAocHJldmlvdXNseSBpdCB3YXMgb25seSBNYXJrZG93blZpZXcpXHJcblx0XHRjb25zdCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoSXRlbVZpZXcpLmxlYWY7XHJcblx0XHRpZiAoIWxlYWYpIHJldHVybjtcclxuXHRcdC8vIERvbid0IHRyaWdnZXIgZnVsbHNjcmVlbiBtb2RlIHdoZW4gY3VycmVudCBsZWFmIGlzIGVtcHR5LlxyXG5cdFx0aWYobGVhZi52aWV3LmdldFZpZXdUeXBlKCkgPT09IFwiZW1wdHlcIikgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcclxuXHRcdHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoJy0tZmFkZUluLWR1cmF0aW9uJywgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25EdXJhdGlvbiArICdzJylcclxuXHRcdHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoJy0tdmlnbmV0dGUtb3BhY2l0eScsIHRoaXMuc2V0dGluZ3MudmlnbmV0dGVPcGFjaXR5KVxyXG5cdFx0cm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS12aWduZXR0ZS1zY2FsZS1saW5lYXInLCB0aGlzLnNldHRpbmdzLnZpZ25ldHRlU2NhbGVMaW5lYXIgKyAnJScpXHJcblx0XHRyb290LnN0eWxlLnNldFByb3BlcnR5KCctLXZpZ25ldHRlLXNjYWxlLXJhZGlhbCcsIHRoaXMuc2V0dGluZ3MudmlnbmV0dGVTY2FsZVJhZGlhbCArICclJylcclxuXHRcdFxyXG5cdFx0Y29uc3QgY29udGFpbmVyRWwgPSBsZWFmLmNvbnRhaW5lckVsO1xyXG5cclxuXHRcdGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpe1xyXG5cdFx0XHRjb250YWluZXJFbC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG5cdFx0XHR0aGlzLmFkZFN0eWxlcyhsZWFmKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcclxuXHRcdFx0dGhpcy5yZW1vdmVTdHlsZXMobGVhZilcclxuXHRcdH1cclxuXHRcdGNvbnRhaW5lckVsLm9uZnVsbHNjcmVlbmNoYW5nZSA9ICgpID0+IHtcclxuXHRcdFx0aWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCl7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVTdHlsZXMobGVhZilcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YWRkU3R5bGVzKGxlYWY6IFdvcmtzcGFjZUxlYWYpIHtcclxuXHRcdGNvbnN0IHZpZXdFbCA9IGxlYWYudmlldy5jb250ZW50RWxcclxuXHRcdGNvbnN0IGhlYWRlciA9IGxlYWYudmlldy5oZWFkZXJFbFxyXG5cdFx0Y29uc3QgaXNHcmFwaCA9IGxlYWYudmlldy5nZXRWaWV3VHlwZSgpID09PSBcImdyYXBoXCJcclxuXHJcblx0XHRsZXQgZ3JhcGhDb250cm9sczogSFRNTEVsZW1lbnQ7XHJcblx0XHRpZiAoaXNHcmFwaCkgeyBncmFwaENvbnRyb2xzID0gbGVhZi52aWV3LmRhdGFFbmdpbmUuY29udHJvbHNFbH1cclxuXHRcdGlmICghdGhpcy5zZXR0aW5ncy5zaG93U2Nyb2xsKXtcdHZpZXdFbC5jbGFzc0xpc3QuYWRkKFwibm9zY3JvbGxcIikgfVxyXG5cdFx0aWYgKGlzR3JhcGggJiYgIXRoaXMuc2V0dGluZ3Muc2hvd0dyYXBoQ29udHJvbHMpIHsgZ3JhcGhDb250cm9scy5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKSB9XHJcblx0XHRpc0dyYXBoID8gdmlld0VsLmNsYXNzTGlzdC5hZGQoXCJ2aWduZXR0ZS1yYWRpYWxcIikgOiB2aWV3RWwuY2xhc3NMaXN0LmFkZChcInZpZ25ldHRlLWxpbmVhclwiKVxyXG5cdFx0aWYgKCFpc0dyYXBoICYmIHRoaXMuc2V0dGluZ3MuZm9yY2VSZWFkYWJsZSkgeyBsZWFmLnZpZXcuZWRpdE1vZGUuZWRpdG9yRWwuY2xhc3NMaXN0LmFkZChcImlzLXJlYWRhYmxlLWxpbmUtd2lkdGhcIikgfVxyXG5cclxuXHRcdFxyXG5cdFx0dmlld0VsLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRlXCIpXHJcblx0XHR0aGlzLnNldHRpbmdzLnNob3dIZWFkZXIgPyBoZWFkZXIuY2xhc3NMaXN0LmFkZChcImFuaW1hdGVcIikgOiBoZWFkZXIuY2xhc3NMaXN0LmFkZChcImhpZGVcIilcclxuXHJcblx0fVxyXG5cclxuXHRyZW1vdmVTdHlsZXMobGVhZjogV29ya3NwYWNlTGVhZikge1xyXG5cdFx0Y29uc3Qgdmlld0VsID0gbGVhZi52aWV3LmNvbnRlbnRFbFxyXG5cdFx0Y29uc3QgaGVhZGVyID0gbGVhZi52aWV3LmhlYWRlckVsXHJcblx0XHRjb25zdCBpc0dyYXBoID0gbGVhZi52aWV3LmdldFZpZXdUeXBlKCkgPT09IFwiZ3JhcGhcIlxyXG5cclxuXHRcdGxldCBncmFwaENvbnRyb2xzOiBIVE1MRWxlbWVudDtcclxuXHRcdGlmIChpc0dyYXBoKSB7XHJcblx0XHRcdGdyYXBoQ29udHJvbHMgPSBsZWFmLnZpZXcuZGF0YUVuZ2luZS5jb250cm9sc0VsXHJcblx0XHRcdGdyYXBoQ29udHJvbHMuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGVcIiwgXCJoaWRlXCIpXHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3JlYWRhYmxlTGluZUxlbmd0aCcpKSB7XHJcblx0XHRcdGxlYWYudmlldy5lZGl0TW9kZS5lZGl0b3JFbC5jbGFzc0xpc3QucmVtb3ZlKFwiaXMtcmVhZGFibGUtbGluZS13aWR0aFwiKVxyXG5cdFx0fVxyXG5cclxuXHRcdHZpZXdFbC5jbGFzc0xpc3QucmVtb3ZlKFwidmlnbmV0dGUtbGluZWFyXCIsIFwidmlnbmV0dGUtcmFkaWFsXCIsIFwiYW5pbWF0ZVwiLCBcIm5vc2Nyb2xsXCIpXHJcblx0XHRoZWFkZXIuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGVcIiwgXCJoaWRlXCIpXHJcblx0fVxyXG59XHJcblxyXG5jbGFzcyBQcm96ZW5TZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblx0cGx1Z2luOiBQcm96ZW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFByb3plbikge1xyXG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwge1xyXG5cdFx0XHR0ZXh0OiBcIlZpZ25ldHRlXCIsXHJcblx0XHR9KVxyXG5cclxuLy8gVklHTkVUVEUgT1BBQ0lUWSBTRVRUSU5HXHJcblx0XHRsZXQgdmlnbmV0dGVPcGFjaXR5TnVtYmVyOiBIVE1MRGl2RWxlbWVudDtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnT3BhY2l0eScpXHJcblx0XHRcdC5zZXREZXNjKFwiSW50ZW5zaXR5IG9mIHZpZ25ldHRlJ3MgZGltbWluZyBlZmZlY3QuIFNldCB0byAwIHRvIHR1cm4gdmlnbmV0dGluZyBvZmYuXCIpXHJcblx0XHRcdC5hZGRTbGlkZXIoKHNsaWRlcikgPT4gc2xpZGVyXHJcblx0XHRcdFx0LnNldExpbWl0cygwLjAwLDEsMC4wMSlcclxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudmlnbmV0dGVPcGFjaXR5KVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHZpZ25ldHRlT3BhY2l0eU51bWJlci5pbm5lclRleHQgPSBcIiBcIiArIHZhbHVlLnRvU3RyaW5nKCk7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy52aWduZXR0ZU9wYWNpdHkgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pKVxyXG5cdFx0XHRcdC5zZXR0aW5nRWwuY3JlYXRlRGl2KFwiXCIsIChlbDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdHZpZ25ldHRlT3BhY2l0eU51bWJlciA9IGVsO1xyXG5cdFx0XHRcdFx0ZWwuc3R5bGUubWluV2lkdGggPSBcIjIuMGVtXCI7XHJcblx0XHRcdFx0XHRlbC5zdHlsZS50ZXh0QWxpZ24gPSBcInJpZ2h0XCI7XHJcblx0XHRcdFx0XHRlbC5pbm5lclRleHQgPSBcIiBcIiArIHRoaXMucGx1Z2luLnNldHRpbmdzLnZpZ25ldHRlT3BhY2l0eS50b1N0cmluZygpO1xyXG5cdFx0XHRcdH0pO1xyXG5cclxuLy8gVklHTkVUVEUgU0NBTEUgTElORUFSIFNFVFRJTkdcclxuXHRcdGxldCB2aWduZXR0ZVNjYWxlTGluZWFyTnVtYmVyOiBIVE1MRGl2RWxlbWVudDtcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnU2NhbGUgaW4gdGV4dCB2aWV3cycpXHJcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgY2xvc2UgdG8gdGhlIHNjcmVlbidzIGNlbnRlciB2aWduZXR0aW5nIHNwcmVhZHMgZnJvbSBib3RoIHNpZGVzIG9mIHRoZSBzY3JlZW4sIGFzIGxpbmVhciBncmFkaWVudHMuXCIpXHJcblx0XHRcdC5hZGRTbGlkZXIoKHNsaWRlcikgPT4gc2xpZGVyXHJcblx0XHRcdFx0LnNldExpbWl0cyg1LDUwLDUpXHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnZpZ25ldHRlU2NhbGVMaW5lYXIpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0dmlnbmV0dGVTY2FsZUxpbmVhck51bWJlci5pbm5lclRleHQgPSBcIiBcIiArIHZhbHVlLnRvU3RyaW5nKCk7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy52aWduZXR0ZVNjYWxlTGluZWFyID0gdmFsdWU7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuXHRcdFx0XHR9KSlcclxuXHRcdFx0XHQuc2V0dGluZ0VsLmNyZWF0ZURpdihcIlwiLCAoZWw6IEhUTUxEaXZFbGVtZW50KSA9PiB7XHJcblx0XHRcdFx0XHR2aWduZXR0ZVNjYWxlTGluZWFyTnVtYmVyID0gZWw7XHJcblx0XHRcdFx0XHRlbC5zdHlsZS5taW5XaWR0aCA9IFwiMi4wZW1cIjtcclxuXHRcdFx0XHRcdGVsLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIjtcclxuXHRcdFx0XHRcdGVsLmlubmVyVGV4dCA9IFwiIFwiICsgdGhpcy5wbHVnaW4uc2V0dGluZ3MudmlnbmV0dGVTY2FsZUxpbmVhci50b1N0cmluZygpO1xyXG5cdFx0XHRcdH0pO1xyXG4vLyBWSUdORVRURSBTQ0FMRSBSQURJQUwgU0VUVElOR1xyXG5cdFx0bGV0IHZpZ25ldHRlU2NhbGVSYWRpYWxOdW1iZXI6IEhUTUxEaXZFbGVtZW50O1xyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdTY2FsZSBpbiBncmFwaCB2aWV3JylcclxuXHRcdFx0LnNldERlc2MoXCJEZXRlcm1pbmVzIGhvdyBjbG9zZSB0byB0aGUgc2NyZWVuJ3MgY2VudGVyIHZpZ25ldHRpbmcgc3ByZWFkcyBmcm9tIGJvcmRlcnMgb2YgdGhlIHNjcmVlbiwgYXMgYSByYWRpYWwgZ3JhZGllbnQuXCIpXHJcblx0XHRcdC5hZGRTbGlkZXIoKHNsaWRlcikgPT4gc2xpZGVyXHJcblx0XHRcdFx0LnNldExpbWl0cyg1LDEwMCw1KVxyXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy52aWduZXR0ZVNjYWxlUmFkaWFsKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHZpZ25ldHRlU2NhbGVSYWRpYWxOdW1iZXIuaW5uZXJUZXh0ID0gXCIgXCIgKyB2YWx1ZS50b1N0cmluZygpO1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudmlnbmV0dGVTY2FsZVJhZGlhbCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0fSkpXHJcblx0XHRcdFx0LnNldHRpbmdFbC5jcmVhdGVEaXYoXCJcIiwgKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0dmlnbmV0dGVTY2FsZVJhZGlhbE51bWJlciA9IGVsO1xyXG5cdFx0XHRcdFx0ZWwuc3R5bGUubWluV2lkdGggPSBcIjIuMGVtXCI7XHJcblx0XHRcdFx0XHRlbC5zdHlsZS50ZXh0QWxpZ24gPSBcInJpZ2h0XCI7XHJcblx0XHRcdFx0XHRlbC5pbm5lclRleHQgPSBcIiBcIiArIHRoaXMucGx1Z2luLnNldHRpbmdzLnZpZ25ldHRlU2NhbGVSYWRpYWwudG9TdHJpbmcoKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwge1xyXG5cdFx0XHR0ZXh0OiBcIkFuaW1hdGlvblwiLFxyXG5cdFx0fSlcclxuLy8gQ09OVEVOVCBGQURFLUlOIERVUkFUSU9OIFNFVFRJTkdcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnRmFkZS1pbiBkdXJhdGlvbicpXHJcblx0XHRcdC5zZXREZXNjKCdUaGUgZHVyYXRpb24gKGluIHNlY29uZHMpIG9mIGZhZGUtaW4gYW5pbWF0aW9uIG9uIGVudGVyaW5nIFplbiBtb2RlJylcclxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XHJcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKCcxLjInKVxyXG5cdFx0XHRcdC5zZXRWYWx1ZShTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MuYW5pbWF0aW9uRHVyYXRpb24pKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmFuaW1hdGlvbkR1cmF0aW9uID0gTnVtYmVyKHZhbHVlKVxyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cclxuXHRcdHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7XHJcblx0XHRcdHRleHQ6IFwiRWxlbWVudCBUb2dnbGVzXCIsXHJcblx0XHR9KVxyXG5cclxuLy8gU0hPVyBIRUFERVIgVE9HR0xFIFNFVFRJTkdcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZShcIlNob3cgaGVhZGVyXCIpXHJcblx0XHRcdC5zZXREZXNjKFwiU2hvdyB0aGUgdGFiJ3MgaGVhZGVyIGluIFplbiBtb2RlXCIpXHJcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cdHRvZ2dsZVxyXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93SGVhZGVyKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dIZWFkZXIgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuLy8gU0hPVyBTQ1JPTExCQVIgVE9HR0xFIFNFVFRJTkdcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZShcIlNob3cgc2Nyb2xsYmFyXCIpXHJcblx0XHRcdC5zZXREZXNjKFwiU2hvdyB0aGUgc2Nyb2xsYmFyIGluIFplbiBtb2RlLiBJZiBpdCBpcyBoaWRkZW4sIHNjcm9sbGluZyBpcyBzdGlsbCBhdmFpbGFibGUgd2l0aCBtb3VzZXdoZWVsLCBhcnJvd3MsIHRvdWNocGFkLCBldGMuXCIpXHJcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cdHRvZ2dsZVxyXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93U2Nyb2xsKVxyXG5cdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNob3dTY3JvbGwgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuLy8gU0hPVyBHUkFQSCBDT05UUk9MUyBTRVRUSU5HXHJcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuXHRcdFx0LnNldE5hbWUoXCJTaG93IGdyYXBoIGNvbnRyb2xzXCIpXHJcblx0XHRcdC5zZXREZXNjKFwiU2hvdyB0aGUgZ3JhcGggdmlldydzIGNvbnRyb2xzIGluIFplbiBtb2RlXCIpXHJcblx0XHRcdC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cdHRvZ2dsZVxyXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93R3JhcGhDb250cm9scylcclxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zaG93R3JhcGhDb250cm9scyA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7XHJcblx0XHRcdHRleHQ6IFwiTWlzY1wiLFxyXG5cdFx0fSlcclxuXHJcbi8vIEZPUkNFIFJFQURBQkxFIFNFVFRJTkdcclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZShcIkZvcmNlIGNvbnRlbnQgY2VudGVyaW5nXCIpXHJcblx0XHRcdC5zZXREZXNjKFwiQ2VudGVyIHRleHQgY29udGVudCBpbiBaZW4gbW9kZSwgZXZlbiBpZiBpbiByZWd1bGFyIHZpZXcgaXQgdGFrZXMgYWxsIG9mIHRoZSBzY3JlZW4ncyB3aWR0aCAoaWdub3JlICdFZGl0b3IgLT4gUmVhZGFibGUgbGluZSBsZW5ndGgnIGJlaW5nIG9mZiBpbiBaZW4gbW9kZSlcIilcclxuXHRcdFx0LmFkZFRvZ2dsZSgodG9nZ2xlKSA9Plx0dG9nZ2xlXHJcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcmNlUmVhZGFibGUpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9yY2VSZWFkYWJsZSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUFnRjtBQWFoRixJQUFNLG1CQUFtQztBQUFBLEVBQ3hDLG1CQUFtQjtBQUFBLEVBQ25CLFlBQVk7QUFBQSxFQUNaLFlBQVk7QUFBQSxFQUNaLG1CQUFtQjtBQUFBLEVBQ25CLGVBQWU7QUFBQSxFQUNmLGlCQUFpQjtBQUFBLEVBQ2pCLHFCQUFxQjtBQUFBLEVBQ3JCLHFCQUFxQjtBQUN0QjtBQUVBLElBQXFCLFNBQXJCLGNBQW9DLHVCQUFPO0FBQUEsRUFHMUMsTUFBTSxTQUFTO0FBQ2QsVUFBTSxLQUFLLGFBQWE7QUFDeEIsU0FBSyxXQUFXO0FBQUEsTUFDZixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixVQUFVLEtBQUssZUFBZSxLQUFLLElBQUk7QUFBQSxJQUN4QyxDQUFDO0FBQ0QsU0FBSyxjQUFjLElBQUksaUJBQWlCLEtBQUssS0FBSyxJQUFJLENBQUM7QUFBQSxFQUN4RDtBQUFBLEVBRUEsV0FBVztBQUFBLEVBQUM7QUFBQSxFQUVaLE1BQU0sZUFBZTtBQUNwQixTQUFLLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxrQkFBa0IsTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFFQSxNQUFNLGVBQWU7QUFDcEIsVUFBTSxLQUFLLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDbEM7QUFBQSxFQUVBLGlCQUFpQjtBQUVoQixVQUFNLE9BQU8sS0FBSyxJQUFJLFVBQVUsb0JBQW9CLHdCQUFRLEVBQUU7QUFDOUQsUUFBSSxDQUFDO0FBQU07QUFFWCxRQUFHLEtBQUssS0FBSyxZQUFZLE1BQU07QUFBUztBQUV4QyxVQUFNLE9BQU8sU0FBUztBQUN0QixTQUFLLE1BQU0sWUFBWSxxQkFBcUIsS0FBSyxTQUFTLG9CQUFvQixHQUFHO0FBQ2pGLFNBQUssTUFBTSxZQUFZLHNCQUFzQixLQUFLLFNBQVMsZUFBZTtBQUMxRSxTQUFLLE1BQU0sWUFBWSwyQkFBMkIsS0FBSyxTQUFTLHNCQUFzQixHQUFHO0FBQ3pGLFNBQUssTUFBTSxZQUFZLDJCQUEyQixLQUFLLFNBQVMsc0JBQXNCLEdBQUc7QUFFekYsVUFBTSxjQUFjLEtBQUs7QUFFekIsUUFBSSxDQUFDLFNBQVMsbUJBQWtCO0FBQy9CLGtCQUFZLGtCQUFrQjtBQUM5QixXQUFLLFVBQVUsSUFBSTtBQUFBLElBQ3BCLE9BQU87QUFDTixlQUFTLGVBQWU7QUFDeEIsV0FBSyxhQUFhLElBQUk7QUFBQSxJQUN2QjtBQUNBLGdCQUFZLHFCQUFxQixNQUFNO0FBQ3RDLFVBQUksQ0FBQyxTQUFTLG1CQUFrQjtBQUMvQixhQUFLLGFBQWEsSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUVBLFVBQVUsTUFBcUI7QUFDOUIsVUFBTSxTQUFTLEtBQUssS0FBSztBQUN6QixVQUFNLFNBQVMsS0FBSyxLQUFLO0FBQ3pCLFVBQU0sVUFBVSxLQUFLLEtBQUssWUFBWSxNQUFNO0FBRTVDLFFBQUk7QUFDSixRQUFJLFNBQVM7QUFBRSxzQkFBZ0IsS0FBSyxLQUFLLFdBQVc7QUFBQSxJQUFVO0FBQzlELFFBQUksQ0FBQyxLQUFLLFNBQVMsWUFBVztBQUFFLGFBQU8sVUFBVSxJQUFJLFVBQVU7QUFBQSxJQUFFO0FBQ2pFLFFBQUksV0FBVyxDQUFDLEtBQUssU0FBUyxtQkFBbUI7QUFBRSxvQkFBYyxVQUFVLElBQUksTUFBTTtBQUFBLElBQUU7QUFDdkYsY0FBVSxPQUFPLFVBQVUsSUFBSSxpQkFBaUIsSUFBSSxPQUFPLFVBQVUsSUFBSSxpQkFBaUI7QUFDMUYsUUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLGVBQWU7QUFBRSxXQUFLLEtBQUssU0FBUyxTQUFTLFVBQVUsSUFBSSx3QkFBd0I7QUFBQSxJQUFFO0FBR25ILFdBQU8sVUFBVSxJQUFJLFNBQVM7QUFDOUIsU0FBSyxTQUFTLGFBQWEsT0FBTyxVQUFVLElBQUksU0FBUyxJQUFJLE9BQU8sVUFBVSxJQUFJLE1BQU07QUFBQSxFQUV6RjtBQUFBLEVBRUEsYUFBYSxNQUFxQjtBQUNqQyxVQUFNLFNBQVMsS0FBSyxLQUFLO0FBQ3pCLFVBQU0sU0FBUyxLQUFLLEtBQUs7QUFDekIsVUFBTSxVQUFVLEtBQUssS0FBSyxZQUFZLE1BQU07QUFFNUMsUUFBSTtBQUNKLFFBQUksU0FBUztBQUNaLHNCQUFnQixLQUFLLEtBQUssV0FBVztBQUNyQyxvQkFBYyxVQUFVLE9BQU8sV0FBVyxNQUFNO0FBQUEsSUFDakQsV0FBVyxDQUFDLEtBQUssSUFBSSxNQUFNLFVBQVUsb0JBQW9CLEdBQUc7QUFDM0QsV0FBSyxLQUFLLFNBQVMsU0FBUyxVQUFVLE9BQU8sd0JBQXdCO0FBQUEsSUFDdEU7QUFFQSxXQUFPLFVBQVUsT0FBTyxtQkFBbUIsbUJBQW1CLFdBQVcsVUFBVTtBQUNuRixXQUFPLFVBQVUsT0FBTyxXQUFXLE1BQU07QUFBQSxFQUMxQztBQUNEO0FBRUEsSUFBTSxtQkFBTixjQUErQixpQ0FBaUI7QUFBQSxFQUcvQyxZQUFZLEtBQVUsUUFBZ0I7QUFDckMsVUFBTSxLQUFLLE1BQU07QUFDakIsU0FBSyxTQUFTO0FBQUEsRUFDZjtBQUFBLEVBRUEsVUFBZ0I7QUFDZixVQUFNLEVBQUMsZ0JBQWU7QUFFdEIsZ0JBQVksTUFBTTtBQUVsQixTQUFLLFlBQVksU0FBUyxNQUFNO0FBQUEsTUFDL0IsTUFBTTtBQUFBLElBQ1AsQ0FBQztBQUdELFFBQUk7QUFDSixRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSxTQUFTLEVBQ2pCLFFBQVEsMEVBQTBFLEVBQ2xGLFVBQVUsQ0FBQyxXQUFXLE9BQ3JCLFVBQVUsR0FBSyxHQUFFLElBQUksRUFDckIsU0FBUyxLQUFLLE9BQU8sU0FBUyxlQUFlLEVBQzdDLFNBQVMsT0FBTyxVQUFVO0FBQzFCLDRCQUFzQixZQUFZLE1BQU0sTUFBTSxTQUFTO0FBQ3ZELFdBQUssT0FBTyxTQUFTLGtCQUFrQjtBQUN2QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDLEVBQ0QsVUFBVSxVQUFVLElBQUksQ0FBQyxPQUF1QjtBQUNoRCw4QkFBd0I7QUFDeEIsU0FBRyxNQUFNLFdBQVc7QUFDcEIsU0FBRyxNQUFNLFlBQVk7QUFDckIsU0FBRyxZQUFZLE1BQU0sS0FBSyxPQUFPLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxJQUNwRSxDQUFDO0FBR0gsUUFBSTtBQUNKLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLHFCQUFxQixFQUM3QixRQUFRLG9IQUFvSCxFQUM1SCxVQUFVLENBQUMsV0FBVyxPQUNyQixVQUFVLEdBQUUsSUFBRyxDQUFDLEVBQ2hCLFNBQVMsS0FBSyxPQUFPLFNBQVMsbUJBQW1CLEVBQ2pELFNBQVMsT0FBTyxVQUFVO0FBQzFCLGdDQUEwQixZQUFZLE1BQU0sTUFBTSxTQUFTO0FBQzNELFdBQUssT0FBTyxTQUFTLHNCQUFzQjtBQUMzQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDLEVBQ0QsVUFBVSxVQUFVLElBQUksQ0FBQyxPQUF1QjtBQUNoRCxrQ0FBNEI7QUFDNUIsU0FBRyxNQUFNLFdBQVc7QUFDcEIsU0FBRyxNQUFNLFlBQVk7QUFDckIsU0FBRyxZQUFZLE1BQU0sS0FBSyxPQUFPLFNBQVMsb0JBQW9CLFNBQVM7QUFBQSxJQUN4RSxDQUFDO0FBRUgsUUFBSTtBQUNKLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLHFCQUFxQixFQUM3QixRQUFRLGtIQUFrSCxFQUMxSCxVQUFVLENBQUMsV0FBVyxPQUNyQixVQUFVLEdBQUUsS0FBSSxDQUFDLEVBQ2pCLFNBQVMsS0FBSyxPQUFPLFNBQVMsbUJBQW1CLEVBQ2pELFNBQVMsT0FBTyxVQUFVO0FBQzFCLGdDQUEwQixZQUFZLE1BQU0sTUFBTSxTQUFTO0FBQzNELFdBQUssT0FBTyxTQUFTLHNCQUFzQjtBQUMzQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDaEMsQ0FBQyxDQUFDLEVBQ0QsVUFBVSxVQUFVLElBQUksQ0FBQyxPQUF1QjtBQUNoRCxrQ0FBNEI7QUFDNUIsU0FBRyxNQUFNLFdBQVc7QUFDcEIsU0FBRyxNQUFNLFlBQVk7QUFDckIsU0FBRyxZQUFZLE1BQU0sS0FBSyxPQUFPLFNBQVMsb0JBQW9CLFNBQVM7QUFBQSxJQUN4RSxDQUFDO0FBRUgsU0FBSyxZQUFZLFNBQVMsTUFBTTtBQUFBLE1BQy9CLE1BQU07QUFBQSxJQUNQLENBQUM7QUFFRCxRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSxrQkFBa0IsRUFDMUIsUUFBUSxxRUFBcUUsRUFDN0UsUUFBUSxVQUFRLEtBQ2YsZUFBZSxLQUFLLEVBQ3BCLFNBQVMsT0FBTyxLQUFLLE9BQU8sU0FBUyxpQkFBaUIsQ0FBQyxFQUN2RCxTQUFTLE9BQU8sVUFBVTtBQUMxQixXQUFLLE9BQU8sU0FBUyxvQkFBb0IsT0FBTyxLQUFLO0FBQ3JELFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNoQyxDQUFDLENBQUM7QUFFSixTQUFLLFlBQVksU0FBUyxNQUFNO0FBQUEsTUFDL0IsTUFBTTtBQUFBLElBQ1AsQ0FBQztBQUdELFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLGFBQWEsRUFDckIsUUFBUSxtQ0FBbUMsRUFDM0MsVUFBVSxDQUFDLFdBQVcsT0FDckIsU0FBUyxLQUFLLE9BQU8sU0FBUyxVQUFVLEVBQ3hDLFNBQVMsT0FBTyxVQUFVO0FBQzFCLFdBQUssT0FBTyxTQUFTLGFBQWE7QUFDbEMsWUFBTSxLQUFLLE9BQU8sYUFBYTtBQUFBLElBQ2pDLENBQUMsQ0FDRjtBQUVBLFFBQUksd0JBQVEsV0FBVyxFQUNyQixRQUFRLGdCQUFnQixFQUN4QixRQUFRLHVIQUF1SCxFQUMvSCxVQUFVLENBQUMsV0FBVyxPQUNyQixTQUFTLEtBQUssT0FBTyxTQUFTLFVBQVUsRUFDeEMsU0FBUyxPQUFPLFVBQVU7QUFDMUIsV0FBSyxPQUFPLFNBQVMsYUFBYTtBQUNsQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUNGO0FBRUEsUUFBSSx3QkFBUSxXQUFXLEVBQ3JCLFFBQVEscUJBQXFCLEVBQzdCLFFBQVEsNENBQTRDLEVBQ3BELFVBQVUsQ0FBQyxXQUFXLE9BQ3JCLFNBQVMsS0FBSyxPQUFPLFNBQVMsaUJBQWlCLEVBQy9DLFNBQVMsT0FBTyxVQUFVO0FBQzFCLFdBQUssT0FBTyxTQUFTLG9CQUFvQjtBQUN6QyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUNGO0FBRUEsU0FBSyxZQUFZLFNBQVMsTUFBTTtBQUFBLE1BQy9CLE1BQU07QUFBQSxJQUNQLENBQUM7QUFHRCxRQUFJLHdCQUFRLFdBQVcsRUFDckIsUUFBUSx5QkFBeUIsRUFDakMsUUFBUSw2SkFBNkosRUFDckssVUFBVSxDQUFDLFdBQVcsT0FDckIsU0FBUyxLQUFLLE9BQU8sU0FBUyxhQUFhLEVBQzNDLFNBQVMsT0FBTyxVQUFVO0FBQzFCLFdBQUssT0FBTyxTQUFTLGdCQUFnQjtBQUNyQyxZQUFNLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDakMsQ0FBQyxDQUNGO0FBQUEsRUFDRDtBQUVEOyIsCiAgIm5hbWVzIjogW10KfQo=