diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2024-04-29 22:06:12 -0400 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2024-04-29 22:06:12 -0400 |
| commit | 4d53fa14ee0cd615444aca6f6ba176e0ccc1b5be (patch) | |
| tree | 4d9f0527d9e6db4f92736ead0aa9bb3f840a0f89 /SI/.obsidian/plugins/obsidian-scroll-offset/main.js | |
init
Diffstat (limited to 'SI/.obsidian/plugins/obsidian-scroll-offset/main.js')
| -rw-r--r-- | SI/.obsidian/plugins/obsidian-scroll-offset/main.js | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/SI/.obsidian/plugins/obsidian-scroll-offset/main.js b/SI/.obsidian/plugins/obsidian-scroll-offset/main.js new file mode 100644 index 0000000..abd6d0f --- /dev/null +++ b/SI/.obsidian/plugins/obsidian-scroll-offset/main.js @@ -0,0 +1,198 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __reExport = (target, module2, desc) => { + if (module2 && typeof module2 === "object" || typeof module2 === "function") { + for (let key of __getOwnPropNames(module2)) + if (!__hasOwnProp.call(target, key) && key !== "default") + __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); + } + return target; +}; +var __toModule = (module2) => { + return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); +}; +var __async = (__this, __arguments, generator) => { + return new Promise((resolve, reject) => { + var fulfilled = (value) => { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + }; + var rejected = (value) => { + try { + step(generator.throw(value)); + } catch (e) { + reject(e); + } + }; + var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); + step((generator = generator.apply(__this, __arguments)).next()); + }); +}; + +// src/main.ts +__export(exports, { + default: () => ScrollOffset +}); +var import_obsidian = __toModule(require("obsidian")); + +// src/ScrollOffsetCM6.ts +var import_view = __toModule(require("@codemirror/view")); +var import_state = __toModule(require("@codemirror/state")); +var eventHandlers = { + mousedown(event, view) { + this.switch = false; + }, + keydown(event, view) { + this.switch = true; + } +}; +function generateScrollOffsetCM6Plugin(calcRequiredOffset) { + return import_state.Prec.highest(import_view.ViewPlugin.fromClass(class { + constructor(_view) { + this.margin = 200; + this.switch = true; + } + update(_update) { + if (!_update.selectionSet) + return; + const view = _update.view; + view.requestMeasure({ + read: () => { + return { + cursor: view.coordsAtPos(view.state.selection.main.head) + }; + }, + write: ({ cursor }) => { + if (!cursor) + return; + if (this.switch) { + const cursorHeight = cursor.bottom - cursor.top + 5; + const requiredOffset = calcRequiredOffset(view.dom, cursorHeight); + this.margin = requiredOffset; + } else { + this.margin = 0; + } + } + }); + } + }, { + eventHandlers, + provide: (plugin) => import_view.EditorView.scrollMargins.of((view) => { + const value = view.plugin(plugin); + return { + top: value.margin, + bottom: value.margin + }; + }) + })); +} +var ScrollOffsetCM6_default = generateScrollOffsetCM6Plugin; + +// src/main.ts +var DEFAULT_SETTINGS = { + percentageMode: true, + offset: "25" +}; +var ScrollOffset = class extends import_obsidian.Plugin { + constructor() { + super(...arguments); + this.clickSwitch = true; + this.mouseDownHandler = () => { + this.clickSwitch = false; + }; + this.cursorActiveHandler = (cm) => { + if (!this.clickSwitch) { + this.clickSwitch = true; + return; + } + this.scrollLaunch(cm); + }; + this.calcRequiredOffset = (container, cursorHeight) => { + const { settings } = this; + const maxOffset = (container.offsetHeight - cursorHeight) / 2; + let requiredOffset = settings.percentageMode ? container.offsetHeight * +settings.offset / 100 : +settings.offset; + requiredOffset = Math.min(requiredOffset, maxOffset); + return requiredOffset; + }; + this.scrollLaunch = (cm) => { + const cursor = cm.charCoords(cm.getCursor()); + const cursorHeight = cursor.bottom - cursor.top + 5; + const container = cm.getWrapperElement(); + const requiredOffset = this.calcRequiredOffset(container, cursorHeight); + cm.scrollIntoView(null, requiredOffset); + }; + this.enableScrollOffset = () => { + this.registerCodeMirror((cm) => { + cm.on("mousedown", this.mouseDownHandler); + cm.on("cursorActivity", this.cursorActiveHandler); + }); + this.registerEditorExtension(ScrollOffsetCM6_default(this.calcRequiredOffset)); + }; + this.disableScrollOffset = () => { + this.app.workspace.iterateCodeMirrors((cm) => { + cm.off("mousedown", this.mouseDownHandler); + cm.off("cursorActivity", this.cursorActiveHandler); + }); + }; + } + onload() { + return __async(this, null, function* () { + console.log("Loading Scroll Offset."); + yield this.loadSettings(); + this.addSettingTab(new ScrollOffsetSettingTab(this.app, this)); + this.enableScrollOffset(); + }); + } + onunload() { + this.disableScrollOffset(); + console.log("Scroll Offset unloaded."); + } + loadSettings() { + return __async(this, null, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + }); + } + saveSettings() { + return __async(this, null, function* () { + yield this.saveData(this.settings); + }); + } +}; +var ScrollOffsetSettingTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h2", { text: "Scroll Offset Settings." }); + new import_obsidian.Setting(containerEl).setName("Use percentage offset").setDesc("Use percentage offset, or use fixed number of distance instead").addToggle((comp) => comp.setValue(this.plugin.settings.percentageMode).onChange((value) => { + this.plugin.settings.percentageMode = value; + this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Distance").setDesc('unit in "px", or "%" if using percentage offset, 0 to disable this plugin').addText((text) => text.setValue(this.plugin.settings.offset).onChange((value) => { + this.plugin.settings.offset = value; + this.plugin.saveSettings(); + })); + } +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL1Njcm9sbE9mZnNldENNNi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCBnZW5lcmF0ZVNjcm9sbE9mZnNldENNNlBsdWdpbiBmcm9tICcuL1Njcm9sbE9mZnNldENNNic7XHJcblxyXG5pbnRlcmZhY2UgU2Nyb2xsT2Zmc2V0U2V0dGluZ3Mge1xyXG5cdHBlcmNlbnRhZ2VNb2RlOiBib29sZWFuO1xyXG5cdG9mZnNldDogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBTY3JvbGxPZmZzZXRTZXR0aW5ncyA9IHtcclxuXHRwZXJjZW50YWdlTW9kZTogdHJ1ZSxcclxuXHRvZmZzZXQ6ICcyNScsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjcm9sbE9mZnNldCBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHJpdmF0ZSBjbGlja1N3aXRjaCA9IHRydWU7XHJcblx0c2V0dGluZ3M6IFNjcm9sbE9mZnNldFNldHRpbmdzO1xyXG5cclxuXHQvLyBwcmV2ZW50IGNsaWNrIHNjcm9sbFxyXG5cdG1vdXNlRG93bkhhbmRsZXIgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmNsaWNrU3dpdGNoID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBDTTUgc2Nyb2xsIGhhbmRsZXJcclxuXHRjdXJzb3JBY3RpdmVIYW5kbGVyID0gKGNtOiBDb2RlTWlycm9yLkVkaXRvcikgPT4ge1xyXG5cdFx0aWYgKCF0aGlzLmNsaWNrU3dpdGNoKSB7XHJcblx0XHRcdHRoaXMuY2xpY2tTd2l0Y2ggPSB0cnVlO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zY3JvbGxMYXVuY2goY20pO1xyXG5cdH1cclxuXHJcblx0Y2FsY1JlcXVpcmVkT2Zmc2V0ID0gKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGN1cnNvckhlaWdodDogbnVtYmVyKSA9PiB7XHJcblx0XHRjb25zdCB7c2V0dGluZ3N9ID0gdGhpcztcclxuXHRcdGNvbnN0IG1heE9mZnNldCA9IChjb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gY3Vyc29ySGVpZ2h0KSAvIDI7XHJcblxyXG5cdFx0bGV0IHJlcXVpcmVkT2Zmc2V0OiBudW1iZXIgPSBzZXR0aW5ncy5wZXJjZW50YWdlTW9kZVxyXG5cdFx0XHQ/IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQgKiArc2V0dGluZ3Mub2Zmc2V0IC8gMTAwXHJcblx0XHRcdDogK3NldHRpbmdzLm9mZnNldDtcclxuXHRcclxuXHRcdHJlcXVpcmVkT2Zmc2V0ID0gTWF0aC5taW4ocmVxdWlyZWRPZmZzZXQsIG1heE9mZnNldCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVpcmVkT2Zmc2V0XHJcblx0fVxyXG5cclxuXHRzY3JvbGxMYXVuY2ggPSAoY206IENvZGVNaXJyb3IuRWRpdG9yKSA9PiB7XHJcblx0XHRjb25zdCBjdXJzb3IgPSBjbS5jaGFyQ29vcmRzKGNtLmdldEN1cnNvcigpKTtcclxuXHRcdGNvbnN0IGN1cnNvckhlaWdodCA9IGN1cnNvci5ib3R0b20gLSBjdXJzb3IudG9wICsgNTtcclxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7XHJcblx0XHRjb25zdCByZXF1aXJlZE9mZnNldCA9IHRoaXMuY2FsY1JlcXVpcmVkT2Zmc2V0KGNvbnRhaW5lciwgY3Vyc29ySGVpZ2h0KTtcclxuXHJcblx0XHQvLyBGaXJzdCBhcmd1bWVudCBgbnVsbGAgbWVhbnMgdGhlIGN1cnNvclxyXG5cdFx0Y20uc2Nyb2xsSW50b1ZpZXcobnVsbCwgcmVxdWlyZWRPZmZzZXQpXHJcblx0fVxyXG5cclxuXHRlbmFibGVTY3JvbGxPZmZzZXQgPSAoKSA9PiB7XHJcblx0XHQvLyB0aGlzIHdvcmtzIHdpdGggQ001XHJcblx0XHR0aGlzLnJlZ2lzdGVyQ29kZU1pcnJvcihjbSA9PiB7XHJcblx0XHRcdGNtLm9uKCdtb3VzZWRvd24nLCB0aGlzLm1vdXNlRG93bkhhbmRsZXIpXHJcblx0XHRcdGNtLm9uKCdjdXJzb3JBY3Rpdml0eScsIHRoaXMuY3Vyc29yQWN0aXZlSGFuZGxlcik7XHJcblx0XHR9KVxyXG5cclxuXHRcdC8vIHRoaXMgd29ya3Mgd2l0aCBDTTZcclxuXHRcdHRoaXMucmVnaXN0ZXJFZGl0b3JFeHRlbnNpb24oZ2VuZXJhdGVTY3JvbGxPZmZzZXRDTTZQbHVnaW4odGhpcy5jYWxjUmVxdWlyZWRPZmZzZXQpKTtcclxuXHR9XHJcblxyXG5cdGRpc2FibGVTY3JvbGxPZmZzZXQgPSAoKSA9PiB7XHJcblx0XHR0aGlzLmFwcC53b3Jrc3BhY2UuaXRlcmF0ZUNvZGVNaXJyb3JzKGNtID0+IHtcclxuXHRcdFx0Y20ub2ZmKCdtb3VzZWRvd24nLCB0aGlzLm1vdXNlRG93bkhhbmRsZXIpXHJcblx0XHRcdGNtLm9mZignY3Vyc29yQWN0aXZpdHknLCB0aGlzLmN1cnNvckFjdGl2ZUhhbmRsZXIpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9ubG9hZCgpIHtcclxuXHRcdGNvbnNvbGUubG9nKCdMb2FkaW5nIFNjcm9sbCBPZmZzZXQuJylcclxuXHJcblx0XHQvLyBUaGlzIGxvYWQgY3VycmVudCBzZXR0aW5ncy5cclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG5cdFx0Ly8gVGhpcyBhZGRzIGEgc2V0dGluZ3MgdGFiIHNvIHRoZSB1c2VyIGNhbiBjb25maWd1cmUgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBwbHVnaW5cclxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgU2Nyb2xsT2Zmc2V0U2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xyXG5cclxuXHRcdHRoaXMuZW5hYmxlU2Nyb2xsT2Zmc2V0KCk7XHJcblx0fVxyXG5cclxuXHRvbnVubG9hZCgpIHtcclxuXHRcdHRoaXMuZGlzYWJsZVNjcm9sbE9mZnNldCgpO1xyXG5cdFxyXG5cdFx0Y29uc29sZS5sb2coJ1Njcm9sbCBPZmZzZXQgdW5sb2FkZWQuJylcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIFNldHRpbmdzIHRhYlxyXG5jbGFzcyBTY3JvbGxPZmZzZXRTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblx0cGx1Z2luOiBTY3JvbGxPZmZzZXQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFNjcm9sbE9mZnNldCkge1xyXG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xyXG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcblx0fVxyXG5cclxuXHRkaXNwbGF5KCk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcblxyXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7dGV4dDogJ1Njcm9sbCBPZmZzZXQgU2V0dGluZ3MuJ30pO1xyXG5cclxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG5cdFx0XHQuc2V0TmFtZSgnVXNlIHBlcmNlbnRhZ2Ugb2Zmc2V0JylcclxuXHRcdFx0LnNldERlc2MoJ1VzZSBwZXJjZW50YWdlIG9mZnNldCwgb3IgdXNlIGZpeGVkIG51bWJlciBvZiBkaXN0YW5jZSBpbnN0ZWFkJylcclxuXHRcdFx0LmFkZFRvZ2dsZShjb21wID0+IGNvbXBcclxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucGVyY2VudGFnZU1vZGUpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucGVyY2VudGFnZU1vZGUgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcblx0XHRcdC5zZXROYW1lKCdEaXN0YW5jZScpXHJcblx0XHRcdC5zZXREZXNjKCd1bml0IGluIFwicHhcIiwgb3IgXCIlXCIgaWYgdXNpbmcgcGVyY2VudGFnZSBvZmZzZXQsIDAgdG8gZGlzYWJsZSB0aGlzIHBsdWdpbicpXHJcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxyXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5vZmZzZXQpXHJcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Mub2Zmc2V0ID0gdmFsdWU7XHJcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQge1ZpZXdQbHVnaW4sIFZpZXdVcGRhdGUsIEVkaXRvclZpZXd9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xuaW1wb3J0IHsgUHJlYyB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJ1xuXG5jb25zdCBldmVudEhhbmRsZXJzID0ge1xuICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHZpZXc6IEVkaXRvclZpZXcpIHtcbiAgICB0aGlzLnN3aXRjaCA9IGZhbHNlO1xuICB9LFxuICBrZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2aWV3OiBFZGl0b3JWaWV3KSB7XG4gICAgdGhpcy5zd2l0Y2ggPSB0cnVlO1xuICB9LFxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNjcm9sbE9mZnNldENNNlBsdWdpbihjYWxjUmVxdWlyZWRPZmZzZXQ6IChjb250YWluZXI6IEhUTUxFbGVtZW50LCBjdXJzb3JIZWlnaHQ6IG51bWJlcikgPT4gbnVtYmVyKSB7XG4gIHJldHVybiBQcmVjLmhpZ2hlc3QoVmlld1BsdWdpbi5mcm9tQ2xhc3MoY2xhc3Mge1xuICAgIG1hcmdpbiA9IDIwMDtcbiAgICBzd2l0Y2ggPSB0cnVlO1xuICBcbiAgICBjb25zdHJ1Y3RvcihfdmlldzogRWRpdG9yVmlldykge31cbiAgXG4gICAgdXBkYXRlKF91cGRhdGU6IFZpZXdVcGRhdGUpIHtcbiAgICAgIGlmICghX3VwZGF0ZS5zZWxlY3Rpb25TZXQpIHJldHVybiA7XG5cbiAgICAgIGNvbnN0IHZpZXcgPSBfdXBkYXRlLnZpZXc7XG5cbiAgICAgIHZpZXcucmVxdWVzdE1lYXN1cmUoe1xuICAgICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvcjogdmlldy5jb29yZHNBdFBvcyh2aWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGU6ICh7Y3Vyc29yfSkgPT4ge1xuICAgICAgICAgIGlmICghY3Vyc29yKSByZXR1cm4gO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3dpdGNoKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENhbid0IHVzZSBgbGluZUhlaWdodGAgYmVjYXVzZSBvZiBtdWx0aXBsZSBsaW5lIHBhcmFncmFwaFxuICAgICAgICAgICAgICogQnV0IGN1cnNvckhlaWdodCBpcyBsZXNzIHRoZW4gbGluZUhlaWdodCBhYm91dCA1cHhcbiAgICAgICAgICAgICAqIFNvIGFkZCB0aGlzIDVweDtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgY3Vyc29ySGVpZ2h0ID0gY3Vyc29yLmJvdHRvbSAtIGN1cnNvci50b3AgKyA1XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlZE9mZnNldCA9IGNhbGNSZXF1aXJlZE9mZnNldCh2aWV3LmRvbSwgY3Vyc29ySGVpZ2h0KVxuXG4gICAgICAgICAgICB0aGlzLm1hcmdpbiA9IHJlcXVpcmVkT2Zmc2V0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcmdpbiA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFxuICB7XG4gICAgZXZlbnRIYW5kbGVycyxcbiAgICBwcm92aWRlOiBwbHVnaW4gPT4gRWRpdG9yVmlldy5zY3JvbGxNYXJnaW5zLm9mKHZpZXcgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB2aWV3LnBsdWdpbihwbHVnaW4pXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3A6IHZhbHVlLm1hcmdpbixcbiAgICAgICAgYm90dG9tOiB2YWx1ZS5tYXJnaW5cbiAgICAgIH1cbiAgICB9KVxuICB9KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2VuZXJhdGVTY3JvbGxPZmZzZXRDTTZQbHVnaW4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUF1RDs7O0FDQXZELGtCQUFpRDtBQUNqRCxtQkFBcUI7QUFFckIsSUFBTSxnQkFBZ0I7QUFBQSxFQUNwQixVQUFVLE9BQW1CLE1BQWtCO0FBQzdDLFNBQUssU0FBUztBQUFBO0FBQUEsRUFFaEIsUUFBUSxPQUFzQixNQUFrQjtBQUM5QyxTQUFLLFNBQVM7QUFBQTtBQUFBO0FBSWxCLHVDQUF1QyxvQkFBOEU7QUFDbkgsU0FBTyxrQkFBSyxRQUFRLHVCQUFXLFVBQVUsTUFBTTtBQUFBLElBSTdDLFlBQVksT0FBbUI7QUFIL0Isb0JBQVM7QUFDVCxvQkFBUztBQUFBO0FBQUEs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 |
