From 8b7c80d218f256d35d0ce8a1197a3c9f9e234f68 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 21 Aug 2022 17:49:57 +0200 Subject: [PATCH] some cleanup --- .gitignore | 3 +++ main.js | 8 +++----- src/settings-tab.ts | 8 +++----- .../.obsidian/plugins/obsidian-custom-frames/main.js | 8 +++----- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 268743f..f744204 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,8 @@ node_modules # Exclude sourcemaps *.map +# obsidian +workspace + # Exclude macOS Finder (System Explorer) View States .DS_Store diff --git a/main.js b/main.js index 4533e06..896f670 100644 --- a/main.js +++ b/main.js @@ -245,7 +245,7 @@ var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { display() { this.containerEl.empty(); this.containerEl.createEl("h2", { text: "Custom Frames Settings" }); - this.containerEl.createEl("p", { text: "Note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: "Please note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); new import_obsidian2.Setting(this.containerEl).setName("Frame Padding").setDesc("The padding that should be left around the inside of custom frame panes, in pixels.").addText((t) => { t.inputEl.type = "number"; t.setValue(String(this.plugin.settings.padding)); @@ -348,9 +348,7 @@ var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { })); } this.containerEl.createEl("hr"); - let info = this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); - info.createEl("br"); - info.createSpan({ text: "Note that Obsidian has to be restarted or reloaded to activate a newly added frame.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); let addDiv = this.containerEl.createDiv(); let dropdown = new import_obsidian2.DropdownComponent(addDiv); dropdown.addOption("new", "Custom"); @@ -538,4 +536,4 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgbGV0IGluZm8gPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuICAgICAgICBpbmZvLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgaW5mby5jcmVhdGVTcGFuKHsgdGV4dDogXCJOb3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCB0byBhY3RpdmF0ZSBhIG5ld2x5IGFkZGVkIGZyYW1lLlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59IiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxlQUFlO0FBQ3ZDLFdBQUssTUFBTSxpQkFBaUIsYUFBYSxNQUFNO0FBQzNDLGFBQUssTUFBTSxjQUFjLEtBQUssS0FBSztBQUNuQyxhQUFLLE1BQU0sVUFBVSxLQUFLLEtBQUs7QUFBQTtBQUFBLFdBRWhDO0FBQ0gsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxXQUFXO0FBQ25DLFdBQUssTUFBTSxhQUFhLFNBQVM7QUFDakMsZUFBUyxvQkFBb0IsS0FBSyxLQUFLO0FBQUE7QUFFM0MsU0FBSyxNQUFNLFNBQVM7QUFDcEIsU0FBSyxNQUFNLGFBQWEsU0FBUztBQUVqQyxRQUFJLE1BQU0sS0FBSyxLQUFLO0FBQ3BCLFFBQUksV0FBVztBQUNYLFVBQUksQ0FBQyxVQUFVLFdBQVc7QUFDdEIsZUFBTztBQUNYLGFBQU87QUFBQTtBQUVYLFNBQUssTUFBTSxhQUFhLE9BQU87QUFFL0IsV0FBTyxLQUFLO0FBQUE7QUFBQSxFQUdULFVBQWdCO0FBQ25CLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLFNBQVM7QUFBQSxXQUMvQjtBQUNILFdBQUssTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUlaLFNBQWU7QUFDbEIsUUFBSSxLQUFLLGlCQUFpQixtQkFBbUI7QUFDekMsV0FBSyxNQUFNLGNBQWMsS0FBSyxLQUFLLEtBQUs7QUFBQSxXQUNyQztBQUNILFdBQUssTUFBTSxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUE7QUFBQSxFQUk5QixTQUFlO0FBQ2xCLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLFFBQVE7QUFBQSxXQUM5QjtBQUNILFdBQUssTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUlaLFlBQWtCO0FBQ3JCLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLFFBQVE7QUFBQSxXQUM5QjtBQUNILFdBQUssTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUlaLGlCQUF1QjtBQUMxQixRQUFJLENBQUUsTUFBSyxpQkFBaUIsb0JBQW9CO0FBQzVDLFVBQUksQ0FBQyxLQUFLLE1BQU0sb0JBQW9CO0FBQ2hDLGFBQUssTUFBTTtBQUFBLGFBQ1I7QUFDSCxhQUFLLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtoQixnQkFBd0I7QUFDM0IsV0FBTyxLQUFLLGlCQUFpQixvQkFBb0IsS0FBSyxNQUFNLGNBQWMsU0FBUyxPQUFPLEtBQUssTUFBTTtBQUFBO0FBQUE7OztBQ3hGdEcsSUFBTSxrQkFBd0M7QUFBQSxFQUNqRCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUE7QUFFTixJQUFNLFVBQStDO0FBQUEsRUFDeEQsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUEsRUFFZixZQUFZO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdmLFFBQVE7QUFBQSxJQUNKLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNZixXQUFXO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0JmLFVBQVU7QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBLEVBRWYsV0FBVztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFxQlosaUJBQWlCLFVBQStCO0FBQ25ELFNBQU8sU0FBUyxPQUFPLFVBQVUsU0FBUyxTQUFTO0FBQUE7OztBQ3hIdkQsdUJBQW1GO0FBSTVFLDJDQUFxQyxrQ0FBaUI7QUFBQSxFQUl6RCxZQUFZLEtBQVUsUUFBNEI7QUFDOUMsVUFBTSxLQUFLO0FBQ1gsU0FBSyxTQUFTO0FBQUE7QUFBQSxFQUdsQixVQUFnQjtBQUNaLFNBQUssWUFBWTtBQUNqQixTQUFLLFlBQVksU0FBUyxNQUFNLEVBQUUsTUFBTTtBQUN4QyxTQUFLLFlBQVksU0FBUyxLQUFLLEVBQUUsTUFBTSxpR0FBaUcsS0FBSztBQUU3SSxRQUFJLHlCQUFRLEtBQUssYUFDWixRQUFRLGlCQUNSLFFBQVEsdUZBQ1IsUUFBUSxPQUFLO0FBQ1YsUUFBRSxRQUFRLE9BQU87QUFDakIsUUFBRSxTQUFTLE9BQU8sS0FBSyxPQUFPLFNBQVM7QUFDdkMsUUFBRSxTQUFTLENBQU0sTUFBSztBQUNsQixhQUFLLE9BQU8sU0FBUyxVQUFVLEVBQUUsU0FBUyxPQUFPLEtBQUssZ0JBQWdCO0FBQ3RFLGNBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUk5QixhQUFTLFNBQVMsS0FBSyxPQUFPLFNBQVMsUUFBUTtBQUMzQyxVQUFJLFVBQVUsS0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU0sTUFBTSxlQUFlO0FBQzNFLFVBQUksU0FBUyxJQUFJLGlDQUFnQixLQUFLLGFBQ2pDLGNBQWMsaUJBQ2QsU0FBUyxzQkFDVCxRQUFRLE1BQVk7QUFDakIsZ0JBQVEsU0FBUyxDQUFDLFFBQVE7QUFDMUIsZUFBTyxjQUFjLFFBQVEsU0FBUyxrQkFBa0I7QUFBQTtBQUVoRSxVQUFJLFVBQVUsS0FBSyxZQUFZO0FBQy9CLGNBQVEsU0FBUztBQUVqQixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxnQkFDUixRQUFRLGlEQUNSLFFBQVEsT0FBSztBQUNWLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sY0FBYztBQUNwQixrQkFBUSxRQUFRLE1BQU0sZUFBZTtBQUNyQyxnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLFFBQ1IsUUFBUSxlQUFlLE9BQUs7QUFDekIsVUFBRSxXQUFXLEVBQUUsTUFBTTtBQUNyQixVQUFFLFNBQVMsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLE1BQU07QUFDOUMsVUFBRSxXQUFXLEVBQUUsTUFBTTtBQUFBLFVBRXhCLFFBQVEsT0FBSztBQUNWLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sT0FBTztBQUNiLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSx5QkFBUSxTQUNQLFFBQVEsT0FDUixRQUFRLGdEQUNSLFFBQVEsT0FBSztBQUNWLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sTUFBTTtBQUNaLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSx5QkFBUSxTQUNQLFFBQVEscUJBQ1IsUUFBUSxnTUFDUixVQUFVLE9BQUs7QUFDWixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLGVBQWU7QUFDckIsZ0JBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUc5QixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxtQkFDUixRQUFRLHNFQUNSLFVBQVUsT0FBSztBQUNaLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sZ0JBQWdCO0FBQ3RCLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSx5QkFBUSxTQUNQLFFBQVEsa0JBQ1IsUUFBUSwwT0FDUixVQUFVLE9BQUs7QUFDWixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLGVBQWU7QUFDckIsZ0JBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUc5QixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxnQkFDUixRQUFRLGVBQWUsT0FBSztBQUN6QixVQUFFLFdBQVcsRUFBRSxNQUFNO0FBQ3JCLFVBQUUsU0FBUztBQUNYLFVBQUUsU0FBUyxNQUFNLEVBQUUsTUFBTTtBQUFBLFVBRTVCLFVBQVUsT0FBSztBQUNaLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sY0FBYztBQUNwQixnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLGFBQ1IsUUFBUSw4RUFDUixRQUFRLE9BQUs7QUFDVixVQUFFLFFBQVEsT0FBTztBQUNqQixVQUFFLFNBQVMsT0FBTyxNQUFNLFlBQVk7QUFDcEMsVUFBRSxTQUFTLENBQU0sTUFBSztBQUNsQixnQkFBTSxZQUFZLEVBQUUsU0FBUyxPQUFPLEtBQUssTUFBTTtBQUMvQyxnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLGtCQUNSLFFBQVEsZUFBZSxPQUFLO0FBQ3pCLFVBQUUsV0FBVyxFQUFFLE1BQU07QUFDckIsVUFBRSxTQUFTO0FBQ1gsVUFBRSxTQUFTLE1BQU0sRUFBRSxNQUFNO0FBQUEsVUFFNUIsWUFBWSxPQUFLO0FBQ2QsVUFBRSxRQUFRLE9BQU87QUFDakIsVUFBRSxRQUFRLE9BQU87QUFDakIsVUFBRSxTQUFTLE1BQU07QUFDakIsVUFBRSxTQUFTLENBQU0sTUFBSztBQUNsQixnQkFBTSxZQUFZO0FBQ2xCLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSxpQ0FBZ0IsU0FDZixjQUFjLGdCQUNkLFFBQVEsTUFBWTtBQUNqQixhQUFLLE9BQU8sU0FBUyxPQUFPLE9BQU87QUFDbkMsY0FBTSxLQUFLLE9BQU87QUFDbEIsYUFBSztBQUFBO0FBQUE7QUFJakIsU0FBSyxZQUFZLFNBQVM7QUFDMUIsUUFBSSxPQUFPLEtBQUssWUFBWSxTQUFTLEtBQUssRUFBRSxNQUFNO0FBQ2xELFNBQUssU0FBUztBQUNkLFNBQUssV0FBVyxFQUFFLE1BQU0sdUZBQXVGLEtBQUs7QUFFcEgsUUFBSSxTQUFTLEtBQUssWUFBWTtBQUM5QixRQUFJLFdBQVcsSUFBSSxtQ0FBa0I7QUFDckMsYUFBUyxVQUFVLE9BQU87QUFDMUIsYUFBUyxPQUFPLE9BQU8sS0FBSztBQUN4QixlQUFTLFVBQVUsS0FBSyxRQUFRLEtBQUs7QUFDekMsUUFBSSxpQ0FBZ0IsUUFDZixjQUFjLGFBQ2QsU0FBUyxxQkFDVCxRQUFRLE1BQVk7QUFDakIsVUFBSSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxVQUFVLE9BQU87QUFDakIsYUFBSyxPQUFPLFNBQVMsT0FBTyxLQUFLO0FBQUEsVUFDN0IsS0FBSztBQUFBLFVBQ0wsYUFBYTtBQUFBLFVBQ2IsTUFBTTtBQUFBLFVBQ04sY0FBYztBQUFBLFVBQ2QsZUFBZTtBQUFBLFVBQ2YsY0FBYztBQUFBLFVBQ2QsV0FBVztBQUFBLFVBQ1gsYUFBYTtBQUFBLFVBQ2IsV0FBVztBQUFBO0FBQUEsYUFFWjtBQUNILGFBQUssT0FBTyxTQUFTLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUFFN0MsWUFBTSxLQUFLLE9BQU87QUFDbEIsV0FBSztBQUFBO0FBR2IsU0FBSyxZQUFZLFNBQVM7QUFDMUIsU0FBSyxZQUFZLFNBQVMsS0FBSyxFQUFFLE1BQU07QUFDdkMsU0FBSyxZQUFZLFNBQVMsS0FBSyxFQUFFLE1BQU0sZ0NBQ2xDLFNBQVMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLCtDQUErQyxLQUFLO0FBQUE7QUFBQTs7O0FDbE1oRyx1QkFBOEM7QUFJdkMscUNBQThCLDBCQUFTO0FBQUEsRUFzQzFDLFlBQVksTUFBcUIsVUFBZ0MsTUFBMkIsTUFBYztBQUN0RyxVQUFNO0FBQ04sU0FBSyxPQUFPO0FBQ1osU0FBSyxPQUFPO0FBQ1osU0FBSyxRQUFRLElBQUksWUFBWSxVQUFVO0FBRXZDLGFBQVMsVUFBVSxpQkFBZ0I7QUFDL0IsV0FBSyxVQUFVLE9BQU8sTUFBTSxPQUFPLE1BQU0sTUFBTSxPQUFPLE9BQU87QUFBQTtBQUFBLEVBR3JFLFNBQWU7QUFDWCxTQUFLLFVBQVU7QUFDZixTQUFLLFVBQVUsU0FBUztBQUN4QixTQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU07QUFBQTtBQUFBLEVBRzFDLGFBQWEsTUFBa0I7QUFDM0IsVUFBTSxhQUFhO0FBQ25CLGFBQVMsVUFBVSxpQkFBZ0IsU0FBUztBQUN4QyxXQUFLLFFBQVEsT0FBSztBQUNkLFVBQUUsU0FBUyxPQUFPO0FBQ2xCLFVBQUUsUUFBUSxPQUFPO0FBQ2pCLFVBQUUsUUFBUSxNQUFNLE9BQU8sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSzFDLGNBQXNCO0FBQ2xCLFdBQU8sS0FBSztBQUFBO0FBQUEsRUFHaEIsaUJBQXlCO0FBQ3JCLFdBQU8sS0FBSyxLQUFLO0FBQUE7QUFBQSxFQUdyQixVQUFrQjtBQUNkLFdBQU8sUUFBUSxLQUFLO0FBQUE7QUFBQTtBQTFFckI7QUFFcUIsQUFGckIsZ0JBRXFCLFVBQW9CO0FBQUEsRUFDeEM7QUFBQSxJQUNJLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFFBQVEsT0FBSyxFQUFFLE1BQU07QUFBQTtBQUFBLEVBQ3RCO0FBQUEsSUFDQyxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixRQUFRLE9BQUssRUFBRSxNQUFNO0FBQUE7QUFBQSxFQUN0QjtBQUFBLElBQ0MsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sUUFBUSxPQUFLLFVBQVUsVUFBVSxVQUFVLEVBQUUsTUFBTTtBQUFBO0FBQUEsRUFDcEQ7QUFBQSxJQUNDLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFFBQVEsT0FBSyxLQUFLLEVBQUUsTUFBTTtBQUFBO0FBQUEsRUFDM0I7QUFBQSxJQUNDLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFFBQVEsT0FBSyxFQUFFLE1BQU07QUFBQTtBQUFBLEVBQ3RCO0FBQUEsSUFDQyxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixRQUFRLE9BQUssRUFBRSxNQUFNO0FBQUE7QUFBQSxFQUN0QjtBQUFBLElBQ0MsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sUUFBUSxPQUFLLEVBQUUsTUFBTTtBQUFBO0FBQUE7OztBSjVCakMsdUNBQWdELHdCQUFPO0FBQUEsRUFJaEQsU0FBd0I7QUFBQTtBQUM3QixZQUFNLEtBQUs7QUFFWCxlQUFTLFNBQVMsS0FBSyxTQUFTLFFBQVE7QUFDdkMsWUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU07QUFDeEI7QUFDRCxZQUFJLE9BQU8saUJBQWlCLE1BQU0sWUFBWSxjQUFjLFFBQVEsT0FBTztBQUMzRSxZQUFJLDBCQUFTLGVBQWUsTUFBTSxjQUFjO0FBQy9DLGtCQUFRLElBQUksa0JBQWtCO0FBQzlCO0FBQUE7QUFFRCxZQUFJO0FBQ0gsa0JBQVEsSUFBSSxxQkFBcUIsZ0JBQWdCLE1BQU07QUFFdkQsZUFBSyxhQUFhLE1BQU0sT0FBSyxJQUFJLGdCQUFnQixHQUFHLEtBQUssVUFBVSxPQUFPO0FBQzFFLGVBQUssV0FBVztBQUFBLFlBQ2YsSUFBSSxRQUFRO0FBQUEsWUFDWixNQUFNLFFBQVEsTUFBTTtBQUFBLFlBQ3BCLFVBQVUsTUFBTSxLQUFLLFNBQVMsTUFBTSxNQUFNLGNBQWM7QUFBQTtBQUd6RCxjQUFJLE1BQU07QUFDVCxpQkFBSyxjQUFjLFFBQVEsUUFBUSxRQUFRLE1BQU0sZUFDaEQsT0FBSyxLQUFLLFNBQVMsTUFBTSxNQUFNLGNBQWMsMEJBQVMsVUFBVSxFQUFFLFVBQVUsRUFBRTtBQUFBLGlCQUN6RSxHQUFOO0FBQ0Qsa0JBQVEsTUFBTSwyQkFBMkI7QUFBQTtBQUFBO0FBSTNDLFdBQUssY0FBYyxJQUFJLHVCQUF1QixLQUFLLEtBQUs7QUFFeEQsV0FBSyxtQ0FBbUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNO0FBQ2xFLFVBQUU7QUFDRixVQUFFLFNBQVM7QUFFWCxZQUFJLGFBQWEsbUJBQW1CLEtBQUs7QUFDekMsWUFBSSxZQUFZLGNBQWMsV0FBVyxHQUFHO0FBQzVDLFlBQUksQ0FBQyxXQUFXO0FBQ2YsWUFBRSxXQUFXLEVBQUUsTUFBTTtBQUNyQjtBQUFBO0FBRUQsWUFBSSxPQUFPLEtBQUssU0FBUyxPQUFPLEtBQUssT0FBSyxFQUFFLGVBQWU7QUFDM0QsWUFBSSxDQUFDLE1BQU07QUFDVixZQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQztBQUN4RDtBQUFBO0FBRUQsWUFBSSwwQkFBUyxlQUFlLEtBQUssY0FBYztBQUM5QyxZQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUc7QUFDeEI7QUFBQTtBQUdELFlBQUksYUFBYSxtQkFBbUIsS0FBSztBQUN6QyxZQUFJLFFBQVEsY0FBYyxXQUFXLEdBQUc7QUFDeEMsMEJBQVU7QUFFVixZQUFJLGlCQUFpQix1QkFBdUIsS0FBSztBQUNqRCxZQUFJLFlBQVksa0JBQWtCLGVBQWUsR0FBRztBQUNwRCxrQ0FBYztBQUVkLFlBQUksUUFBUSxJQUFJLFlBQVksS0FBSyxVQUFVO0FBQzNDLFVBQUUsWUFBWSxNQUFNLE9BQU8sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSTlCLGVBQWU7QUFBQTtBQUNwQixXQUFLLFdBQVcsT0FBTyxPQUFPLElBQUksaUJBQWlCLE1BQU0sS0FBSztBQUFBO0FBQUE7QUFBQSxFQUd6RCxlQUFlO0FBQUE7QUFDcEIsWUFBTSxLQUFLLFNBQVMsS0FBSztBQUFBO0FBQUE7QUFBQSxFQUdaLFNBQVMsTUFBYyxRQUFpQixPQUErQjtBQUFBO0FBQ3BGLFVBQUksUUFBUTtBQUNYLGFBQUssSUFBSSxVQUFVLG1CQUFtQjtBQUN0QyxZQUFJLE9BQU8sS0FBSyxJQUFJLFVBQVUsUUFBUTtBQUN0QyxjQUFNLEtBQUssYUFBYSxFQUFFLE1BQU0sTUFBTSxRQUFRO0FBQUEsYUFDeEM7QUFDTixZQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsZ0JBQWdCLE1BQU07QUFDN0MsZ0JBQU0sS0FBSyxJQUFJLFVBQVUsYUFBYSxPQUFPLGFBQWEsRUFBRSxNQUFNLE1BQU0sUUFBUTtBQUNqRixhQUFLLElBQUksVUFBVSxXQUFXLEtBQUssSUFBSSxVQUFVLGdCQUFnQixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIlBsZWFzZSBub3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCBmb3IgbW9zdCBvZiB0aGVzZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdC5cIiwgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcblxyXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRnJhbWUgUGFkZGluZ1wiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBwYWRkaW5nIHRoYXQgc2hvdWxkIGJlIGxlZnQgYXJvdW5kIHRoZSBpbnNpZGUgb2YgY3VzdG9tIGZyYW1lIHBhbmVzLCBpbiBwaXhlbHMuXCIpXHJcbiAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MucGFkZGluZykpO1xyXG4gICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nID0gdi5sZW5ndGggPyBOdW1iZXIodikgOiBkZWZhdWx0U2V0dGluZ3MucGFkZGluZztcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZnJhbWUgb2YgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWFkaW5nID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgzXCIsIHsgdGV4dDogZnJhbWUuZGlzcGxheU5hbWUgfHwgXCJVbm5hbWVkIEZyYW1lXCIgfSk7XHJcbiAgICAgICAgICAgIGxldCB0b2dnbGUgPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlNob3cgU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtc2hvd1wiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gIWNvbnRlbnQuaGlkZGVuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRCdXR0b25UZXh0KGNvbnRlbnQuaGlkZGVuID8gXCJTaG93IFNldHRpbmdzXCIgOiBcIkhpZGUgU2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgICAgICBjb250ZW50LmhpZGRlbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJEaXNwbGF5IE5hbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIGRpc3BsYXkgbmFtZSB0aGF0IHRoaXMgZnJhbWUgc2hvdWxkIGhhdmUuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5kaXNwbGF5TmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcuc2V0VGV4dChmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiVGhlIGljb24gdGhhdCB0aGlzIGZyYW1lJ3MgcGFuZSBzaG91bGQgaGF2ZS4gVGhlIG5hbWVzIG9mIGFueSBcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYVwiLCB7IHRleHQ6IFwiTHVjaWRlIGljb25zXCIsIGhyZWY6IFwiaHR0cHM6Ly9sdWNpZGUuZGV2L1wiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiIGNhbiBiZSB1c2VkLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmljb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJVUkxcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIFVSTCB0aGF0IHNob3VsZCBiZSBvcGVuZWQgaW4gdGhpcyBmcmFtZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS51cmwgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJEaXNhYmxlIG9uIE1vYmlsZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJDdXN0b20gRnJhbWVzIGlzIGEgbG90IG1vcmUgcmVzdHJpY3RlZCBvbiBtb2JpbGUgZGV2aWNlcyBhbmQgZG9lc24ndCBhbGxvdyBmb3IgdGhlIHNhbWUgdHlwZXMgb2YgY29udGVudCB0byBiZSBkaXNwbGF5ZWQuIElmIGEgZnJhbWUgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkIG9uIG1vYmlsZSwgaXQgY2FuIGJlIGRpc2FibGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmhpZGVPbk1vYmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGlkZU9uTW9iaWxlID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkIFJpYmJvbiBJY29uXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgYSBidXR0b24gdG8gb3BlbiB0aGlzIGZyYW1lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmliYm9uLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmFkZFJpYmJvbkljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmFkZFJpYmJvbkljb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJPcGVuIGluIENlbnRlclwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGV0aGVyIHRoaXMgZnJhbWUgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGUgdW5waW5uZWQgY2VudGVyIGVkaXRvciByYXRoZXIgdGhhbiBvbmUgb2YgdGhlIHBhbmVzIG9uIHRoZSBzaWRlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2l0ZXMgdGhhdCBkb24ndCB3b3JrIHdlbGwgaW4gYSBuYXJyb3cgdmlldywgb3Igc2l0ZXMgdGhhdCBkb24ndCByZXF1aXJlIGEgbm90ZSB0byBiZSBvcGVuIHdoZW4gdmlld2VkLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLm9wZW5JbkNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUub3BlbkluQ2VudGVyID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRm9yY2UgaWZyYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgdXNlIGlmcmFtZXMgb24gZGVza3RvcCBhcyBvcHBvc2VkIHRvIEVsZWN0cm9uIHdlYnZpZXdzLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJiclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiZW1cIiwgeyB0ZXh0OiBcIk9ubHkgZW5hYmxlIHRoaXMgc2V0dGluZyBpZiB0aGUgZnJhbWUgaXMgY2F1c2luZyBpc3N1ZXMgb3IgZnJlcXVlbnQgY3Jhc2hlcy4gVGhpcyBzZXR0aW5nIGNhdXNlcyBhbGwgRGVza3RvcC1vbmx5IHNldHRpbmdzIHRvIGJlIGlnbm9yZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5mb3JjZUlmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuZm9yY2VJZnJhbWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJQYWdlIFpvb21cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHpvb20gdGhhdCB0aGlzIGZyYW1lJ3MgcGFnZSBzaG91bGQgYmUgZGlzcGxheWVkIHdpdGgsIGFzIGEgcGVyY2VudGFnZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyhmcmFtZS56b29tTGV2ZWwgKiAxMDApKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS56b29tTGV2ZWwgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSAvIDEwMCA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkFkZGl0aW9uYWwgQ1NTXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIkEgc25pcHBldCBvZiBhZGRpdGlvbmFsIENTUyB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgZnJhbWUuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiTm90ZSB0aGF0IHRoaXMgaXMgb25seSBhcHBsaWVkIG9uIERlc2t0b3AuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0QXJlYSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwucm93cyA9IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLmNvbHMgPSA1MDtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuY3VzdG9tQ3NzID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJSZW1vdmUgRnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucmVtb3ZlKGZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJDcmVhdGUgYSBuZXcgZnJhbWUsIGVpdGhlciBmcm9tIGEgcHJlc2V0IHNoaXBwZWQgd2l0aCB0aGUgcGx1Z2luLCBvciBhIGN1c3RvbSBvbmUgdGhhdCB5b3UgY2FuIGVkaXQgeW91cnNlbGYuIEVhY2ggZnJhbWUncyBwYW5lIGNhbiBiZSBvcGVuZWQgdXNpbmcgdGhlIFxcXCJDdXN0b20gRnJhbWVzOiBPcGVuXFxcIiBjb21tYW5kLlwiIH0pO1xyXG5cclxuICAgICAgICBsZXQgYWRkRGl2ID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoKTtcclxuICAgICAgICBsZXQgZHJvcGRvd24gPSBuZXcgRHJvcGRvd25Db21wb25lbnQoYWRkRGl2KTtcclxuICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oXCJuZXdcIiwgXCJDdXN0b21cIik7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHByZXNldHMpKVxyXG4gICAgICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oa2V5LCBwcmVzZXRzW2tleV0uZGlzcGxheU5hbWUpO1xyXG4gICAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYWRkRGl2KVxyXG4gICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIkFkZCBGcmFtZVwiKVxyXG4gICAgICAgICAgICAuc2V0Q2xhc3MoXCJjdXN0b20tZnJhbWVzLWFkZFwiKVxyXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZHJvcGRvd24uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJOZXcgRnJhbWVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaChwcmVzZXRzW29wdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwiY3VzdG9tLWZyYW1lcy1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxlQUFlO0FBQ3ZDLFdBQUssTUFBTSxpQkFBaUIsYUFBYSxNQUFNO0FBQzNDLGFBQUssTUFBTSxjQUFjLEtBQUssS0FBSztBQUNuQyxhQUFLLE1BQU0sVUFBVSxLQUFLLEtBQUs7QUFBQTtBQUFBLFdBRWhDO0FBQ0gsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxX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 diff --git a/src/settings-tab.ts b/src/settings-tab.ts index 6eb7733..d847a25 100644 --- a/src/settings-tab.ts +++ b/src/settings-tab.ts @@ -14,7 +14,7 @@ export class CustomFramesSettingTab extends PluginSettingTab { display(): void { this.containerEl.empty(); this.containerEl.createEl("h2", { text: "Custom Frames Settings" }); - this.containerEl.createEl("p", { text: "Note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: "Please note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); new Setting(this.containerEl) .setName("Frame Padding") @@ -156,9 +156,7 @@ export class CustomFramesSettingTab extends PluginSettingTab { } this.containerEl.createEl("hr"); - let info = this.containerEl.createEl("p", { text: "Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the \"Custom Frames: Open\" command." }); - info.createEl("br"); - info.createSpan({ text: "Note that Obsidian has to be restarted or reloaded to activate a newly added frame.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: "Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the \"Custom Frames: Open\" command." }); let addDiv = this.containerEl.createDiv(); let dropdown = new DropdownComponent(addDiv); @@ -194,4 +192,4 @@ export class CustomFramesSettingTab extends PluginSettingTab { this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }) .createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "custom-frames-support" }); } -} \ No newline at end of file +} diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js index 4533e06..896f670 100644 --- a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js @@ -245,7 +245,7 @@ var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { display() { this.containerEl.empty(); this.containerEl.createEl("h2", { text: "Custom Frames Settings" }); - this.containerEl.createEl("p", { text: "Note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: "Please note that Obsidian has to be restarted or reloaded for most of these settings to take effect.", cls: "mod-warning" }); new import_obsidian2.Setting(this.containerEl).setName("Frame Padding").setDesc("The padding that should be left around the inside of custom frame panes, in pixels.").addText((t) => { t.inputEl.type = "number"; t.setValue(String(this.plugin.settings.padding)); @@ -348,9 +348,7 @@ var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { })); } this.containerEl.createEl("hr"); - let info = this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); - info.createEl("br"); - info.createSpan({ text: "Note that Obsidian has to be restarted or reloaded to activate a newly added frame.", cls: "mod-warning" }); + this.containerEl.createEl("p", { text: `Create a new frame, either from a preset shipped with the plugin, or a custom one that you can edit yourself. Each frame's pane can be opened using the "Custom Frames: Open" command.` }); let addDiv = this.containerEl.createDiv(); let dropdown = new import_obsidian2.DropdownComponent(addDiv); dropdown.addOption("new", "Custom"); @@ -538,4 +536,4 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgbGV0IGluZm8gPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuICAgICAgICBpbmZvLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgaW5mby5jcmVhdGVTcGFuKHsgdGV4dDogXCJOb3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCB0byBhY3RpdmF0ZSBhIG5ld2x5IGFkZGVkIGZyYW1lLlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59IiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgfSBmcm9tIFwiLi9zZXR0aW5ncy10YWJcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVWaWV3IH0gZnJvbSBcIi4vdmlld1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRnJhbWVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHJcblx0c2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdGZvciAobGV0IGZyYW1lIG9mIHRoaXMuc2V0dGluZ3MuZnJhbWVzKSB7XHJcblx0XHRcdGlmICghZnJhbWUudXJsIHx8ICFmcmFtZS5kaXNwbGF5TmFtZSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0bGV0IG5hbWUgPSBgY3VzdG9tLWZyYW1lcy0ke2ZyYW1lLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiLVwiKX1gO1xyXG5cdFx0XHRpZiAoUGxhdGZvcm0uaXNNb2JpbGVBcHAgJiYgZnJhbWUuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGZyYW1lICR7bmFtZX0gd2hpY2ggaXMgaGlkZGVuIG9uIG1vYmlsZWApO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFJlZ2lzdGVyaW5nIGZyYW1lICR7bmFtZX0gZm9yIFVSTCAke2ZyYW1lLnVybH1gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5yZWdpc3RlclZpZXcobmFtZSwgbCA9PiBuZXcgQ3VzdG9tRnJhbWVWaWV3KGwsIHRoaXMuc2V0dGluZ3MsIGZyYW1lLCBuYW1lKSk7XHJcblx0XHRcdFx0dGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdFx0XHRcdGlkOiBgb3Blbi0ke25hbWV9YCxcclxuXHRcdFx0XHRcdG5hbWU6IGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgZmFsc2UpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAoZnJhbWUuYWRkUmliYm9uSWNvbilcclxuXHRcdFx0XHRcdHRoaXMuYWRkUmliYm9uSWNvbihnZXRJY29uKGZyYW1lKSwgYE9wZW4gJHtmcmFtZS5kaXNwbGF5TmFtZX1gLFxyXG5cdFx0XHRcdFx0XHRlID0+IHRoaXMub3BlbkxlYWYobmFtZSwgZnJhbWUub3BlbkluQ2VudGVyLCBQbGF0Zm9ybS5pc01hY09TID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSk7XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IHJlZ2lzdGVyIGZyYW1lICR7bmFtZX0sIGlzIHRoZXJlIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgbmFtZT9gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImN1c3RvbS1mcmFtZXNcIiwgKHMsIGUpID0+IHtcclxuXHRcdFx0ZS5lbXB0eSgpO1xyXG5cdFx0XHRlLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3LWZpbGVcIik7XHJcblxyXG5cdFx0XHRsZXQgZnJhbWVNYXRjaCA9IC9mcmFtZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IGZyYW1lTmFtZSA9IGZyYW1lTWF0Y2ggJiYgZnJhbWVNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdGlmICghZnJhbWVOYW1lKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogXCJDb3VsZG4ndCBwYXJzZSBmcmFtZSBuYW1lXCIgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBkYXRhID0gdGhpcy5zZXR0aW5ncy5mcmFtZXMuZmluZChmID0+IGYuZGlzcGxheU5hbWUgPT0gZnJhbWVOYW1lKTtcclxuXHRcdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYENvdWxkbid0IGZpbmQgYSBmcmFtZSB3aXRoIG5hbWUgJHtmcmFtZU5hbWV9YCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGRhdGEuaGlkZU9uTW9iaWxlKSB7XHJcblx0XHRcdFx0ZS5jcmVhdGVTcGFuKHsgdGV4dDogYCR7ZnJhbWVOYW1lfSBpcyBoaWRkZW4gb24gbW9iaWxlYCB9KTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGxldCBzdHlsZU1hdGNoID0gL3N0eWxlOihbXlxcbl0rKS9naS5leGVjKHMpO1xyXG5cdFx0XHRsZXQgc3R5bGUgPSBzdHlsZU1hdGNoICYmIHN0eWxlTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRzdHlsZSB8fD0gXCJoZWlnaHQ6IDYwMHB4O1wiO1xyXG5cclxuXHRcdFx0bGV0IHVybFN1ZmZpeE1hdGNoID0gL3VybHN1ZmZpeDooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHVybFN1ZmZpeCA9IHVybFN1ZmZpeE1hdGNoICYmIHVybFN1ZmZpeE1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0dXJsU3VmZml4IHx8PSBcIlwiO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHRoaXMuc2V0dGluZ3MsIGRhdGEpO1xyXG5cdFx0XHRlLmFwcGVuZENoaWxkKGZyYW1lLmNyZWF0ZShzdHlsZSwgdXJsU3VmZml4KSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2V0dGluZ3MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBvcGVuTGVhZihuYW1lOiBzdHJpbmcsIGNlbnRlcjogYm9vbGVhbiwgc3BsaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShuYW1lKTtcclxuXHRcdFx0bGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihzcGxpdCk7XHJcblx0XHRcdGF3YWl0IGxlYWYuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpLmxlbmd0aClcclxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKS5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGUoYWRkaXRpb25hbFN0eWxlOiBzdHJpbmcgPSB1bmRlZmluZWQsIHVybFN1ZmZpeDogc3RyaW5nID0gdW5kZWZpbmVkKTogYW55IHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd3BvcHVwc1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5hZGRFdmVudExpc3RlbmVyKFwiZG9tLXJlYWR5XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0Wm9vbUZhY3Rvcih0aGlzLmRhdGEuem9vbUxldmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuaW5zZXJ0Q1NTKHRoaXMuZGF0YS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzYW5kYm94XCIsIFwiYWxsb3ctZm9ybXMgYWxsb3ctbW9kYWxzIGFsbG93LXBvcHVwcyBhbGxvdy1wcmVzZW50YXRpb24gYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctc2NyaXB0cyBhbGxvdy10b3AtbmF2aWdhdGlvbi1ieS11c2VyLWFjdGl2YXRpb25cIik7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJlbmNyeXB0ZWQtbWVkaWE7IGZ1bGxzY3JlZW47IG92ZXJzaXplZC1pbWFnZXM7IHBpY3R1cmUtaW4tcGljdHVyZTsgc3luYy14aHI7IGdlb2xvY2F0aW9uO1wiKTtcclxuICAgICAgICAgICAgc3R5bGUgKz0gYHRyYW5zZm9ybTogc2NhbGUoJHt0aGlzLmRhdGEuem9vbUxldmVsfSk7IHRyYW5zZm9ybS1vcmlnaW46IDAgMDtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy1mcmFtZVwiKTtcclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgICAgaWYgKHVybFN1ZmZpeCkge1xyXG4gICAgICAgICAgICBpZiAoIXVybFN1ZmZpeC5zdGFydHNXaXRoKFwiL1wiKSlcclxuICAgICAgICAgICAgICAgIHNyYyArPSBcIi9cIjtcclxuICAgICAgICAgICAgc3JjICs9IHVybFN1ZmZpeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Gb3J3YXJkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29Gb3J3YXJkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcbn0iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG4iLCAiaW1wb3J0IHsgQXBwLCBCdXR0b25Db21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRTZXR0aW5ncywgcHJlc2V0cyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21GcmFtZXNQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lc1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcbiAgICBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW4pIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJDdXN0b20gRnJhbWVzIFNldHRpbmdzXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIlBsZWFzZSBub3RlIHRoYXQgT2JzaWRpYW4gaGFzIHRvIGJlIHJlc3RhcnRlZCBvciByZWxvYWRlZCBmb3IgbW9zdCBvZiB0aGVzZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdC5cIiwgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcblxyXG4gICAgICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRnJhbWUgUGFkZGluZ1wiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBwYWRkaW5nIHRoYXQgc2hvdWxkIGJlIGxlZnQgYXJvdW5kIHRoZSBpbnNpZGUgb2YgY3VzdG9tIGZyYW1lIHBhbmVzLCBpbiBwaXhlbHMuXCIpXHJcbiAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShTdHJpbmcodGhpcy5wbHVnaW4uc2V0dGluZ3MucGFkZGluZykpO1xyXG4gICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nID0gdi5sZW5ndGggPyBOdW1iZXIodikgOiBkZWZhdWx0U2V0dGluZ3MucGFkZGluZztcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZnJhbWUgb2YgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWFkaW5nID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImgzXCIsIHsgdGV4dDogZnJhbWUuZGlzcGxheU5hbWUgfHwgXCJVbm5hbWVkIEZyYW1lXCIgfSk7XHJcbiAgICAgICAgICAgIGxldCB0b2dnbGUgPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRoaXMuY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlNob3cgU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtc2hvd1wiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gIWNvbnRlbnQuaGlkZGVuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRCdXR0b25UZXh0KGNvbnRlbnQuaGlkZGVuID8gXCJTaG93IFNldHRpbmdzXCIgOiBcIkhpZGUgU2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgICAgICBjb250ZW50LmhpZGRlbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJEaXNwbGF5IE5hbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIGRpc3BsYXkgbmFtZSB0aGF0IHRoaXMgZnJhbWUgc2hvdWxkIGhhdmUuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5kaXNwbGF5TmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmcuc2V0VGV4dChmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiVGhlIGljb24gdGhhdCB0aGlzIGZyYW1lJ3MgcGFuZSBzaG91bGQgaGF2ZS4gVGhlIG5hbWVzIG9mIGFueSBcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYVwiLCB7IHRleHQ6IFwiTHVjaWRlIGljb25zXCIsIGhyZWY6IFwiaHR0cHM6Ly9sdWNpZGUuZGV2L1wiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiIGNhbiBiZSB1c2VkLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmljb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJVUkxcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIFVSTCB0aGF0IHNob3VsZCBiZSBvcGVuZWQgaW4gdGhpcyBmcmFtZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS51cmwgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJEaXNhYmxlIG9uIE1vYmlsZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJDdXN0b20gRnJhbWVzIGlzIGEgbG90IG1vcmUgcmVzdHJpY3RlZCBvbiBtb2JpbGUgZGV2aWNlcyBhbmQgZG9lc24ndCBhbGxvdyBmb3IgdGhlIHNhbWUgdHlwZXMgb2YgY29udGVudCB0byBiZSBkaXNwbGF5ZWQuIElmIGEgZnJhbWUgZG9lc24ndCB3b3JrIGFzIGV4cGVjdGVkIG9uIG1vYmlsZSwgaXQgY2FuIGJlIGRpc2FibGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmhpZGVPbk1vYmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaGlkZU9uTW9iaWxlID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkIFJpYmJvbiBJY29uXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgYSBidXR0b24gdG8gb3BlbiB0aGlzIGZyYW1lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmliYm9uLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmFkZFJpYmJvbkljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmFkZFJpYmJvbkljb24gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJPcGVuIGluIENlbnRlclwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGV0aGVyIHRoaXMgZnJhbWUgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGUgdW5waW5uZWQgY2VudGVyIGVkaXRvciByYXRoZXIgdGhhbiBvbmUgb2YgdGhlIHBhbmVzIG9uIHRoZSBzaWRlLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2l0ZXMgdGhhdCBkb24ndCB3b3JrIHdlbGwgaW4gYSBuYXJyb3cgdmlldywgb3Igc2l0ZXMgdGhhdCBkb24ndCByZXF1aXJlIGEgbm90ZSB0byBiZSBvcGVuIHdoZW4gdmlld2VkLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLm9wZW5JbkNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUub3BlbkluQ2VudGVyID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRm9yY2UgaWZyYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgdXNlIGlmcmFtZXMgb24gZGVza3RvcCBhcyBvcHBvc2VkIHRvIEVsZWN0cm9uIHdlYnZpZXdzLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJiclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiZW1cIiwgeyB0ZXh0OiBcIk9ubHkgZW5hYmxlIHRoaXMgc2V0dGluZyBpZiB0aGUgZnJhbWUgaXMgY2F1c2luZyBpc3N1ZXMgb3IgZnJlcXVlbnQgY3Jhc2hlcy4gVGhpcyBzZXR0aW5nIGNhdXNlcyBhbGwgRGVza3RvcC1vbmx5IHNldHRpbmdzIHRvIGJlIGlnbm9yZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5mb3JjZUlmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuZm9yY2VJZnJhbWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJQYWdlIFpvb21cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHpvb20gdGhhdCB0aGlzIGZyYW1lJ3MgcGFnZSBzaG91bGQgYmUgZGlzcGxheWVkIHdpdGgsIGFzIGEgcGVyY2VudGFnZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyhmcmFtZS56b29tTGV2ZWwgKiAxMDApKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS56b29tTGV2ZWwgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSAvIDEwMCA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkFkZGl0aW9uYWwgQ1NTXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIkEgc25pcHBldCBvZiBhZGRpdGlvbmFsIENTUyB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgZnJhbWUuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiTm90ZSB0aGF0IHRoaXMgaXMgb25seSBhcHBsaWVkIG9uIERlc2t0b3AuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0QXJlYSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwucm93cyA9IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLmNvbHMgPSA1MDtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuY3VzdG9tQ3NzID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJSZW1vdmUgRnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucmVtb3ZlKGZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJDcmVhdGUgYSBuZXcgZnJhbWUsIGVpdGhlciBmcm9tIGEgcHJlc2V0IHNoaXBwZWQgd2l0aCB0aGUgcGx1Z2luLCBvciBhIGN1c3RvbSBvbmUgdGhhdCB5b3UgY2FuIGVkaXQgeW91cnNlbGYuIEVhY2ggZnJhbWUncyBwYW5lIGNhbiBiZSBvcGVuZWQgdXNpbmcgdGhlIFxcXCJDdXN0b20gRnJhbWVzOiBPcGVuXFxcIiBjb21tYW5kLlwiIH0pO1xyXG5cclxuICAgICAgICBsZXQgYWRkRGl2ID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoKTtcclxuICAgICAgICBsZXQgZHJvcGRvd24gPSBuZXcgRHJvcGRvd25Db21wb25lbnQoYWRkRGl2KTtcclxuICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oXCJuZXdcIiwgXCJDdXN0b21cIik7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHByZXNldHMpKVxyXG4gICAgICAgICAgICBkcm9wZG93bi5hZGRPcHRpb24oa2V5LCBwcmVzZXRzW2tleV0uZGlzcGxheU5hbWUpO1xyXG4gICAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYWRkRGl2KVxyXG4gICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIkFkZCBGcmFtZVwiKVxyXG4gICAgICAgICAgICAuc2V0Q2xhc3MoXCJjdXN0b20tZnJhbWVzLWFkZFwiKVxyXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZHJvcGRvd24uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24gPT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCJOZXcgRnJhbWVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaChwcmVzZXRzW29wdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwiY3VzdG9tLWZyYW1lcy1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IZWFkZXJNZW51KG1lbnU6IE1lbnUpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5vbkhlYWRlck1lbnUobWVudSk7XHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIG1lbnUuYWRkSXRlbShpID0+IHtcclxuICAgICAgICAgICAgICAgIGkuc2V0VGl0bGUoYWN0aW9uLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaS5zZXRJY29uKGFjdGlvbi5pY29uKTtcclxuICAgICAgICAgICAgICAgIGkub25DbGljaygoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBnZXRJY29uKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWlDOzs7QUNBakMsc0JBQXlCO0FBR2xCLHdCQUFrQjtBQUFBLEVBTXJCLFlBQVksVUFBZ0MsTUFBMkI7QUFDbkUsU0FBSyxXQUFXO0FBQ2hCLFNBQUssT0FBTztBQUFBO0FBQUEsRUFHVCxPQUFPLGtCQUEwQixRQUFXLFlBQW9CLFFBQWdCO0FBQ25GLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxlQUFlO0FBQ3ZDLFdBQUssTUFBTSxpQkFBaUIsYUFBYSxNQUFNO0FBQzNDLGFBQUssTUFBTSxjQUFjLEtBQUssS0FBSztBQUNuQyxhQUFLLE1BQU0sVUFBVSxLQUFLLEtBQUs7QUFBQTtBQUFBLFdBRWhDO0FBQ0gsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxXQUFLLE1BQU0sYUFBYSxX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