obsidian-dev-utils 94.4.0 → 94.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -125,7 +125,7 @@ __export(generated_during_build_exports, {
|
|
|
125
125
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
126
126
|
});
|
|
127
127
|
module.exports = __toCommonJS(generated_during_build_exports);
|
|
128
|
-
const LIBRARY_VERSION = "94.4.
|
|
128
|
+
const LIBRARY_VERSION = "94.4.1";
|
|
129
129
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus:invalid:not(.untouched),\n.obsidian-dev-utils textarea:active:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
130
130
|
// Annotate the CommonJS export names for ESM import in node:
|
|
131
131
|
0 && (module.exports = {
|
|
@@ -252,23 +252,31 @@ async function clickButton(notePath, buttonCaption, timeouts) {
|
|
|
252
252
|
function findButton() {
|
|
253
253
|
return buttons().find((candidate) => candidate.textContent === caption);
|
|
254
254
|
}
|
|
255
|
+
const SCROLL_BOTTOM_TOLERANCE_IN_PIXELS = 4;
|
|
256
|
+
const SCROLL_STEP_RATIO = 0.8;
|
|
257
|
+
function advanceScroll() {
|
|
258
|
+
const scroller = previewEl();
|
|
259
|
+
if (!scroller) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const isAtBottom = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - SCROLL_BOTTOM_TOLERANCE_IN_PIXELS;
|
|
263
|
+
scroller.scrollTop = isAtBottom ? 0 : scroller.scrollTop + Math.floor(scroller.clientHeight * SCROLL_STEP_RATIO);
|
|
264
|
+
}
|
|
265
|
+
let button;
|
|
255
266
|
try {
|
|
256
267
|
await waitUntil({
|
|
257
268
|
intervalInMilliseconds,
|
|
258
269
|
message: `code button "${caption}" never rendered`,
|
|
259
270
|
predicate: () => {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
return findButton() !== void 0;
|
|
271
|
+
advanceScroll();
|
|
272
|
+
button = findButton();
|
|
273
|
+
return button !== void 0;
|
|
265
274
|
},
|
|
266
275
|
timeoutInMilliseconds: settleTimeoutInMilliseconds
|
|
267
276
|
});
|
|
268
277
|
} catch {
|
|
269
278
|
return { caption, output: "", status: "timeout" };
|
|
270
279
|
}
|
|
271
|
-
const button = findButton();
|
|
272
280
|
if (!button) {
|
|
273
281
|
return { caption, output: "", status: "timeout" };
|
|
274
282
|
}
|
|
@@ -316,9 +324,24 @@ async function openNoteAndListButtonCaptions(note, settleTimeoutInMilliseconds)
|
|
|
316
324
|
function previewEl() {
|
|
317
325
|
return view()?.containerEl.querySelector(":scope .markdown-preview-view") ?? null;
|
|
318
326
|
}
|
|
327
|
+
const seenCaptions = /* @__PURE__ */ new Set();
|
|
319
328
|
function captions() {
|
|
320
|
-
const
|
|
321
|
-
|
|
329
|
+
for (const button of view()?.containerEl.querySelectorAll(":scope .block-language-code-button button.mod-cta") ?? []) {
|
|
330
|
+
if (button.textContent !== "") {
|
|
331
|
+
seenCaptions.add(button.textContent);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return [...seenCaptions];
|
|
335
|
+
}
|
|
336
|
+
const SCROLL_BOTTOM_TOLERANCE_IN_PIXELS = 4;
|
|
337
|
+
const SCROLL_STEP_RATIO = 0.8;
|
|
338
|
+
function advanceScroll() {
|
|
339
|
+
const scroller = previewEl();
|
|
340
|
+
if (!scroller) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const isAtBottom = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - SCROLL_BOTTOM_TOLERANCE_IN_PIXELS;
|
|
344
|
+
scroller.scrollTop = isAtBottom ? 0 : scroller.scrollTop + Math.floor(scroller.clientHeight * SCROLL_STEP_RATIO);
|
|
322
345
|
}
|
|
323
346
|
await app.workspace.openLinkText(notePath.replace(/\.md$/, ""), "", false);
|
|
324
347
|
await app.workspace.getLeaf(false).setViewState({ state: { file: notePath, mode: "preview" }, type: "markdown" });
|
|
@@ -327,10 +350,7 @@ async function openNoteAndListButtonCaptions(note, settleTimeoutInMilliseconds)
|
|
|
327
350
|
intervalInMilliseconds,
|
|
328
351
|
message: `"${notePath}" never mounted all ${String(expectedButtonCount)} of its buttons`,
|
|
329
352
|
predicate: () => {
|
|
330
|
-
|
|
331
|
-
if (scroller) {
|
|
332
|
-
scroller.scrollTop = scroller.scrollHeight;
|
|
333
|
-
}
|
|
353
|
+
advanceScroll();
|
|
334
354
|
return captions().length >= expectedButtonCount;
|
|
335
355
|
},
|
|
336
356
|
timeoutInMilliseconds
|
|
@@ -355,4 +375,4 @@ async function openNoteAndListButtonCaptions(note, settleTimeoutInMilliseconds)
|
|
|
355
375
|
listNotesWithButtons,
|
|
356
376
|
registerDemoVaultButtonSuite
|
|
357
377
|
});
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWJ1dHRvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHZpdGVzdCBzdWl0ZSB0aGF0IG9wZW5zIGV2ZXJ5IG5vdGUgb2YgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AsIGNsaWNrcyBlYWNoIGBjb2RlLWJ1dHRvbmBcbiAqIGluIGl0IGFnYWluc3QgYSByZWFsIE9ic2lkaWFuLCBhbmQgZmFpbHMgb24gYW55IGJ1dHRvbiB0aGF0IGVycm9ycyBvciBuZXZlciByZXBvcnRzIGEgcmVzdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCdzIGJ1dHRvbnMgYXJlIHRoZSBvbmUgcGFydCBvZiBpdCBubyBvdGhlciBnYXRlIGNhbiBjaGVjay4gYGxpbnQ6bWRgIHJlYWRzIHRoZSBtYXJrZG93bixcbiAqIHRoZSBjb3ZlcmFnZSBzdWl0ZSAoe0BsaW5rIC4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyB8IGByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVgfSkgY2hlY2tzIHRoZVxuICogYXV0aG9yaW5nIGNvbnZlbnRpb25zLCBhbmQgbmVpdGhlciBleGVjdXRlcyBhbnl0aGluZyBcdTIwMTQgYSBidXR0b24gd2hvc2UgYHJlcXVpcmUoJy9kZW1vU2V0dXAudHMnKWAgcGF0aFxuICogaXMgd3JvbmcsIG9yIHRoYXQgY2FsbHMgYW4gQVBJIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQgc2hhcGUsIGZhaWxzIGF0IGNsaWNrIHRpbWUgYW5kIG5vd2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29tcGFuaW9uIGhhbGYgXHUyMDE0IHNlZWRpbmcgdGhlIHRlbXAgdmF1bHQgd2l0aCB0aGUgZGVtby12YXVsdCB0cmVlLCBpdHMgYC5vYnNpZGlhbmAgY29uZmlnLCBhbmQgdGhlXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQgYmluYXJ5IHRoYXQgdHVybnMgYGBgYCBgYGBjb2RlLWJ1dHRvbiBgYGBgIGZlbmNlcyBpbnRvIGJ1dHRvbnMgXHUyMDE0IGlzXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgaW4gYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyBoYW5kIGl0cyByZXN1bHQgdG8gdGhlIHByb2plY3Qnc1xuICogYGdsb2JhbFNldHVwYCBhbmQgbmFtZSBDb2RlU2NyaXB0IFRvb2xraXQgaW4gYGVuYWJsZUNvbW11bml0eVBsdWdpbnNgLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuaW1wb3J0IHsgZ2V0VGVtcG9yYXJ5VmF1bHQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJztcbmltcG9ydCB7XG4gIGJlZm9yZUFsbCxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQ29kZVNjcmlwdCBUb29sa2l0J3MgbWFuaWZlc3QgaWQuIEl0IGlzIHN0aWxsIHRoZSBwbHVnaW4ncyBvcmlnaW5hbCBgZml4LXJlcXVpcmUtbW9kdWxlc2AgaWQsIHdoaWNoXG4gKiBubyBsb25nZXIgbWF0Y2hlcyBpdHMgbmFtZSBcdTIwMTQgdGhlIGlkIGlzIHB1Ymxpc2hlZCwgc28gaXQgY2Fubm90IGJlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBjbGlja2luZyBvbmUgYnV0dG9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEJ1dHRvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYnV0dG9uJ3MgY2FwdGlvbiwgYXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgcHJpbnRlZCB1bmRlciB0aGUgYnV0dG9uLCB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnV0dG9uIHJlcG9ydGVkIHN1Y2Nlc3MsIHJlcG9ydGVkIGFuIGVycm9yLCBvciBuZXZlciByZXBvcnRlZCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdlcnJvcicgfCAnb2snIHwgJ3RpbWVvdXQnIHwgJ3Vua25vd24nO1xufVxuXG4vKipcbiAqIE9uZSBkZW1vLXZhdWx0IG5vdGUgYW5kIGhvdyBtYW55IGJ1dHRvbnMgaXRzIHNvdXJjZSBkZWNsYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb3RlIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IGBjb2RlLWJ1dHRvbmAgZmVuY2VzIHRoZSBub3RlJ3Mgc291cmNlIGRlY2xhcmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG5vdGUncyBmaWxlIG5hbWUsIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZywgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGZvciBhIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDE1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOb3RlIGZpbGUgbmFtZXMgKHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QpIHRvIHNraXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ1JFQURNRS5tZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWROb3Rlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290IGhvbGRpbmcgYGRlbW8tdmF1bHQvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIHJlc29sdmVkIHJlcG8gcm9vdCwgZmFsbGluZyBiYWNrIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgZm9yIGEgbm90ZSdzIHByZXZpZXcgYW5kIGl0cyBidXR0b25zIHRvIG1vdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHdhaXRpbmcgYnVkZ2V0cyBhIHNpbmdsZSBidXR0b24gY2xpY2sgaXMgYWxsb3dlZC5cbiAqL1xuaW50ZXJmYWNlIENsaWNrQnV0dG9uVGltZW91dHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGZvciB0aGUgYnV0dG9uIGl0c2VsZiB0byBtb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NFVFRMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDIwXzAwMDtcbmNvbnN0IFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwO1xuY29uc3QgT1VUUFVUX0VYQ0VSUFRfTEVOR1RIID0gNDAwO1xuXG4vLyBgUkVBRE1FLm1kYCBpcyB0aGUgcmVwby1mYWNpbmcgcGFnZSBHaXRIdWIgcmVuZGVycywgbm90IGEgd2Fsa3Rocm91Z2guIGAwMCBTdGFydC5tZGAgaXMgZGVsaWJlcmF0ZWx5XG4vLyBOT1QgZXhjbHVkZWQ6IHNpbmNlIFQ0NzggdGhlIGxhbmRpbmcgbm90ZXMgY2FycnkgYnV0dG9ucyBvZiB0aGVpciBvd24uXG5jb25zdCBERUZBVUxUX0VYQ0xVREVEX05PVEVTID0gWydSRUFETUUubWQnXTtcblxuY29uc3QgQ09ERV9CVVRUT05fRkVOQ0VfUkVHX0VYUCA9IC9eXFxzKmBgYGNvZGUtYnV0dG9uL2dtO1xuXG4vLyBUaGUgcmVuZGVyZWQtYnV0dG9uIHNlbGVjdG9yIGlzIGA6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhYC4gSXQgaXMgd3JpdHRlblxuLy8gT3V0IGF0IGVhY2ggdXNlIHNpdGUgcmF0aGVyIHRoYW4gaGVsZCBpbiBhIGNvbnN0YW50IGhlcmU6IGV2ZXJ5IGNsb3N1cmUgYmVsb3cgaXMgc2VyaWFsaXplZCB3aXRoXG4vLyBgdG9TdHJpbmcoKWAgYW5kIGV2YWx1YXRlZCBpbnNpZGUgT2JzaWRpYW4sIHdoZXJlIG5vdGhpbmcgZnJvbSB0aGlzIG1vZHVsZSdzIHNjb3BlIGV4aXN0cy5cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGFzc2VydGlvbiBtZXNzYWdlIGZvciBhIG5vdGUncyBmYWlsaW5nIGJ1dHRvbnMuXG4gKlxuICogVGhlIGNhcHR1cmVkIG91dHB1dCBpcyBpbmNsdWRlZCBiZWNhdXNlIGEgYnV0dG9uJ3MgZmFpbHVyZSBpcyBhIHJ1bnRpbWUgb25lIFx1MjAxNCB0aGUgc3RhY2sgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBwcmludHMgdW5kZXIgaXQgaXMgdGhlIG9ubHkgZGlhZ25vc2lzIHRoZXJlIGlzLlxuICpcbiAqIEBwYXJhbSBub3RlTmFtZSAtIFRoZSBub3RlIHRoZSBidXR0b25zIGJlbG9uZyB0by5cbiAqIEBwYXJhbSBmYWlsdXJlcyAtIFRoZSBmYWlsaW5nIGJ1dHRvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZhaWx1cmVzKG5vdGVOYW1lOiBzdHJpbmcsIGZhaWx1cmVzOiByZWFkb25seSBEZW1vVmF1bHRCdXR0b25SZXN1bHRbXSk6IHN0cmluZyB7XG4gIGlmIChmYWlsdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gZmFpbHVyZXNcbiAgICAubWFwKChmYWlsdXJlKSA9PiBgICAtIFwiJHtmYWlsdXJlLmNhcHRpb259XCIgWyR7ZmFpbHVyZS5zdGF0dXN9XTogJHtmYWlsdXJlLm91dHB1dC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpfWApXG4gICAgLmpvaW4oJ1xcbicpO1xuICByZXR1cm4gYCR7U3RyaW5nKGZhaWx1cmVzLmxlbmd0aCl9IGJ1dHRvbihzKSBpbiAke25vdGVOYW1lfSBkaWQgbm90IHJ1biBjbGVhbmx5OlxcbiR7ZGV0YWlsc31gO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBkZW1vIHZhdWx0J3MgdG9wLWxldmVsIG5vdGVzIHRoYXQgZGVjbGFyZSBhdCBsZWFzdCBvbmUgYGNvZGUtYnV0dG9uYC5cbiAqXG4gKiBPbmx5IHRoZSB2YXVsdCByb290IGlzIHdhbGtlZDogYE1hdGVyaWFscy9gIGhvbGRzIGZpeHR1cmVzIHRoZSB3YWxrdGhyb3VnaHMgYWN0IG9uLCBub3Qgd2Fsa3Rocm91Z2hzLlxuICpcbiAqIEBwYXJhbSBkZW1vVmF1bHRQYXRoIC0gVGhlIGRlbW8gdmF1bHQgcm9vdC5cbiAqIEBwYXJhbSBleGNsdWRlZE5vdGVzIC0gTm90ZSBmaWxlIG5hbWVzIHRvIHNraXAuXG4gKiBAcmV0dXJucyBUaGUgbm90ZXMsIHNvcnRlZCBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE5vdGVzV2l0aEJ1dHRvbnMoZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBleGNsdWRlZE5vdGVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogRGVtb1ZhdWx0Tm90ZVtdIHtcbiAgcmV0dXJuIHJlYWRkaXJTeW5jKGRlbW9WYXVsdFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSAmJiAhZXhjbHVkZWROb3Rlcy5oYXMoZW50cnkubmFtZSkpXG4gICAgLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICBidXR0b25Db3VudDogKHJlYWRGaWxlU3luYyhqb2luKGRlbW9WYXVsdFBhdGgsIG5hbWUpLCAndXRmLTgnKS5tYXRjaChDT0RFX0JVVFRPTl9GRU5DRV9SRUdfRVhQKSA/PyBbXSkubGVuZ3RoLFxuICAgICAgbmFtZVxuICAgIH0pKVxuICAgIC5maWx0ZXIoKG5vdGUpID0+IG5vdGUuYnV0dG9uQ291bnQgPiAwKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5IGFzc2VydGlvbiBiZWxvdyBydW5zIGFnYWluc3QgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQLCBkcml2ZW4gYnkgY2xvc3VyZXMgdGhpcyBwcm9jZXNzIHNlcmlhbGl6ZXMgYW5kIGFub3RoZXIgZXhlY3V0ZXMuIFRoZSB0ZXN0YWJsZSBwYXJ0cyBhcmUgbGlzdE5vdGVzV2l0aEJ1dHRvbnMgYW5kIGZvcm1hdEZhaWx1cmVzLCB3aGljaCBoYXZlIHRoZWlyIG93biB1bml0IHRlc3RzLiAqL1xuLyoqXG4gKiBSZWdpc3RlcnMgYSB2aXRlc3Qgc3VpdGUgdGhhdCBjbGlja3MgZXZlcnkgYGNvZGUtYnV0dG9uYCBpbiB0aGUgcmVwbydzIGRlbW8gdmF1bHQuXG4gKlxuICogT25lIGBpdGAgcGVyIG5vdGUsIGFuZCBvbmUgYGV2YWxJbk9ic2lkaWFuYCBwZXIgYnV0dG9uOiBhIHNpbmdsZSBjbG9zdXJlIHJ1bnMgYXMgb25lIENEUFxuICogYFJ1bnRpbWUuZXZhbHVhdGVgLCB3aGljaCB0aGUgaGFybmVzcyBjYXBzIGF0IDMwIHMsIHNvIGEgbm90ZSB3aXRoIGEgZG96ZW4gYnV0dG9ucyB3b3VsZCBvdGhlcndpc2VcbiAqIHRpbWUgb3V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHdoaWNoIGJ1dHRvbiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGVPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGUob3B0aW9uczogUmVnaXN0ZXJEZW1vVmF1bHRCdXR0b25TdWl0ZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCByb290Rm9sZGVyID0gb3B0aW9ucy5yb290Rm9sZGVyID8/IGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gam9pbihyb290Rm9sZGVyLCAnZGVtby12YXVsdCcpO1xuICBjb25zdCBleGNsdWRlZE5vdGVzID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVkTm90ZXMgPz8gREVGQVVMVF9FWENMVURFRF9OT1RFUyk7XG4gIGNvbnN0IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IG9wdGlvbnMuc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfU0VUVExFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBvcHRpb25zLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgY29uc3Qgbm90ZXMgPSBsaXN0Tm90ZXNXaXRoQnV0dG9ucyhkZW1vVmF1bHRQYXRoLCBleGNsdWRlZE5vdGVzKTtcblxuICBkZXNjcmliZSgnZGVtby12YXVsdCBidXR0b25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpc0NvZGVTY3JpcHRUb29sa2l0TG9hZGVkID0gYXdhaXQgY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZChzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgICAgLy8gV2l0aG91dCBpdCBldmVyeSBgY29kZS1idXR0b25gIGZlbmNlIHN0YXlzIGEgcGxhaW4gY29kZSBibG9jaywgc28gZXZlcnkgbm90ZSBiZWxvdyB3b3VsZCByZXBvcnRcbiAgICAgIC8vIFplcm8gYnV0dG9ucyBhbmQgcGFzcyB2YWN1b3VzbHkuIEZhaWwgaGVyZSBpbnN0ZWFkLCBvbmNlLCB3aXRoIHRoZSByZWFzb24uXG4gICAgICBleHBlY3QoaXNDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCwgJ0NvZGVTY3JpcHQgVG9vbGtpdCBkaWQgbm90IGxvYWQsIHNvIG5vIGJ1dHRvbiBjb3VsZCByZW5kZXInKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQSB2YXVsdCB3aG9zZSBub3RlcyBkZWNsYXJlIG5vIGJ1dHRvbnMgaXMgYSByZWFsIGZhaWx1cmUgb2YgRzk4J3MgaW50ZXJhY3RpdmUgaGFsZiwgbm90IGEgcmVhc29uXG4gICAgLy8gVG8gcmVnaXN0ZXIgbm90aGluZyBhbmQgcmVwb3J0IGdyZWVuLlxuICAgIGl0KCdoYXMgYXQgbGVhc3Qgb25lIG5vdGUgd2l0aCBhIGNvZGUgYnV0dG9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vdGVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBub3RlIG9mIG5vdGVzKSB7XG4gICAgICBpdChgcnVucyBldmVyeSBjb2RlIGJ1dHRvbiBpbiAke25vdGUubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHRpb25zID0gYXdhaXQgb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgLy8gUmVhZGluZyB2aWV3IG1vdW50cyBhIG5vdGUncyBsZWFkaW5nIHNlY3Rpb25zIG1vcmUgdGhhbiBvbmNlIHdoaWxlIGl0IHNldHRsZXMsIHNvIHRoZSBET00gY2FuXG4gICAgICAgIC8vIEhvbGQgc2V2ZXJhbCBlbGVtZW50cyBwZXIgZmVuY2UuIFRoZSBjYXB0aW9ucyBhcmUgZGVkdXBsaWNhdGVkLCBhbmQgdGhlIGFzc2VydGlvbiBpcyB0aGF0IGF0XG4gICAgICAgIC8vIExlYXN0IGFzIG1hbnkgRElTVElOQ1QgYnV0dG9ucyByZW5kZXJlZCBhcyB0aGUgc291cmNlIGRlY2xhcmVzIFx1MjAxNCBhIGZlbmNlIHRoYXQgc2lsZW50bHkgc3RheWVkXG4gICAgICAgIC8vIEEgcGxhaW4gY29kZSBibG9jayBpcyB0aGUgZmFpbHVyZSB0aGlzIGNhdGNoZXMuXG4gICAgICAgIGV4cGVjdChjYXB0aW9ucy5sZW5ndGgsIGAke25vdGUubmFtZX0gZGVjbGFyZXMgJHtTdHJpbmcobm90ZS5idXR0b25Db3VudCl9IGJ1dHRvbihzKSBidXQgb25seSAke1N0cmluZyhjYXB0aW9ucy5sZW5ndGgpfSByZW5kZXJlZGApXG4gICAgICAgICAgLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwobm90ZS5idXR0b25Db3VudCk7XG5cbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IERlbW9WYXVsdEJ1dHRvblJlc3VsdFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2FwdGlvbiBvZiBjYXB0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWNrQnV0dG9uKG5vdGUubmFtZSwgY2FwdGlvbiwge1xuICAgICAgICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoZmFpbHVyZXMsIGZvcm1hdEZhaWx1cmVzKG5vdGUubmFtZSwgZmFpbHVyZXMpKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogVHVybnMgcmVzdHJpY3RlZCBtb2RlIG9mZiBhbmQgZW5hYmxlcyBDb2RlU2NyaXB0IFRvb2xraXQsIHdob3NlIGJpbmFyeSB0aGUgZ2xvYmFsIHNldHVwIHNlZWRlZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZXZhbEluT2JzaWRpYW4oe1xuICAgIGFzeW5jIGNhbGxiYWNrKHsgYXBwLCBjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkLCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBsaWI6IHsgd2FpdFVudGlsIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogdGltZW91dCB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBpZiAodHlwZW9mIGFwcC5wbHVnaW5zLmlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiAhYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFhcHAucGx1Z2lucy5nZXRQbHVnaW4oY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luKGNvZGVTY3JpcHRUb29sa2l0UGx1Z2luSWQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb2RlU2NyaXB0IFRvb2xraXQgbmV2ZXIgbG9hZGVkJyxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IGFwcC5wbHVnaW5zLmdldFBsdWdpbihjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkKSAhPT0gbnVsbCxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgIH0sXG4gICAgdmF1bHRQYXRoOiBnZXRUZW1wb3JhcnlWYXVsdCgpLnBhdGhcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogQ2xpY2tzIG9uZSBidXR0b24gYW5kIHJlYWRzIHRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHVuZGVyIGl0LlxuICpcbiAqIEEgYnV0dG9uIHRoYXQgcmUtcmVuZGVycyBpdHMgb3duIG5vdGUgKGEgc2V0dGluZ3MgY2hhbmdlLCBhIHJlbG9hZCkgZGV0YWNoZXMgdGhlIGJsb2NrIGl0IGxpdmVzIGluLFxuICogc28gdGhlIGJsb2NrIGVsZW1lbnQgaXMgY2FwdHVyZWQgQkVGT1JFIHRoZSBjbGljayBhbmQgcmVhZCBhZnRlcndhcmRzIFx1MjAxNCBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHRoZVxuICogcmVzdWx0IGludG8gdGhhdCBzYW1lIGVsZW1lbnQgZXZlbiBvbmNlIGl0IGlzIGRldGFjaGVkLlxuICpcbiAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIGhvbGRpbmcgdGhlIGJ1dHRvbi5cbiAqIEBwYXJhbSBidXR0b25DYXB0aW9uIC0gVGhlIGJ1dHRvbidzIHJlbmRlcmVkIGNhcHRpb24sIHdoaWNoIGlzIGhvdyBpdCBpcyBhZGRyZXNzZWQuXG4gKiBAcGFyYW0gdGltZW91dHMgLSBUaGUgcmVuZGVyIGFuZCByZXN1bHQgYnVkZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGVtb1ZhdWx0QnV0dG9uUmVzdWx0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xpY2tCdXR0b24oXG4gIG5vdGVQYXRoOiBzdHJpbmcsXG4gIGJ1dHRvbkNhcHRpb246IHN0cmluZyxcbiAgdGltZW91dHM6IENsaWNrQnV0dG9uVGltZW91dHNcbik6IFByb21pc2U8RGVtb1ZhdWx0QnV0dG9uUmVzdWx0PiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soe1xuICAgICAgYXBwLFxuICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgY2FwdGlvbixcbiAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICBsaWI6IHsgd2FpdFVudGlsIH0sXG4gICAgICBvYnNpZGlhbk1vZHVsZSxcbiAgICAgIG91dHB1dEV4Y2VycHRMZW5ndGgsXG4gICAgICBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9KTogUHJvbWlzZTxEZW1vVmF1bHRCdXR0b25SZXN1bHQ+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYnV0dG9ucygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi52aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KCc6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhJykgPz8gW11dO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmaW5kQnV0dG9uKCk6IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbnMoKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50ZXh0Q29udGVudCA9PT0gY2FwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCh7XG4gICAgICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICBtZXNzYWdlOiBgY29kZSBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVuZGVyZWRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBwcmV2aWV3RWwoKTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxlcikge1xuICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxlci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmluZEJ1dHRvbigpICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b24gPSBmaW5kQnV0dG9uKCk7XG4gICAgICBpZiAoIWJ1dHRvbikge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9jayA9IGJ1dHRvbi5jbG9zZXN0PEhUTUxFbGVtZW50PignLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uJykgPz8gYnV0dG9uLnBhcmVudEVsZW1lbnQ7XG4gICAgICBidXR0b24uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuXG4gICAgICBsZXQgc3RhdHVzOiBEZW1vVmF1bHRCdXR0b25SZXN1bHRbJ3N0YXR1cyddO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVwb3J0ZWQgYSByZXN1bHRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4gL0V4ZWN1dGVkICg/OnN1Y2Nlc3NmdWxseXx3aXRoIGVycm9yKS8udGVzdChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLFxuICAgICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2s/LnRleHRDb250ZW50ID8/ICcnO1xuICAgICAgICBpZiAodGV4dC5pbmNsdWRlcygnRXhlY3V0ZWQgd2l0aCBlcnJvcicpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCdFeGVjdXRlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdvayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc3RhdHVzID0gJ3RpbWVvdXQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6IChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLnNsaWNlKDAsIG91dHB1dEV4Y2VycHRMZW5ndGgpLCBzdGF0dXMgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRzLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGNhcHRpb246IGJ1dHRvbkNhcHRpb24sXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIG5vdGVQYXRoLFxuICAgICAgb3V0cHV0RXhjZXJwdExlbmd0aDogT1VUUFVUX0VYQ0VSUFRfTEVOR1RILFxuICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiB0aW1lb3V0cy5zZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgbm90ZSBpbiByZWFkaW5nIHZpZXcgYW5kIGxpc3RzIHRoZSBjYXB0aW9ucyBvZiB0aGUgYnV0dG9ucyB0aGF0IG1vdW50ZWQsIGRlZHVwbGljYXRlZCBhbmQgaW5cbiAqIGRvY3VtZW50IG9yZGVyLlxuICpcbiAqIFR3byBxdWlya3Mgb2YgcmVhZGluZyB2aWV3IHNoYXBlIHRoaXMuIEl0IHJlbmRlcnMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gdGhlXG4gKiBwcmV2aWV3IGlzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gd2hpbGUgd2FpdGluZyBvciBhIG5vdGUncyBsYXN0IGJ1dHRvbnMgbmV2ZXIgbW91bnQgYXQgYWxsLiBBbmRcbiAqIHdoaWxlIGl0IHNldHRsZXMgaXQgY2FuIGhvbGQgU0VWRVJBTCBlbGVtZW50cyBwZXIgZmVuY2UgXHUyMDE0IHRoZSBzYW1lIGJ1dHRvbiB3YXMgb2JzZXJ2ZWQgcmVuZGVyZWQgdHdpY2VcbiAqIFx1MjAxNCBzbyB0aGUgY2FwdGlvbnMgYXJlIGRlZHVwbGljYXRlZDsgY2xpY2tpbmcgYnkgY2FwdGlvbiB0aGVuIGFkZHJlc3NlcyBlYWNoIGJ1dHRvbiBvbmNlIGhvd2V2ZXIgbWFueVxuICogY29waWVzIG9mIGl0IHRoZSBET00gaXMgaG9sZGluZy5cbiAqXG4gKiBAcGFyYW0gbm90ZSAtIFRoZSBub3RlIHRvIG9wZW4uXG4gKiBAcGFyYW0gc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGJ1dHRvbnMgdG8gbW91bnQuXG4gKiBAcmV0dXJucyBUaGUgZGlzdGluY3QgYnV0dG9uIGNhcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBvcGVuTm90ZUFuZExpc3RCdXR0b25DYXB0aW9ucyhub3RlOiBEZW1vVmF1bHROb3RlLCBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIGV2YWxJbk9ic2lkaWFuKHtcbiAgICBhc3luYyBjYWxsYmFjayh7IGFwcCwgZXhwZWN0ZWRCdXR0b25Db3VudCwgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgbGliOiB7IHdhaXRVbnRpbCB9LCBub3RlUGF0aCwgb2JzaWRpYW5Nb2R1bGUsIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgZnVuY3Rpb24gdmlldygpOiBJbnN0YW5jZVR5cGU8dHlwZW9mIG9ic2lkaWFuTW9kdWxlLk1hcmtkb3duVmlldz4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXcpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcHJldmlld0VsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB2aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCc6c2NvcGUgLm1hcmtkb3duLXByZXZpZXctdmlldycpID8/IG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYXB0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gWy4uLnZpZXcoKT8uY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbDxIVE1MQnV0dG9uRWxlbWVudD4oJzpzY29wZSAuYmxvY2stbGFuZ3VhZ2UtY29kZS1idXR0b24gYnV0dG9uLm1vZC1jdGEnKSA/PyBbXV1cbiAgICAgICAgICAubWFwKChidXR0b24pID0+IGJ1dHRvbi50ZXh0Q29udGVudClcbiAgICAgICAgICAuZmlsdGVyKChjYXB0aW9uKSA9PiBjYXB0aW9uICE9PSAnJyk7XG4gICAgICAgIHJldHVybiBbLi4ubmV3IFNldChyZW5kZXJlZCldO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChub3RlUGF0aC5yZXBsYWNlKC9cXC5tZCQvLCAnJyksICcnLCBmYWxzZSk7XG4gICAgICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHN0YXRlOiB7IGZpbGU6IG5vdGVQYXRoLCBtb2RlOiAncHJldmlldycgfSwgdHlwZTogJ21hcmtkb3duJyB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7bm90ZVBhdGh9XCIgbmV2ZXIgbW91bnRlZCBhbGwgJHtTdHJpbmcoZXhwZWN0ZWRCdXR0b25Db3VudCl9IG9mIGl0cyBidXR0b25zYCxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gcHJldmlld0VsKCk7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXIpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb25zKCkubGVuZ3RoID49IGV4cGVjdGVkQnV0dG9uQ291bnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVGhlIGNhcHRpb25zIGFyZSByZXR1cm5lZCBlaXRoZXIgd2F5OyB0aGUgY2FsbGVyIGFzc2VydHMgb24gdGhlbSBhbmQgcmVwb3J0cyB0aGUgc2hvcnRmYWxsLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FwdGlvbnMoKTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBleHBlY3RlZEJ1dHRvbkNvdW50OiBub3RlLmJ1dHRvbkNvdW50LFxuICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kczogUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBub3RlUGF0aDogbm90ZS5uYW1lLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBLHFCQUdPO0FBQ1AsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQUNwQiwwQ0FBK0I7QUFDL0Isd0NBQWtDO0FBQ2xDLG9CQUtPO0FBRVAsa0JBQThCO0FBTXZCLE1BQU0sZ0NBQWdDO0FBcUY3QyxNQUFNLGdEQUFnRDtBQUN0RCxNQUFNLHlDQUF5QztBQUMvQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLHdCQUF3QjtBQUk5QixNQUFNLHlCQUF5QixDQUFDLFdBQVc7QUFFM0MsTUFBTSw0QkFBNEI7QUFnQjNCLFNBQVMsZUFBZSxVQUFrQixVQUFvRDtBQUNuRyxNQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxVQUFVLFNBQ2IsSUFBSSxDQUFDLFlBQVksUUFBUSxRQUFRLE9BQU8sTUFBTSxRQUFRLE1BQU0sTUFBTSxRQUFRLE9BQU8sV0FBVyxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNqSCxLQUFLLElBQUk7QUFDWixTQUFPLEdBQUcsT0FBTyxTQUFTLE1BQU0sQ0FBQyxpQkFBaUIsUUFBUTtBQUFBLEVBQTBCLE9BQU87QUFDN0Y7QUFXTyxTQUFTLHFCQUFxQixlQUF1QixlQUFxRDtBQUMvRyxhQUFPLDRCQUFZLGVBQWUsRUFBRSxlQUFlLEtBQUssQ0FB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
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWJ1dHRvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHZpdGVzdCBzdWl0ZSB0aGF0IG9wZW5zIGV2ZXJ5IG5vdGUgb2YgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AsIGNsaWNrcyBlYWNoIGBjb2RlLWJ1dHRvbmBcbiAqIGluIGl0IGFnYWluc3QgYSByZWFsIE9ic2lkaWFuLCBhbmQgZmFpbHMgb24gYW55IGJ1dHRvbiB0aGF0IGVycm9ycyBvciBuZXZlciByZXBvcnRzIGEgcmVzdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCdzIGJ1dHRvbnMgYXJlIHRoZSBvbmUgcGFydCBvZiBpdCBubyBvdGhlciBnYXRlIGNhbiBjaGVjay4gYGxpbnQ6bWRgIHJlYWRzIHRoZSBtYXJrZG93bixcbiAqIHRoZSBjb3ZlcmFnZSBzdWl0ZSAoe0BsaW5rIC4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyB8IGByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVgfSkgY2hlY2tzIHRoZVxuICogYXV0aG9yaW5nIGNvbnZlbnRpb25zLCBhbmQgbmVpdGhlciBleGVjdXRlcyBhbnl0aGluZyBcdTIwMTQgYSBidXR0b24gd2hvc2UgYHJlcXVpcmUoJy9kZW1vU2V0dXAudHMnKWAgcGF0aFxuICogaXMgd3JvbmcsIG9yIHRoYXQgY2FsbHMgYW4gQVBJIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQgc2hhcGUsIGZhaWxzIGF0IGNsaWNrIHRpbWUgYW5kIG5vd2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29tcGFuaW9uIGhhbGYgXHUyMDE0IHNlZWRpbmcgdGhlIHRlbXAgdmF1bHQgd2l0aCB0aGUgZGVtby12YXVsdCB0cmVlLCBpdHMgYC5vYnNpZGlhbmAgY29uZmlnLCBhbmQgdGhlXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQgYmluYXJ5IHRoYXQgdHVybnMgYGBgYCBgYGBjb2RlLWJ1dHRvbiBgYGBgIGZlbmNlcyBpbnRvIGJ1dHRvbnMgXHUyMDE0IGlzXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgaW4gYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyBoYW5kIGl0cyByZXN1bHQgdG8gdGhlIHByb2plY3Qnc1xuICogYGdsb2JhbFNldHVwYCBhbmQgbmFtZSBDb2RlU2NyaXB0IFRvb2xraXQgaW4gYGVuYWJsZUNvbW11bml0eVBsdWdpbnNgLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuaW1wb3J0IHsgZ2V0VGVtcG9yYXJ5VmF1bHQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJztcbmltcG9ydCB7XG4gIGJlZm9yZUFsbCxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQ29kZVNjcmlwdCBUb29sa2l0J3MgbWFuaWZlc3QgaWQuIEl0IGlzIHN0aWxsIHRoZSBwbHVnaW4ncyBvcmlnaW5hbCBgZml4LXJlcXVpcmUtbW9kdWxlc2AgaWQsIHdoaWNoXG4gKiBubyBsb25nZXIgbWF0Y2hlcyBpdHMgbmFtZSBcdTIwMTQgdGhlIGlkIGlzIHB1Ymxpc2hlZCwgc28gaXQgY2Fubm90IGJlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBjbGlja2luZyBvbmUgYnV0dG9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEJ1dHRvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYnV0dG9uJ3MgY2FwdGlvbiwgYXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgcHJpbnRlZCB1bmRlciB0aGUgYnV0dG9uLCB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnV0dG9uIHJlcG9ydGVkIHN1Y2Nlc3MsIHJlcG9ydGVkIGFuIGVycm9yLCBvciBuZXZlciByZXBvcnRlZCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdlcnJvcicgfCAnb2snIHwgJ3RpbWVvdXQnIHwgJ3Vua25vd24nO1xufVxuXG4vKipcbiAqIE9uZSBkZW1vLXZhdWx0IG5vdGUgYW5kIGhvdyBtYW55IGJ1dHRvbnMgaXRzIHNvdXJjZSBkZWNsYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb3RlIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IGBjb2RlLWJ1dHRvbmAgZmVuY2VzIHRoZSBub3RlJ3Mgc291cmNlIGRlY2xhcmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG5vdGUncyBmaWxlIG5hbWUsIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZywgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGZvciBhIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDE1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOb3RlIGZpbGUgbmFtZXMgKHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QpIHRvIHNraXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ1JFQURNRS5tZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWROb3Rlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290IGhvbGRpbmcgYGRlbW8tdmF1bHQvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIHJlc29sdmVkIHJlcG8gcm9vdCwgZmFsbGluZyBiYWNrIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgZm9yIGEgbm90ZSdzIHByZXZpZXcgYW5kIGl0cyBidXR0b25zIHRvIG1vdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHdhaXRpbmcgYnVkZ2V0cyBhIHNpbmdsZSBidXR0b24gY2xpY2sgaXMgYWxsb3dlZC5cbiAqL1xuaW50ZXJmYWNlIENsaWNrQnV0dG9uVGltZW91dHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGZvciB0aGUgYnV0dG9uIGl0c2VsZiB0byBtb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NFVFRMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDIwXzAwMDtcbmNvbnN0IFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwO1xuY29uc3QgT1VUUFVUX0VYQ0VSUFRfTEVOR1RIID0gNDAwO1xuXG4vLyBgUkVBRE1FLm1kYCBpcyB0aGUgcmVwby1mYWNpbmcgcGFnZSBHaXRIdWIgcmVuZGVycywgbm90IGEgd2Fsa3Rocm91Z2guIGAwMCBTdGFydC5tZGAgaXMgZGVsaWJlcmF0ZWx5XG4vLyBOT1QgZXhjbHVkZWQ6IHNpbmNlIFQ0NzggdGhlIGxhbmRpbmcgbm90ZXMgY2FycnkgYnV0dG9ucyBvZiB0aGVpciBvd24uXG5jb25zdCBERUZBVUxUX0VYQ0xVREVEX05PVEVTID0gWydSRUFETUUubWQnXTtcblxuY29uc3QgQ09ERV9CVVRUT05fRkVOQ0VfUkVHX0VYUCA9IC9eXFxzKmBgYGNvZGUtYnV0dG9uL2dtO1xuXG4vLyBUaGUgcmVuZGVyZWQtYnV0dG9uIHNlbGVjdG9yIGlzIGA6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhYC4gSXQgaXMgd3JpdHRlblxuLy8gT3V0IGF0IGVhY2ggdXNlIHNpdGUgcmF0aGVyIHRoYW4gaGVsZCBpbiBhIGNvbnN0YW50IGhlcmU6IGV2ZXJ5IGNsb3N1cmUgYmVsb3cgaXMgc2VyaWFsaXplZCB3aXRoXG4vLyBgdG9TdHJpbmcoKWAgYW5kIGV2YWx1YXRlZCBpbnNpZGUgT2JzaWRpYW4sIHdoZXJlIG5vdGhpbmcgZnJvbSB0aGlzIG1vZHVsZSdzIHNjb3BlIGV4aXN0cy5cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGFzc2VydGlvbiBtZXNzYWdlIGZvciBhIG5vdGUncyBmYWlsaW5nIGJ1dHRvbnMuXG4gKlxuICogVGhlIGNhcHR1cmVkIG91dHB1dCBpcyBpbmNsdWRlZCBiZWNhdXNlIGEgYnV0dG9uJ3MgZmFpbHVyZSBpcyBhIHJ1bnRpbWUgb25lIFx1MjAxNCB0aGUgc3RhY2sgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBwcmludHMgdW5kZXIgaXQgaXMgdGhlIG9ubHkgZGlhZ25vc2lzIHRoZXJlIGlzLlxuICpcbiAqIEBwYXJhbSBub3RlTmFtZSAtIFRoZSBub3RlIHRoZSBidXR0b25zIGJlbG9uZyB0by5cbiAqIEBwYXJhbSBmYWlsdXJlcyAtIFRoZSBmYWlsaW5nIGJ1dHRvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZhaWx1cmVzKG5vdGVOYW1lOiBzdHJpbmcsIGZhaWx1cmVzOiByZWFkb25seSBEZW1vVmF1bHRCdXR0b25SZXN1bHRbXSk6IHN0cmluZyB7XG4gIGlmIChmYWlsdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gZmFpbHVyZXNcbiAgICAubWFwKChmYWlsdXJlKSA9PiBgICAtIFwiJHtmYWlsdXJlLmNhcHRpb259XCIgWyR7ZmFpbHVyZS5zdGF0dXN9XTogJHtmYWlsdXJlLm91dHB1dC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpfWApXG4gICAgLmpvaW4oJ1xcbicpO1xuICByZXR1cm4gYCR7U3RyaW5nKGZhaWx1cmVzLmxlbmd0aCl9IGJ1dHRvbihzKSBpbiAke25vdGVOYW1lfSBkaWQgbm90IHJ1biBjbGVhbmx5OlxcbiR7ZGV0YWlsc31gO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBkZW1vIHZhdWx0J3MgdG9wLWxldmVsIG5vdGVzIHRoYXQgZGVjbGFyZSBhdCBsZWFzdCBvbmUgYGNvZGUtYnV0dG9uYC5cbiAqXG4gKiBPbmx5IHRoZSB2YXVsdCByb290IGlzIHdhbGtlZDogYE1hdGVyaWFscy9gIGhvbGRzIGZpeHR1cmVzIHRoZSB3YWxrdGhyb3VnaHMgYWN0IG9uLCBub3Qgd2Fsa3Rocm91Z2hzLlxuICpcbiAqIEBwYXJhbSBkZW1vVmF1bHRQYXRoIC0gVGhlIGRlbW8gdmF1bHQgcm9vdC5cbiAqIEBwYXJhbSBleGNsdWRlZE5vdGVzIC0gTm90ZSBmaWxlIG5hbWVzIHRvIHNraXAuXG4gKiBAcmV0dXJucyBUaGUgbm90ZXMsIHNvcnRlZCBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE5vdGVzV2l0aEJ1dHRvbnMoZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBleGNsdWRlZE5vdGVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogRGVtb1ZhdWx0Tm90ZVtdIHtcbiAgcmV0dXJuIHJlYWRkaXJTeW5jKGRlbW9WYXVsdFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSAmJiAhZXhjbHVkZWROb3Rlcy5oYXMoZW50cnkubmFtZSkpXG4gICAgLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICBidXR0b25Db3VudDogKHJlYWRGaWxlU3luYyhqb2luKGRlbW9WYXVsdFBhdGgsIG5hbWUpLCAndXRmLTgnKS5tYXRjaChDT0RFX0JVVFRPTl9GRU5DRV9SRUdfRVhQKSA/PyBbXSkubGVuZ3RoLFxuICAgICAgbmFtZVxuICAgIH0pKVxuICAgIC5maWx0ZXIoKG5vdGUpID0+IG5vdGUuYnV0dG9uQ291bnQgPiAwKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5IGFzc2VydGlvbiBiZWxvdyBydW5zIGFnYWluc3QgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQLCBkcml2ZW4gYnkgY2xvc3VyZXMgdGhpcyBwcm9jZXNzIHNlcmlhbGl6ZXMgYW5kIGFub3RoZXIgZXhlY3V0ZXMuIFRoZSB0ZXN0YWJsZSBwYXJ0cyBhcmUgbGlzdE5vdGVzV2l0aEJ1dHRvbnMgYW5kIGZvcm1hdEZhaWx1cmVzLCB3aGljaCBoYXZlIHRoZWlyIG93biB1bml0IHRlc3RzLiAqL1xuLyoqXG4gKiBSZWdpc3RlcnMgYSB2aXRlc3Qgc3VpdGUgdGhhdCBjbGlja3MgZXZlcnkgYGNvZGUtYnV0dG9uYCBpbiB0aGUgcmVwbydzIGRlbW8gdmF1bHQuXG4gKlxuICogT25lIGBpdGAgcGVyIG5vdGUsIGFuZCBvbmUgYGV2YWxJbk9ic2lkaWFuYCBwZXIgYnV0dG9uOiBhIHNpbmdsZSBjbG9zdXJlIHJ1bnMgYXMgb25lIENEUFxuICogYFJ1bnRpbWUuZXZhbHVhdGVgLCB3aGljaCB0aGUgaGFybmVzcyBjYXBzIGF0IDMwIHMsIHNvIGEgbm90ZSB3aXRoIGEgZG96ZW4gYnV0dG9ucyB3b3VsZCBvdGhlcndpc2VcbiAqIHRpbWUgb3V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHdoaWNoIGJ1dHRvbiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGVPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGUob3B0aW9uczogUmVnaXN0ZXJEZW1vVmF1bHRCdXR0b25TdWl0ZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCByb290Rm9sZGVyID0gb3B0aW9ucy5yb290Rm9sZGVyID8/IGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gam9pbihyb290Rm9sZGVyLCAnZGVtby12YXVsdCcpO1xuICBjb25zdCBleGNsdWRlZE5vdGVzID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVkTm90ZXMgPz8gREVGQVVMVF9FWENMVURFRF9OT1RFUyk7XG4gIGNvbnN0IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IG9wdGlvbnMuc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfU0VUVExFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBvcHRpb25zLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgY29uc3Qgbm90ZXMgPSBsaXN0Tm90ZXNXaXRoQnV0dG9ucyhkZW1vVmF1bHRQYXRoLCBleGNsdWRlZE5vdGVzKTtcblxuICBkZXNjcmliZSgnZGVtby12YXVsdCBidXR0b25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpc0NvZGVTY3JpcHRUb29sa2l0TG9hZGVkID0gYXdhaXQgY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZChzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgICAgLy8gV2l0aG91dCBpdCBldmVyeSBgY29kZS1idXR0b25gIGZlbmNlIHN0YXlzIGEgcGxhaW4gY29kZSBibG9jaywgc28gZXZlcnkgbm90ZSBiZWxvdyB3b3VsZCByZXBvcnRcbiAgICAgIC8vIFplcm8gYnV0dG9ucyBhbmQgcGFzcyB2YWN1b3VzbHkuIEZhaWwgaGVyZSBpbnN0ZWFkLCBvbmNlLCB3aXRoIHRoZSByZWFzb24uXG4gICAgICBleHBlY3QoaXNDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCwgJ0NvZGVTY3JpcHQgVG9vbGtpdCBkaWQgbm90IGxvYWQsIHNvIG5vIGJ1dHRvbiBjb3VsZCByZW5kZXInKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQSB2YXVsdCB3aG9zZSBub3RlcyBkZWNsYXJlIG5vIGJ1dHRvbnMgaXMgYSByZWFsIGZhaWx1cmUgb2YgRzk4J3MgaW50ZXJhY3RpdmUgaGFsZiwgbm90IGEgcmVhc29uXG4gICAgLy8gVG8gcmVnaXN0ZXIgbm90aGluZyBhbmQgcmVwb3J0IGdyZWVuLlxuICAgIGl0KCdoYXMgYXQgbGVhc3Qgb25lIG5vdGUgd2l0aCBhIGNvZGUgYnV0dG9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vdGVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBub3RlIG9mIG5vdGVzKSB7XG4gICAgICBpdChgcnVucyBldmVyeSBjb2RlIGJ1dHRvbiBpbiAke25vdGUubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHRpb25zID0gYXdhaXQgb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgLy8gUmVhZGluZyB2aWV3IG1vdW50cyBhIG5vdGUncyBsZWFkaW5nIHNlY3Rpb25zIG1vcmUgdGhhbiBvbmNlIHdoaWxlIGl0IHNldHRsZXMsIHNvIHRoZSBET00gY2FuXG4gICAgICAgIC8vIEhvbGQgc2V2ZXJhbCBlbGVtZW50cyBwZXIgZmVuY2UuIFRoZSBjYXB0aW9ucyBhcmUgZGVkdXBsaWNhdGVkLCBhbmQgdGhlIGFzc2VydGlvbiBpcyB0aGF0IGF0XG4gICAgICAgIC8vIExlYXN0IGFzIG1hbnkgRElTVElOQ1QgYnV0dG9ucyByZW5kZXJlZCBhcyB0aGUgc291cmNlIGRlY2xhcmVzIFx1MjAxNCBhIGZlbmNlIHRoYXQgc2lsZW50bHkgc3RheWVkXG4gICAgICAgIC8vIEEgcGxhaW4gY29kZSBibG9jayBpcyB0aGUgZmFpbHVyZSB0aGlzIGNhdGNoZXMuXG4gICAgICAgIGV4cGVjdChjYXB0aW9ucy5sZW5ndGgsIGAke25vdGUubmFtZX0gZGVjbGFyZXMgJHtTdHJpbmcobm90ZS5idXR0b25Db3VudCl9IGJ1dHRvbihzKSBidXQgb25seSAke1N0cmluZyhjYXB0aW9ucy5sZW5ndGgpfSByZW5kZXJlZGApXG4gICAgICAgICAgLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwobm90ZS5idXR0b25Db3VudCk7XG5cbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IERlbW9WYXVsdEJ1dHRvblJlc3VsdFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2FwdGlvbiBvZiBjYXB0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWNrQnV0dG9uKG5vdGUubmFtZSwgY2FwdGlvbiwge1xuICAgICAgICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoZmFpbHVyZXMsIGZvcm1hdEZhaWx1cmVzKG5vdGUubmFtZSwgZmFpbHVyZXMpKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogVHVybnMgcmVzdHJpY3RlZCBtb2RlIG9mZiBhbmQgZW5hYmxlcyBDb2RlU2NyaXB0IFRvb2xraXQsIHdob3NlIGJpbmFyeSB0aGUgZ2xvYmFsIHNldHVwIHNlZWRlZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZXZhbEluT2JzaWRpYW4oe1xuICAgIGFzeW5jIGNhbGxiYWNrKHsgYXBwLCBjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkLCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBsaWI6IHsgd2FpdFVudGlsIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogdGltZW91dCB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBpZiAodHlwZW9mIGFwcC5wbHVnaW5zLmlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiAhYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFhcHAucGx1Z2lucy5nZXRQbHVnaW4oY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luKGNvZGVTY3JpcHRUb29sa2l0UGx1Z2luSWQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb2RlU2NyaXB0IFRvb2xraXQgbmV2ZXIgbG9hZGVkJyxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IGFwcC5wbHVnaW5zLmdldFBsdWdpbihjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkKSAhPT0gbnVsbCxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgIH0sXG4gICAgdmF1bHRQYXRoOiBnZXRUZW1wb3JhcnlWYXVsdCgpLnBhdGhcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogQ2xpY2tzIG9uZSBidXR0b24gYW5kIHJlYWRzIHRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHVuZGVyIGl0LlxuICpcbiAqIEEgYnV0dG9uIHRoYXQgcmUtcmVuZGVycyBpdHMgb3duIG5vdGUgKGEgc2V0dGluZ3MgY2hhbmdlLCBhIHJlbG9hZCkgZGV0YWNoZXMgdGhlIGJsb2NrIGl0IGxpdmVzIGluLFxuICogc28gdGhlIGJsb2NrIGVsZW1lbnQgaXMgY2FwdHVyZWQgQkVGT1JFIHRoZSBjbGljayBhbmQgcmVhZCBhZnRlcndhcmRzIFx1MjAxNCBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHRoZVxuICogcmVzdWx0IGludG8gdGhhdCBzYW1lIGVsZW1lbnQgZXZlbiBvbmNlIGl0IGlzIGRldGFjaGVkLlxuICpcbiAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIGhvbGRpbmcgdGhlIGJ1dHRvbi5cbiAqIEBwYXJhbSBidXR0b25DYXB0aW9uIC0gVGhlIGJ1dHRvbidzIHJlbmRlcmVkIGNhcHRpb24sIHdoaWNoIGlzIGhvdyBpdCBpcyBhZGRyZXNzZWQuXG4gKiBAcGFyYW0gdGltZW91dHMgLSBUaGUgcmVuZGVyIGFuZCByZXN1bHQgYnVkZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGVtb1ZhdWx0QnV0dG9uUmVzdWx0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xpY2tCdXR0b24oXG4gIG5vdGVQYXRoOiBzdHJpbmcsXG4gIGJ1dHRvbkNhcHRpb246IHN0cmluZyxcbiAgdGltZW91dHM6IENsaWNrQnV0dG9uVGltZW91dHNcbik6IFByb21pc2U8RGVtb1ZhdWx0QnV0dG9uUmVzdWx0PiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soe1xuICAgICAgYXBwLFxuICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgY2FwdGlvbixcbiAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICBsaWI6IHsgd2FpdFVudGlsIH0sXG4gICAgICBvYnNpZGlhbk1vZHVsZSxcbiAgICAgIG91dHB1dEV4Y2VycHRMZW5ndGgsXG4gICAgICBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9KTogUHJvbWlzZTxEZW1vVmF1bHRCdXR0b25SZXN1bHQ+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYnV0dG9ucygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi52aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KCc6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhJykgPz8gW11dO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmaW5kQnV0dG9uKCk6IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbnMoKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50ZXh0Q29udGVudCA9PT0gY2FwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWRpbmcgdmlldyBtb3VudHMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gTk8gc2luZ2xlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgLy8gSG9sZHMgYSB3aG9sZSBub3RlJ3MgYnV0dG9ucy4gQWR2YW5jZSBhIHZpZXdwb3J0IGF0IGEgdGltZSBhbmQgd3JhcCBiYWNrIHRvIHRoZSB0b3AsIHJlbW91bnRpbmdcbiAgICAgIC8vIEV2ZXJ5IHNlY3Rpb24gaW4gdHVybiB1bnRpbCB0aGUgb25lIGJlaW5nIGxvb2tlZCBmb3IgYXBwZWFycy4gUGlubmluZyB0byB0aGUgQk9UVE9NIGluc3RlYWQgXHUyMDE0XG4gICAgICAvLyBXaGF0IHRoaXMgZGlkIHVudGlsIDk0LjQuMSBcdTIwMTQgb25seSBldmVyIG1vdW50cyB0aGUgbm90ZSdzIHRhaWwsIHNvIGEgYnV0dG9uIGFueXdoZXJlIGJ1dCBhdCB0aGVcbiAgICAgIC8vIEVuZCBvZiBpdHMgbm90ZSB3YXMgcmVwb3J0ZWQgYXMgbmV2ZXIgcmVuZGVyZWQgKGBzdGF0dXM6ICd0aW1lb3V0J2AsIGVtcHR5IG91dHB1dCkgaG93ZXZlclxuICAgICAgLy8gSGVhbHRoeSBpdCB3YXMuXG4gICAgICBjb25zdCBTQ1JPTExfQk9UVE9NX1RPTEVSQU5DRV9JTl9QSVhFTFMgPSA0O1xuICAgICAgY29uc3QgU0NST0xMX1NURVBfUkFUSU8gPSAwLjg7XG4gICAgICBmdW5jdGlvbiBhZHZhbmNlU2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IHByZXZpZXdFbCgpO1xuICAgICAgICBpZiAoIXNjcm9sbGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxlci5zY3JvbGxUb3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQgPj0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gU0NST0xMX0JPVFRPTV9UT0xFUkFOQ0VfSU5fUElYRUxTO1xuICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBpc0F0Qm90dG9tID8gMCA6IHNjcm9sbGVyLnNjcm9sbFRvcCArIE1hdGguZmxvb3Ioc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICogU0NST0xMX1NURVBfUkFUSU8pO1xuICAgICAgfVxuXG4gICAgICAvLyBIZWxkIGZyb20gdGhlIHByZWRpY2F0ZSByYXRoZXIgdGhhbiByZS1xdWVyaWVkIGFmdGVyIGl0OiB0aGUgd2FsayBhYm92ZSBrZWVwcyBtb3ZpbmcgdGhlXG4gICAgICAvLyBWaWV3cG9ydCwgc28gYSBidXR0b24gZm91bmQgb24gb25lIHBvbGwgY2FuIGJlIHVubW91bnRlZCBhZ2FpbiBieSB0aGUgbmV4dC5cbiAgICAgIGxldCBidXR0b246IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBjb2RlIGJ1dHRvbiBcIiR7Y2FwdGlvbn1cIiBuZXZlciByZW5kZXJlZGAsXG4gICAgICAgICAgcHJlZGljYXRlOiAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBhZHZhbmNlU2Nyb2xsKCk7XG4gICAgICAgICAgICBidXR0b24gPSBmaW5kQnV0dG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYnV0dG9uICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJ1dHRvbikge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9jayA9IGJ1dHRvbi5jbG9zZXN0PEhUTUxFbGVtZW50PignLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uJykgPz8gYnV0dG9uLnBhcmVudEVsZW1lbnQ7XG4gICAgICBidXR0b24uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuXG4gICAgICBsZXQgc3RhdHVzOiBEZW1vVmF1bHRCdXR0b25SZXN1bHRbJ3N0YXR1cyddO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVwb3J0ZWQgYSByZXN1bHRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4gL0V4ZWN1dGVkICg/OnN1Y2Nlc3NmdWxseXx3aXRoIGVycm9yKS8udGVzdChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLFxuICAgICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2s/LnRleHRDb250ZW50ID8/ICcnO1xuICAgICAgICBpZiAodGV4dC5pbmNsdWRlcygnRXhlY3V0ZWQgd2l0aCBlcnJvcicpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCdFeGVjdXRlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdvayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc3RhdHVzID0gJ3RpbWVvdXQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6IChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLnNsaWNlKDAsIG91dHB1dEV4Y2VycHRMZW5ndGgpLCBzdGF0dXMgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRzLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGNhcHRpb246IGJ1dHRvbkNhcHRpb24sXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIG5vdGVQYXRoLFxuICAgICAgb3V0cHV0RXhjZXJwdExlbmd0aDogT1VUUFVUX0VYQ0VSUFRfTEVOR1RILFxuICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiB0aW1lb3V0cy5zZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgbm90ZSBpbiByZWFkaW5nIHZpZXcgYW5kIGxpc3RzIHRoZSBjYXB0aW9ucyBvZiB0aGUgYnV0dG9ucyB0aGF0IG1vdW50ZWQsIGRlZHVwbGljYXRlZCBhbmQgaW5cbiAqIGRvY3VtZW50IG9yZGVyLlxuICpcbiAqIFR3byBxdWlya3Mgb2YgcmVhZGluZyB2aWV3IHNoYXBlIHRoaXMuIEl0IHJlbmRlcnMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gbm9cbiAqIHNpbmdsZSBzY3JvbGwgcG9zaXRpb24gaG9sZHMgYSB3aG9sZSBub3RlJ3MgYnV0dG9ucyBcdTIwMTQgdGhlIHByZXZpZXcgaXMgd2Fsa2VkIHRvcCB0byBib3R0b20gYW5kIGJhY2tcbiAqIHdoaWxlIHdhaXRpbmcsIGFuZCB0aGUgY2FwdGlvbnMgc2VlbiBhbG9uZyB0aGUgd2F5IGFyZSBBQ0NVTVVMQVRFRCByYXRoZXIgdGhhbiByZWFkIG9uY2UgYXQgdGhlIGVuZC5cbiAqIEFuZCB3aGlsZSBpdCBzZXR0bGVzIGl0IGNhbiBob2xkIFNFVkVSQUwgZWxlbWVudHMgcGVyIGZlbmNlIFx1MjAxNCB0aGUgc2FtZSBidXR0b24gd2FzIG9ic2VydmVkIHJlbmRlcmVkXG4gKiB0d2ljZSBcdTIwMTQgc28gdGhlIGNhcHRpb25zIGFyZSBkZWR1cGxpY2F0ZWQ7IGNsaWNraW5nIGJ5IGNhcHRpb24gdGhlbiBhZGRyZXNzZXMgZWFjaCBidXR0b24gb25jZSBob3dldmVyXG4gKiBtYW55IGNvcGllcyBvZiBpdCB0aGUgRE9NIGlzIGhvbGRpbmcuXG4gKlxuICogQHBhcmFtIG5vdGUgLSBUaGUgbm90ZSB0byBvcGVuLlxuICogQHBhcmFtIHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIEhvdyBsb25nIHRvIHdhaXQgZm9yIHRoZSBidXR0b25zIHRvIG1vdW50LlxuICogQHJldHVybnMgVGhlIGRpc3RpbmN0IGJ1dHRvbiBjYXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZTogRGVtb1ZhdWx0Tm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soeyBhcHAsIGV4cGVjdGVkQnV0dG9uQ291bnQsIGludGVydmFsSW5NaWxsaXNlY29uZHMsIGxpYjogeyB3YWl0VW50aWwgfSwgbm90ZVBhdGgsIG9ic2lkaWFuTW9kdWxlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgLy8gQWNjdW11bGF0ZWQgYWNyb3NzIHRoZSB3YWxrIGJlbG93LCBuZXZlciByZWFkIGZyb20gb25lIHNuYXBzaG90OiB3aXRoIHRoZSB2aWV3cG9ydCBtb3ZpbmcsIGFueVxuICAgICAgLy8gU2luZ2xlIHJlYWRpbmcgaG9sZHMgb25seSB0aGUgc2VjdGlvbnMgY3VycmVudGx5IG1vdW50ZWQuXG4gICAgICBjb25zdCBzZWVuQ2FwdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZ1bmN0aW9uIGNhcHRpb25zKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PignOnNjb3BlIC5ibG9jay1sYW5ndWFnZS1jb2RlLWJ1dHRvbiBidXR0b24ubW9kLWN0YScpID8/IFtdKSB7XG4gICAgICAgICAgaWYgKGJ1dHRvbi50ZXh0Q29udGVudCAhPT0gJycpIHtcbiAgICAgICAgICAgIHNlZW5DYXB0aW9ucy5hZGQoYnV0dG9uLnRleHRDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5zZWVuQ2FwdGlvbnNdO1xuICAgICAgfVxuXG4gICAgICAvLyBTYW1lIHdhbGsgYXMgYGNsaWNrQnV0dG9uYCwgYW5kIGZvciB0aGUgc2FtZSByZWFzb246IGEgbm90ZSB3aG9zZSBidXR0b25zIGFyZSBpbiB0aGUgTUlERExFXG4gICAgICAvLyBOZXZlciBtb3VudHMgdGhlbSBpZiB0aGUgcHJldmlldyBpcyBwaW5uZWQgdG8gdGhlIGJvdHRvbS5cbiAgICAgIGNvbnN0IFNDUk9MTF9CT1RUT01fVE9MRVJBTkNFX0lOX1BJWEVMUyA9IDQ7XG4gICAgICBjb25zdCBTQ1JPTExfU1RFUF9SQVRJTyA9IDAuODtcbiAgICAgIGZ1bmN0aW9uIGFkdmFuY2VTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0gcHJldmlld0VsKCk7XG4gICAgICAgIGlmICghc2Nyb2xsZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IHNjcm9sbGVyLnNjcm9sbFRvcCArIHNjcm9sbGVyLmNsaWVudEhlaWdodCA+PSBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBTQ1JPTExfQk9UVE9NX1RPTEVSQU5DRV9JTl9QSVhFTFM7XG4gICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvcCA9IGlzQXRCb3R0b20gPyAwIDogc2Nyb2xsZXIuc2Nyb2xsVG9wICsgTWF0aC5mbG9vcihzY3JvbGxlci5jbGllbnRIZWlnaHQgKiBTQ1JPTExfU1RFUF9SQVRJTyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KG5vdGVQYXRoLnJlcGxhY2UoL1xcLm1kJC8sICcnKSwgJycsIGZhbHNlKTtcbiAgICAgIGF3YWl0IGFwcC53b3Jrc3BhY2UuZ2V0TGVhZihmYWxzZSkuc2V0Vmlld1N0YXRlKHsgc3RhdGU6IHsgZmlsZTogbm90ZVBhdGgsIG1vZGU6ICdwcmV2aWV3JyB9LCB0eXBlOiAnbWFya2Rvd24nIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0VW50aWwoe1xuICAgICAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgbWVzc2FnZTogYFwiJHtub3RlUGF0aH1cIiBuZXZlciBtb3VudGVkIGFsbCAke1N0cmluZyhleHBlY3RlZEJ1dHRvbkNvdW50KX0gb2YgaXRzIGJ1dHRvbnNgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgYWR2YW5jZVNjcm9sbCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb25zKCkubGVuZ3RoID49IGV4cGVjdGVkQnV0dG9uQ291bnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVGhlIGNhcHRpb25zIGFyZSByZXR1cm5lZCBlaXRoZXIgd2F5OyB0aGUgY2FsbGVyIGFzc2VydHMgb24gdGhlbSBhbmQgcmVwb3J0cyB0aGUgc2hvcnRmYWxsLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FwdGlvbnMoKTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBleHBlY3RlZEJ1dHRvbkNvdW50OiBub3RlLmJ1dHRvbkNvdW50LFxuICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kczogUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBub3RlUGF0aDogbm90ZS5uYW1lLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUJBLHFCQUdPO0FBQ1AsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQUNwQiwwQ0FBK0I7QUFDL0Isd0NBQWtDO0FBQ2xDLG9CQUtPO0FBRVAsa0JBQThCO0FBTXZCLE1BQU0sZ0NBQWdDO0FBcUY3QyxNQUFNLGdEQUFnRDtBQUN0RCxNQUFNLHlDQUF5QztBQUMvQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLHdCQUF3QjtBQUk5QixNQUFNLHlCQUF5QixDQUFDLFdBQVc7QUFFM0MsTUFBTSw0QkFBNEI7QUFnQjNCLFNBQVMsZUFBZSxVQUFrQixVQUFvRDtBQUNuRyxNQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxVQUFVLFNBQ2IsSUFBSSxDQUFDLFlBQVksUUFBUSxRQUFRLE9BQU8sTUFBTSxRQUFRLE1BQU0sTUFBTSxRQUFRLE9BQU8sV0FBVyxRQUFRLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNqSCxLQUFLLElBQUk7QUFDWixTQUFPLEdBQUcsT0FBTyxTQUFTLE1BQU0sQ0FBQyxpQkFBaUIsUUFBUTtBQUFBLEVBQTBCLE9BQU87QUFDN0Y7QUFXTyxTQUFTLHFCQUFxQixlQUF1QixlQUFxRDtBQUMvRyxhQUFPLDRCQUFZLGVBQWUsRUFBRSxlQUFlLEtBQUssQ0FBQyxFQUN0RCxPQUFPLENBQUMsVUFBVSxNQUFNLE9BQU8sS0FBSyxNQUFNLEtBQUssU0FBUyxLQUFLLEtBQUssQ0FBQyxjQUFjLElBQUksTUFBTSxJQUFJLENBQUMsRUFDaEcsSUFBSSxDQUFDLFVBQVUsTUFBTSxJQUFJLEVBQ3pCLEtBQUssRUFDTCxJQUFJLENBQUMsVUFBVTtBQUFBLElBQ2Qsa0JBQWMsaUNBQWEsdUJBQUssZUFBZSxJQUFJLEdBQUcsT0FBTyxFQUFFLE1BQU0seUJBQXlCLEtBQUssQ0FBQyxHQUFHO0FBQUEsSUFDdkc7QUFBQSxFQUNGLEVBQUUsRUFDRCxPQUFPLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQztBQUMxQztBQVlPLFNBQVMsNkJBQTZCLFVBQStDLENBQUMsR0FBUztBQUNwRyxRQUFNLGFBQWEsUUFBUSxrQkFBYywyQkFBYyxLQUFLLG9CQUFBQSxRQUFRLElBQUk7QUFDeEUsUUFBTSxvQkFBZ0IsdUJBQUssWUFBWSxZQUFZO0FBQ25ELFFBQU0sZ0JBQWdCLElBQUksSUFBSSxRQUFRLGlCQUFpQixzQkFBc0I7QUFDN0UsUUFBTSw4QkFBOEIsUUFBUSwrQkFBK0I7QUFDM0UsUUFBTSxvQ0FBb0MsUUFBUSxxQ0FBcUM7QUFFdkYsUUFBTSxRQUFRLHFCQUFxQixlQUFlLGFBQWE7QUFFL0QsOEJBQVMsc0JBQXNCLE1BQU07QUFDbkMsaUNBQVUsWUFBWTtBQUNwQixZQUFNLDRCQUE0QixNQUFNLDZCQUE2QiwyQkFBMkI7QUFHaEcsZ0NBQU8sMkJBQTJCLDREQUE0RCxFQUFFLEtBQUssSUFBSTtBQUFBLElBQzNHLENBQUM7QUFJRCwwQkFBRyw0Q0FBNEMsTUFBTTtBQUNuRCxnQ0FBTyxNQUFNLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztBQUFBLElBQ3hDLENBQUM7QUFFRCxlQUFXLFFBQVEsT0FBTztBQUN4Qiw0QkFBRyw2QkFBNkIsS0FBSyxJQUFJLElBQUksWUFBWTtBQUN2RCxjQUFNLFdBQVcsTUFBTSw4QkFBOEIsTUFBTSwyQkFBMkI7QUFLdEYsa0NBQU8sU0FBUyxRQUFRLEdBQUcsS0FBSyxJQUFJLGFBQWEsT0FBTyxLQUFLLFdBQVcsQ0FBQyx1QkFBdUIsT0FBTyxTQUFTLE1BQU0sQ0FBQyxXQUFXLEVBQy9ILHVCQUF1QixLQUFLLFdBQVc7QUFFMUMsY0FBTSxXQUFvQyxDQUFDO0FBQzNDLG1CQUFXLFdBQVcsVUFBVTtBQUM5QixnQkFBTSxTQUFTLE1BQU0sWUFBWSxLQUFLLE1BQU0sU0FBUztBQUFBLFlBQ25EO0FBQUEsWUFDQTtBQUFBLFVBQ0YsQ0FBQztBQUNELGNBQUksT0FBTyxXQUFXLE1BQU07QUFDMUIscUJBQVMsS0FBSyxNQUFNO0FBQUEsVUFDdEI7QUFBQSxRQUNGO0FBRUEsa0NBQU8sVUFBVSxlQUFlLEtBQUssTUFBTSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ2xFLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFXQSxlQUFlLDZCQUE2Qix1QkFBaUQ7QUFDM0YsYUFBTyxvREFBZTtBQUFBLElBQ3BCLE1BQU0sU0FBUyxFQUFFLEtBQUssMkJBQTJCLHdCQUF3QixLQUFLLEVBQUUsVUFBVSxHQUFHLHVCQUF1QixRQUFRLEdBQXFCO0FBQy9JLFVBQUksT0FBTyxJQUFJLFFBQVEsY0FBYyxjQUFjLENBQUMsSUFBSSxRQUFRLFVBQVUsR0FBRztBQUMzRSxjQUFNLElBQUksUUFBUSxVQUFVLElBQUk7QUFBQSxNQUNsQztBQUNBLFVBQUksQ0FBQyxJQUFJLFFBQVEsVUFBVSx5QkFBeUIsR0FBRztBQUNyRCxjQUFNLElBQUksUUFBUSxhQUFhLHlCQUF5QjtBQUFBLE1BQzFEO0FBQ0EsVUFBSTtBQUNGLGNBQU0sVUFBVTtBQUFBLFVBQ2Q7QUFBQSxVQUNBLFNBQVM7QUFBQSxVQUNULFdBQVcsTUFBZSxJQUFJLFFBQVEsVUFBVSx5QkFBeUIsTUFBTTtBQUFBLFVBQy9FLHVCQUF1QjtBQUFBLFFBQ3pCLENBQUM7QUFBQSxNQUNILFFBQVE7QUFDTixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCwyQkFBMkI7QUFBQSxNQUMzQix3QkFBd0I7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxJQUNBLGVBQVcscURBQWtCLEVBQUU7QUFBQSxFQUNqQyxDQUFDO0FBQ0g7QUFpQkEsZUFBZSxZQUNiLFVBQ0EsZUFDQSxVQUNnQztBQUNoQyxhQUFPLG9EQUFlO0FBQUEsSUFDcEIsTUFBTSxTQUFTO0FBQUEsTUFDYjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsS0FBSyxFQUFFLFVBQVU7QUFBQSxNQUNqQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFtQztBQUNqQyxlQUFTLE9BQWdFO0FBQ3ZFLGVBQU8sSUFBSSxVQUFVLG9CQUFvQixlQUFlLFlBQVk7QUFBQSxNQUN0RTtBQUNBLGVBQVMsWUFBZ0M7QUFDdkMsZUFBTyxLQUFLLEdBQUcsWUFBWSxjQUEyQiwrQkFBK0IsS0FBSztBQUFBLE1BQzVGO0FBQ0EsZUFBUyxVQUErQjtBQUN0QyxlQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsWUFBWSxpQkFBb0MsbURBQW1ELEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDL0g7QUFFQSxlQUFTLGFBQTRDO0FBQ25ELGVBQU8sUUFBUSxFQUFFLEtBQUssQ0FBQyxjQUFjLFVBQVUsZ0JBQWdCLE9BQU87QUFBQSxNQUN4RTtBQVFBLFlBQU0sb0NBQW9DO0FBQzFDLFlBQU0sb0JBQW9CO0FBQzFCLGVBQVMsZ0JBQXNCO0FBQzdCLGNBQU0sV0FBVyxVQUFVO0FBQzNCLFlBQUksQ0FBQyxVQUFVO0FBQ2I7QUFBQSxRQUNGO0FBQ0EsY0FBTSxhQUFhLFNBQVMsWUFBWSxTQUFTLGdCQUFnQixTQUFTLGVBQWU7QUFDekYsaUJBQVMsWUFBWSxhQUFhLElBQUksU0FBUyxZQUFZLEtBQUssTUFBTSxTQUFTLGVBQWUsaUJBQWlCO0FBQUEsTUFDakg7QUFJQSxVQUFJO0FBQ0osVUFBSTtBQUNGLGNBQU0sVUFBVTtBQUFBLFVBQ2Q7QUFBQSxVQUNBLFNBQVMsZ0JBQWdCLE9BQU87QUFBQSxVQUNoQyxXQUFXLE1BQWU7QUFDeEIsMEJBQWM7QUFDZCxxQkFBUyxXQUFXO0FBQ3BCLG1CQUFPLFdBQVc7QUFBQSxVQUNwQjtBQUFBLFVBQ0EsdUJBQXVCO0FBQUEsUUFDekIsQ0FBQztBQUFBLE1BQ0gsUUFBUTtBQUNOLGVBQU8sRUFBRSxTQUFTLFFBQVEsSUFBSSxRQUFRLFVBQVU7QUFBQSxNQUNsRDtBQUVBLFVBQUksQ0FBQyxRQUFRO0FBQ1gsZUFBTyxFQUFFLFNBQVMsUUFBUSxJQUFJLFFBQVEsVUFBVTtBQUFBLE1BQ2xEO0FBRUEsWUFBTSxRQUFRLE9BQU8sUUFBcUIsNkJBQTZCLEtBQUssT0FBTztBQUNuRixhQUFPLGVBQWU7QUFDdEIsYUFBTyxNQUFNO0FBRWIsVUFBSTtBQUNKLFVBQUk7QUFDRixjQUFNLFVBQVU7QUFBQSxVQUNkO0FBQUEsVUFDQSxTQUFTLFdBQVcsT0FBTztBQUFBLFVBQzNCLFdBQVcsTUFBZSx1Q0FBdUMsS0FBSyxPQUFPLGVBQWUsRUFBRTtBQUFBLFVBQzlGLHVCQUF1QjtBQUFBLFFBQ3pCLENBQUM7QUFDRCxjQUFNLE9BQU8sT0FBTyxlQUFlO0FBQ25DLFlBQUksS0FBSyxTQUFTLHFCQUFxQixHQUFHO0FBQ3hDLG1CQUFTO0FBQUEsUUFDWCxXQUFXLEtBQUssU0FBUyx1QkFBdUIsR0FBRztBQUNqRCxtQkFBUztBQUFBLFFBQ1gsT0FBTztBQUNMLG1CQUFTO0FBQUEsUUFDWDtBQUFBLE1BQ0YsUUFBUTtBQUNOLGlCQUFTO0FBQUEsTUFDWDtBQUVBLGFBQU8sRUFBRSxTQUFTLFNBQVMsT0FBTyxlQUFlLElBQUksTUFBTSxHQUFHLG1CQUFtQixHQUFHLE9BQU87QUFBQSxJQUM3RjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsbUNBQW1DLFNBQVM7QUFBQSxNQUM1QyxTQUFTO0FBQUEsTUFDVCx3QkFBd0I7QUFBQSxNQUN4QjtBQUFBLE1BQ0EscUJBQXFCO0FBQUEsTUFDckIsNkJBQTZCLFNBQVM7QUFBQSxJQUN4QztBQUFBLElBQ0EsZUFBVyxxREFBa0IsRUFBRTtBQUFBLEVBQ2pDLENBQUM7QUFDSDtBQWlCQSxlQUFlLDhCQUE4QixNQUFxQiw2QkFBd0Q7QUFDeEgsYUFBTyxvREFBZTtBQUFBLElBQ3BCLE1BQU0sU0FBUyxFQUFFLEtBQUsscUJBQXFCLHdCQUF3QixLQUFLLEVBQUUsVUFBVSxHQUFHLFVBQVUsZ0JBQWdCLHNCQUFzQixHQUFzQjtBQUMzSixlQUFTLE9BQWdFO0FBQ3ZFLGVBQU8sSUFBSSxVQUFVLG9CQUFvQixlQUFlLFlBQVk7QUFBQSxNQUN0RTtBQUNBLGVBQVMsWUFBZ0M7QUFDdkMsZUFBTyxLQUFLLEdBQUcsWUFBWSxjQUEyQiwrQkFBK0IsS0FBSztBQUFBLE1BQzVGO0FBR0EsWUFBTSxlQUFlLG9CQUFJLElBQVk7QUFDckMsZUFBUyxXQUFxQjtBQUM1QixtQkFBVyxVQUFVLEtBQUssR0FBRyxZQUFZLGlCQUFvQyxtREFBbUQsS0FBSyxDQUFDLEdBQUc7QUFDdkksY0FBSSxPQUFPLGdCQUFnQixJQUFJO0FBQzdCLHlCQUFhLElBQUksT0FBTyxXQUFXO0FBQUEsVUFDckM7QUFBQSxRQUNGO0FBQ0EsZUFBTyxDQUFDLEdBQUcsWUFBWTtBQUFBLE1BQ3pCO0FBSUEsWUFBTSxvQ0FBb0M7QUFDMUMsWUFBTSxvQkFBb0I7QUFDMUIsZUFBUyxnQkFBc0I7QUFDN0IsY0FBTSxXQUFXLFVBQVU7QUFDM0IsWUFBSSxDQUFDLFVBQVU7QUFDYjtBQUFBLFFBQ0Y7QUFDQSxjQUFNLGFBQWEsU0FBUyxZQUFZLFNBQVMsZ0JBQWdCLFNBQVMsZUFBZTtBQUN6RixpQkFBUyxZQUFZLGFBQWEsSUFBSSxTQUFTLFlBQVksS0FBSyxNQUFNLFNBQVMsZUFBZSxpQkFBaUI7QUFBQSxNQUNqSDtBQUVBLFlBQU0sSUFBSSxVQUFVLGFBQWEsU0FBUyxRQUFRLFNBQVMsRUFBRSxHQUFHLElBQUksS0FBSztBQUN6RSxZQUFNLElBQUksVUFBVSxRQUFRLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxNQUFNLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUVoSCxVQUFJO0FBQ0YsY0FBTSxVQUFVO0FBQUEsVUFDZDtBQUFBLFVBQ0EsU0FBUyxJQUFJLFFBQVEsdUJBQXVCLE9BQU8sbUJBQW1CLENBQUM7QUFBQSxVQUN2RSxXQUFXLE1BQWU7QUFDeEIsMEJBQWM7QUFDZCxtQkFBTyxTQUFTLEVBQUUsVUFBVTtBQUFBLFVBQzlCO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BRVI7QUFFQSxhQUFPLFNBQVM7QUFBQSxJQUNsQjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wscUJBQXFCLEtBQUs7QUFBQSxNQUMxQix3QkFBd0I7QUFBQSxNQUN4QixVQUFVLEtBQUs7QUFBQSxNQUNmLHVCQUF1QjtBQUFBLElBQ3pCO0FBQUEsSUFDQSxlQUFXLHFEQUFrQixFQUFFO0FBQUEsRUFDakMsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
|
|
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
const LIBRARY_VERSION = "94.4.
|
|
24
|
+
const LIBRARY_VERSION = "94.4.1";
|
|
25
25
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus:invalid:not(.untouched),\n.obsidian-dev-utils textarea:active:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
26
26
|
export {
|
|
27
27
|
LIBRARY_STYLES,
|
|
@@ -144,23 +144,31 @@ async function clickButton(notePath, buttonCaption, timeouts) {
|
|
|
144
144
|
function findButton() {
|
|
145
145
|
return buttons().find((candidate) => candidate.textContent === caption);
|
|
146
146
|
}
|
|
147
|
+
const SCROLL_BOTTOM_TOLERANCE_IN_PIXELS = 4;
|
|
148
|
+
const SCROLL_STEP_RATIO = 0.8;
|
|
149
|
+
function advanceScroll() {
|
|
150
|
+
const scroller = previewEl();
|
|
151
|
+
if (!scroller) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const isAtBottom = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - SCROLL_BOTTOM_TOLERANCE_IN_PIXELS;
|
|
155
|
+
scroller.scrollTop = isAtBottom ? 0 : scroller.scrollTop + Math.floor(scroller.clientHeight * SCROLL_STEP_RATIO);
|
|
156
|
+
}
|
|
157
|
+
let button;
|
|
147
158
|
try {
|
|
148
159
|
await waitUntil({
|
|
149
160
|
intervalInMilliseconds,
|
|
150
161
|
message: `code button "${caption}" never rendered`,
|
|
151
162
|
predicate: () => {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
return findButton() !== void 0;
|
|
163
|
+
advanceScroll();
|
|
164
|
+
button = findButton();
|
|
165
|
+
return button !== void 0;
|
|
157
166
|
},
|
|
158
167
|
timeoutInMilliseconds: settleTimeoutInMilliseconds
|
|
159
168
|
});
|
|
160
169
|
} catch {
|
|
161
170
|
return { caption, output: "", status: "timeout" };
|
|
162
171
|
}
|
|
163
|
-
const button = findButton();
|
|
164
172
|
if (!button) {
|
|
165
173
|
return { caption, output: "", status: "timeout" };
|
|
166
174
|
}
|
|
@@ -208,9 +216,24 @@ async function openNoteAndListButtonCaptions(note, settleTimeoutInMilliseconds)
|
|
|
208
216
|
function previewEl() {
|
|
209
217
|
return view()?.containerEl.querySelector(":scope .markdown-preview-view") ?? null;
|
|
210
218
|
}
|
|
219
|
+
const seenCaptions = /* @__PURE__ */ new Set();
|
|
211
220
|
function captions() {
|
|
212
|
-
const
|
|
213
|
-
|
|
221
|
+
for (const button of view()?.containerEl.querySelectorAll(":scope .block-language-code-button button.mod-cta") ?? []) {
|
|
222
|
+
if (button.textContent !== "") {
|
|
223
|
+
seenCaptions.add(button.textContent);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return [...seenCaptions];
|
|
227
|
+
}
|
|
228
|
+
const SCROLL_BOTTOM_TOLERANCE_IN_PIXELS = 4;
|
|
229
|
+
const SCROLL_STEP_RATIO = 0.8;
|
|
230
|
+
function advanceScroll() {
|
|
231
|
+
const scroller = previewEl();
|
|
232
|
+
if (!scroller) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const isAtBottom = scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - SCROLL_BOTTOM_TOLERANCE_IN_PIXELS;
|
|
236
|
+
scroller.scrollTop = isAtBottom ? 0 : scroller.scrollTop + Math.floor(scroller.clientHeight * SCROLL_STEP_RATIO);
|
|
214
237
|
}
|
|
215
238
|
await app.workspace.openLinkText(notePath.replace(/\.md$/, ""), "", false);
|
|
216
239
|
await app.workspace.getLeaf(false).setViewState({ state: { file: notePath, mode: "preview" }, type: "markdown" });
|
|
@@ -219,10 +242,7 @@ async function openNoteAndListButtonCaptions(note, settleTimeoutInMilliseconds)
|
|
|
219
242
|
intervalInMilliseconds,
|
|
220
243
|
message: `"${notePath}" never mounted all ${String(expectedButtonCount)} of its buttons`,
|
|
221
244
|
predicate: () => {
|
|
222
|
-
|
|
223
|
-
if (scroller) {
|
|
224
|
-
scroller.scrollTop = scroller.scrollHeight;
|
|
225
|
-
}
|
|
245
|
+
advanceScroll();
|
|
226
246
|
return captions().length >= expectedButtonCount;
|
|
227
247
|
},
|
|
228
248
|
timeoutInMilliseconds
|
|
@@ -246,4 +266,4 @@ export {
|
|
|
246
266
|
listNotesWithButtons,
|
|
247
267
|
registerDemoVaultButtonSuite
|
|
248
268
|
};
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWJ1dHRvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHZpdGVzdCBzdWl0ZSB0aGF0IG9wZW5zIGV2ZXJ5IG5vdGUgb2YgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AsIGNsaWNrcyBlYWNoIGBjb2RlLWJ1dHRvbmBcbiAqIGluIGl0IGFnYWluc3QgYSByZWFsIE9ic2lkaWFuLCBhbmQgZmFpbHMgb24gYW55IGJ1dHRvbiB0aGF0IGVycm9ycyBvciBuZXZlciByZXBvcnRzIGEgcmVzdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCdzIGJ1dHRvbnMgYXJlIHRoZSBvbmUgcGFydCBvZiBpdCBubyBvdGhlciBnYXRlIGNhbiBjaGVjay4gYGxpbnQ6bWRgIHJlYWRzIHRoZSBtYXJrZG93bixcbiAqIHRoZSBjb3ZlcmFnZSBzdWl0ZSAoe0BsaW5rIC4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyB8IGByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVgfSkgY2hlY2tzIHRoZVxuICogYXV0aG9yaW5nIGNvbnZlbnRpb25zLCBhbmQgbmVpdGhlciBleGVjdXRlcyBhbnl0aGluZyBcdTIwMTQgYSBidXR0b24gd2hvc2UgYHJlcXVpcmUoJy9kZW1vU2V0dXAudHMnKWAgcGF0aFxuICogaXMgd3JvbmcsIG9yIHRoYXQgY2FsbHMgYW4gQVBJIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQgc2hhcGUsIGZhaWxzIGF0IGNsaWNrIHRpbWUgYW5kIG5vd2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29tcGFuaW9uIGhhbGYgXHUyMDE0IHNlZWRpbmcgdGhlIHRlbXAgdmF1bHQgd2l0aCB0aGUgZGVtby12YXVsdCB0cmVlLCBpdHMgYC5vYnNpZGlhbmAgY29uZmlnLCBhbmQgdGhlXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQgYmluYXJ5IHRoYXQgdHVybnMgYGBgYCBgYGBjb2RlLWJ1dHRvbiBgYGBgIGZlbmNlcyBpbnRvIGJ1dHRvbnMgXHUyMDE0IGlzXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgaW4gYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyBoYW5kIGl0cyByZXN1bHQgdG8gdGhlIHByb2plY3Qnc1xuICogYGdsb2JhbFNldHVwYCBhbmQgbmFtZSBDb2RlU2NyaXB0IFRvb2xraXQgaW4gYGVuYWJsZUNvbW11bml0eVBsdWdpbnNgLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuaW1wb3J0IHsgZ2V0VGVtcG9yYXJ5VmF1bHQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJztcbmltcG9ydCB7XG4gIGJlZm9yZUFsbCxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQ29kZVNjcmlwdCBUb29sa2l0J3MgbWFuaWZlc3QgaWQuIEl0IGlzIHN0aWxsIHRoZSBwbHVnaW4ncyBvcmlnaW5hbCBgZml4LXJlcXVpcmUtbW9kdWxlc2AgaWQsIHdoaWNoXG4gKiBubyBsb25nZXIgbWF0Y2hlcyBpdHMgbmFtZSBcdTIwMTQgdGhlIGlkIGlzIHB1Ymxpc2hlZCwgc28gaXQgY2Fubm90IGJlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBjbGlja2luZyBvbmUgYnV0dG9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEJ1dHRvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYnV0dG9uJ3MgY2FwdGlvbiwgYXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgcHJpbnRlZCB1bmRlciB0aGUgYnV0dG9uLCB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnV0dG9uIHJlcG9ydGVkIHN1Y2Nlc3MsIHJlcG9ydGVkIGFuIGVycm9yLCBvciBuZXZlciByZXBvcnRlZCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdlcnJvcicgfCAnb2snIHwgJ3RpbWVvdXQnIHwgJ3Vua25vd24nO1xufVxuXG4vKipcbiAqIE9uZSBkZW1vLXZhdWx0IG5vdGUgYW5kIGhvdyBtYW55IGJ1dHRvbnMgaXRzIHNvdXJjZSBkZWNsYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb3RlIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IGBjb2RlLWJ1dHRvbmAgZmVuY2VzIHRoZSBub3RlJ3Mgc291cmNlIGRlY2xhcmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG5vdGUncyBmaWxlIG5hbWUsIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZywgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGZvciBhIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDE1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOb3RlIGZpbGUgbmFtZXMgKHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QpIHRvIHNraXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ1JFQURNRS5tZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWROb3Rlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290IGhvbGRpbmcgYGRlbW8tdmF1bHQvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIHJlc29sdmVkIHJlcG8gcm9vdCwgZmFsbGluZyBiYWNrIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgZm9yIGEgbm90ZSdzIHByZXZpZXcgYW5kIGl0cyBidXR0b25zIHRvIG1vdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHdhaXRpbmcgYnVkZ2V0cyBhIHNpbmdsZSBidXR0b24gY2xpY2sgaXMgYWxsb3dlZC5cbiAqL1xuaW50ZXJmYWNlIENsaWNrQnV0dG9uVGltZW91dHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGZvciB0aGUgYnV0dG9uIGl0c2VsZiB0byBtb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NFVFRMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDIwXzAwMDtcbmNvbnN0IFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwO1xuY29uc3QgT1VUUFVUX0VYQ0VSUFRfTEVOR1RIID0gNDAwO1xuXG4vLyBgUkVBRE1FLm1kYCBpcyB0aGUgcmVwby1mYWNpbmcgcGFnZSBHaXRIdWIgcmVuZGVycywgbm90IGEgd2Fsa3Rocm91Z2guIGAwMCBTdGFydC5tZGAgaXMgZGVsaWJlcmF0ZWx5XG4vLyBOT1QgZXhjbHVkZWQ6IHNpbmNlIFQ0NzggdGhlIGxhbmRpbmcgbm90ZXMgY2FycnkgYnV0dG9ucyBvZiB0aGVpciBvd24uXG5jb25zdCBERUZBVUxUX0VYQ0xVREVEX05PVEVTID0gWydSRUFETUUubWQnXTtcblxuY29uc3QgQ09ERV9CVVRUT05fRkVOQ0VfUkVHX0VYUCA9IC9eXFxzKmBgYGNvZGUtYnV0dG9uL2dtO1xuXG4vLyBUaGUgcmVuZGVyZWQtYnV0dG9uIHNlbGVjdG9yIGlzIGA6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhYC4gSXQgaXMgd3JpdHRlblxuLy8gT3V0IGF0IGVhY2ggdXNlIHNpdGUgcmF0aGVyIHRoYW4gaGVsZCBpbiBhIGNvbnN0YW50IGhlcmU6IGV2ZXJ5IGNsb3N1cmUgYmVsb3cgaXMgc2VyaWFsaXplZCB3aXRoXG4vLyBgdG9TdHJpbmcoKWAgYW5kIGV2YWx1YXRlZCBpbnNpZGUgT2JzaWRpYW4sIHdoZXJlIG5vdGhpbmcgZnJvbSB0aGlzIG1vZHVsZSdzIHNjb3BlIGV4aXN0cy5cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGFzc2VydGlvbiBtZXNzYWdlIGZvciBhIG5vdGUncyBmYWlsaW5nIGJ1dHRvbnMuXG4gKlxuICogVGhlIGNhcHR1cmVkIG91dHB1dCBpcyBpbmNsdWRlZCBiZWNhdXNlIGEgYnV0dG9uJ3MgZmFpbHVyZSBpcyBhIHJ1bnRpbWUgb25lIFx1MjAxNCB0aGUgc3RhY2sgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBwcmludHMgdW5kZXIgaXQgaXMgdGhlIG9ubHkgZGlhZ25vc2lzIHRoZXJlIGlzLlxuICpcbiAqIEBwYXJhbSBub3RlTmFtZSAtIFRoZSBub3RlIHRoZSBidXR0b25zIGJlbG9uZyB0by5cbiAqIEBwYXJhbSBmYWlsdXJlcyAtIFRoZSBmYWlsaW5nIGJ1dHRvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZhaWx1cmVzKG5vdGVOYW1lOiBzdHJpbmcsIGZhaWx1cmVzOiByZWFkb25seSBEZW1vVmF1bHRCdXR0b25SZXN1bHRbXSk6IHN0cmluZyB7XG4gIGlmIChmYWlsdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gZmFpbHVyZXNcbiAgICAubWFwKChmYWlsdXJlKSA9PiBgICAtIFwiJHtmYWlsdXJlLmNhcHRpb259XCIgWyR7ZmFpbHVyZS5zdGF0dXN9XTogJHtmYWlsdXJlLm91dHB1dC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpfWApXG4gICAgLmpvaW4oJ1xcbicpO1xuICByZXR1cm4gYCR7U3RyaW5nKGZhaWx1cmVzLmxlbmd0aCl9IGJ1dHRvbihzKSBpbiAke25vdGVOYW1lfSBkaWQgbm90IHJ1biBjbGVhbmx5OlxcbiR7ZGV0YWlsc31gO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBkZW1vIHZhdWx0J3MgdG9wLWxldmVsIG5vdGVzIHRoYXQgZGVjbGFyZSBhdCBsZWFzdCBvbmUgYGNvZGUtYnV0dG9uYC5cbiAqXG4gKiBPbmx5IHRoZSB2YXVsdCByb290IGlzIHdhbGtlZDogYE1hdGVyaWFscy9gIGhvbGRzIGZpeHR1cmVzIHRoZSB3YWxrdGhyb3VnaHMgYWN0IG9uLCBub3Qgd2Fsa3Rocm91Z2hzLlxuICpcbiAqIEBwYXJhbSBkZW1vVmF1bHRQYXRoIC0gVGhlIGRlbW8gdmF1bHQgcm9vdC5cbiAqIEBwYXJhbSBleGNsdWRlZE5vdGVzIC0gTm90ZSBmaWxlIG5hbWVzIHRvIHNraXAuXG4gKiBAcmV0dXJucyBUaGUgbm90ZXMsIHNvcnRlZCBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE5vdGVzV2l0aEJ1dHRvbnMoZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBleGNsdWRlZE5vdGVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogRGVtb1ZhdWx0Tm90ZVtdIHtcbiAgcmV0dXJuIHJlYWRkaXJTeW5jKGRlbW9WYXVsdFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSAmJiAhZXhjbHVkZWROb3Rlcy5oYXMoZW50cnkubmFtZSkpXG4gICAgLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICBidXR0b25Db3VudDogKHJlYWRGaWxlU3luYyhqb2luKGRlbW9WYXVsdFBhdGgsIG5hbWUpLCAndXRmLTgnKS5tYXRjaChDT0RFX0JVVFRPTl9GRU5DRV9SRUdfRVhQKSA/PyBbXSkubGVuZ3RoLFxuICAgICAgbmFtZVxuICAgIH0pKVxuICAgIC5maWx0ZXIoKG5vdGUpID0+IG5vdGUuYnV0dG9uQ291bnQgPiAwKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5IGFzc2VydGlvbiBiZWxvdyBydW5zIGFnYWluc3QgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQLCBkcml2ZW4gYnkgY2xvc3VyZXMgdGhpcyBwcm9jZXNzIHNlcmlhbGl6ZXMgYW5kIGFub3RoZXIgZXhlY3V0ZXMuIFRoZSB0ZXN0YWJsZSBwYXJ0cyBhcmUgbGlzdE5vdGVzV2l0aEJ1dHRvbnMgYW5kIGZvcm1hdEZhaWx1cmVzLCB3aGljaCBoYXZlIHRoZWlyIG93biB1bml0IHRlc3RzLiAqL1xuLyoqXG4gKiBSZWdpc3RlcnMgYSB2aXRlc3Qgc3VpdGUgdGhhdCBjbGlja3MgZXZlcnkgYGNvZGUtYnV0dG9uYCBpbiB0aGUgcmVwbydzIGRlbW8gdmF1bHQuXG4gKlxuICogT25lIGBpdGAgcGVyIG5vdGUsIGFuZCBvbmUgYGV2YWxJbk9ic2lkaWFuYCBwZXIgYnV0dG9uOiBhIHNpbmdsZSBjbG9zdXJlIHJ1bnMgYXMgb25lIENEUFxuICogYFJ1bnRpbWUuZXZhbHVhdGVgLCB3aGljaCB0aGUgaGFybmVzcyBjYXBzIGF0IDMwIHMsIHNvIGEgbm90ZSB3aXRoIGEgZG96ZW4gYnV0dG9ucyB3b3VsZCBvdGhlcndpc2VcbiAqIHRpbWUgb3V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHdoaWNoIGJ1dHRvbiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGVPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGUob3B0aW9uczogUmVnaXN0ZXJEZW1vVmF1bHRCdXR0b25TdWl0ZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCByb290Rm9sZGVyID0gb3B0aW9ucy5yb290Rm9sZGVyID8/IGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gam9pbihyb290Rm9sZGVyLCAnZGVtby12YXVsdCcpO1xuICBjb25zdCBleGNsdWRlZE5vdGVzID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVkTm90ZXMgPz8gREVGQVVMVF9FWENMVURFRF9OT1RFUyk7XG4gIGNvbnN0IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IG9wdGlvbnMuc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfU0VUVExFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBvcHRpb25zLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgY29uc3Qgbm90ZXMgPSBsaXN0Tm90ZXNXaXRoQnV0dG9ucyhkZW1vVmF1bHRQYXRoLCBleGNsdWRlZE5vdGVzKTtcblxuICBkZXNjcmliZSgnZGVtby12YXVsdCBidXR0b25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpc0NvZGVTY3JpcHRUb29sa2l0TG9hZGVkID0gYXdhaXQgY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZChzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgICAgLy8gV2l0aG91dCBpdCBldmVyeSBgY29kZS1idXR0b25gIGZlbmNlIHN0YXlzIGEgcGxhaW4gY29kZSBibG9jaywgc28gZXZlcnkgbm90ZSBiZWxvdyB3b3VsZCByZXBvcnRcbiAgICAgIC8vIFplcm8gYnV0dG9ucyBhbmQgcGFzcyB2YWN1b3VzbHkuIEZhaWwgaGVyZSBpbnN0ZWFkLCBvbmNlLCB3aXRoIHRoZSByZWFzb24uXG4gICAgICBleHBlY3QoaXNDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCwgJ0NvZGVTY3JpcHQgVG9vbGtpdCBkaWQgbm90IGxvYWQsIHNvIG5vIGJ1dHRvbiBjb3VsZCByZW5kZXInKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQSB2YXVsdCB3aG9zZSBub3RlcyBkZWNsYXJlIG5vIGJ1dHRvbnMgaXMgYSByZWFsIGZhaWx1cmUgb2YgRzk4J3MgaW50ZXJhY3RpdmUgaGFsZiwgbm90IGEgcmVhc29uXG4gICAgLy8gVG8gcmVnaXN0ZXIgbm90aGluZyBhbmQgcmVwb3J0IGdyZWVuLlxuICAgIGl0KCdoYXMgYXQgbGVhc3Qgb25lIG5vdGUgd2l0aCBhIGNvZGUgYnV0dG9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vdGVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBub3RlIG9mIG5vdGVzKSB7XG4gICAgICBpdChgcnVucyBldmVyeSBjb2RlIGJ1dHRvbiBpbiAke25vdGUubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHRpb25zID0gYXdhaXQgb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgLy8gUmVhZGluZyB2aWV3IG1vdW50cyBhIG5vdGUncyBsZWFkaW5nIHNlY3Rpb25zIG1vcmUgdGhhbiBvbmNlIHdoaWxlIGl0IHNldHRsZXMsIHNvIHRoZSBET00gY2FuXG4gICAgICAgIC8vIEhvbGQgc2V2ZXJhbCBlbGVtZW50cyBwZXIgZmVuY2UuIFRoZSBjYXB0aW9ucyBhcmUgZGVkdXBsaWNhdGVkLCBhbmQgdGhlIGFzc2VydGlvbiBpcyB0aGF0IGF0XG4gICAgICAgIC8vIExlYXN0IGFzIG1hbnkgRElTVElOQ1QgYnV0dG9ucyByZW5kZXJlZCBhcyB0aGUgc291cmNlIGRlY2xhcmVzIFx1MjAxNCBhIGZlbmNlIHRoYXQgc2lsZW50bHkgc3RheWVkXG4gICAgICAgIC8vIEEgcGxhaW4gY29kZSBibG9jayBpcyB0aGUgZmFpbHVyZSB0aGlzIGNhdGNoZXMuXG4gICAgICAgIGV4cGVjdChjYXB0aW9ucy5sZW5ndGgsIGAke25vdGUubmFtZX0gZGVjbGFyZXMgJHtTdHJpbmcobm90ZS5idXR0b25Db3VudCl9IGJ1dHRvbihzKSBidXQgb25seSAke1N0cmluZyhjYXB0aW9ucy5sZW5ndGgpfSByZW5kZXJlZGApXG4gICAgICAgICAgLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwobm90ZS5idXR0b25Db3VudCk7XG5cbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IERlbW9WYXVsdEJ1dHRvblJlc3VsdFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2FwdGlvbiBvZiBjYXB0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWNrQnV0dG9uKG5vdGUubmFtZSwgY2FwdGlvbiwge1xuICAgICAgICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoZmFpbHVyZXMsIGZvcm1hdEZhaWx1cmVzKG5vdGUubmFtZSwgZmFpbHVyZXMpKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogVHVybnMgcmVzdHJpY3RlZCBtb2RlIG9mZiBhbmQgZW5hYmxlcyBDb2RlU2NyaXB0IFRvb2xraXQsIHdob3NlIGJpbmFyeSB0aGUgZ2xvYmFsIHNldHVwIHNlZWRlZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZXZhbEluT2JzaWRpYW4oe1xuICAgIGFzeW5jIGNhbGxiYWNrKHsgYXBwLCBjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkLCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBsaWI6IHsgd2FpdFVudGlsIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogdGltZW91dCB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBpZiAodHlwZW9mIGFwcC5wbHVnaW5zLmlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiAhYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFhcHAucGx1Z2lucy5nZXRQbHVnaW4oY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luKGNvZGVTY3JpcHRUb29sa2l0UGx1Z2luSWQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb2RlU2NyaXB0IFRvb2xraXQgbmV2ZXIgbG9hZGVkJyxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IGFwcC5wbHVnaW5zLmdldFBsdWdpbihjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkKSAhPT0gbnVsbCxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgIH0sXG4gICAgdmF1bHRQYXRoOiBnZXRUZW1wb3JhcnlWYXVsdCgpLnBhdGhcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogQ2xpY2tzIG9uZSBidXR0b24gYW5kIHJlYWRzIHRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHVuZGVyIGl0LlxuICpcbiAqIEEgYnV0dG9uIHRoYXQgcmUtcmVuZGVycyBpdHMgb3duIG5vdGUgKGEgc2V0dGluZ3MgY2hhbmdlLCBhIHJlbG9hZCkgZGV0YWNoZXMgdGhlIGJsb2NrIGl0IGxpdmVzIGluLFxuICogc28gdGhlIGJsb2NrIGVsZW1lbnQgaXMgY2FwdHVyZWQgQkVGT1JFIHRoZSBjbGljayBhbmQgcmVhZCBhZnRlcndhcmRzIFx1MjAxNCBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHRoZVxuICogcmVzdWx0IGludG8gdGhhdCBzYW1lIGVsZW1lbnQgZXZlbiBvbmNlIGl0IGlzIGRldGFjaGVkLlxuICpcbiAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIGhvbGRpbmcgdGhlIGJ1dHRvbi5cbiAqIEBwYXJhbSBidXR0b25DYXB0aW9uIC0gVGhlIGJ1dHRvbidzIHJlbmRlcmVkIGNhcHRpb24sIHdoaWNoIGlzIGhvdyBpdCBpcyBhZGRyZXNzZWQuXG4gKiBAcGFyYW0gdGltZW91dHMgLSBUaGUgcmVuZGVyIGFuZCByZXN1bHQgYnVkZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGVtb1ZhdWx0QnV0dG9uUmVzdWx0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xpY2tCdXR0b24oXG4gIG5vdGVQYXRoOiBzdHJpbmcsXG4gIGJ1dHRvbkNhcHRpb246IHN0cmluZyxcbiAgdGltZW91dHM6IENsaWNrQnV0dG9uVGltZW91dHNcbik6IFByb21pc2U8RGVtb1ZhdWx0QnV0dG9uUmVzdWx0PiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soe1xuICAgICAgYXBwLFxuICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgY2FwdGlvbixcbiAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICBsaWI6IHsgd2FpdFVudGlsIH0sXG4gICAgICBvYnNpZGlhbk1vZHVsZSxcbiAgICAgIG91dHB1dEV4Y2VycHRMZW5ndGgsXG4gICAgICBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9KTogUHJvbWlzZTxEZW1vVmF1bHRCdXR0b25SZXN1bHQ+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYnV0dG9ucygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi52aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KCc6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhJykgPz8gW11dO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmaW5kQnV0dG9uKCk6IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbnMoKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50ZXh0Q29udGVudCA9PT0gY2FwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbCh7XG4gICAgICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICBtZXNzYWdlOiBgY29kZSBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVuZGVyZWRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBwcmV2aWV3RWwoKTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxlcikge1xuICAgICAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxlci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmluZEJ1dHRvbigpICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b24gPSBmaW5kQnV0dG9uKCk7XG4gICAgICBpZiAoIWJ1dHRvbikge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9jayA9IGJ1dHRvbi5jbG9zZXN0PEhUTUxFbGVtZW50PignLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uJykgPz8gYnV0dG9uLnBhcmVudEVsZW1lbnQ7XG4gICAgICBidXR0b24uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuXG4gICAgICBsZXQgc3RhdHVzOiBEZW1vVmF1bHRCdXR0b25SZXN1bHRbJ3N0YXR1cyddO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVwb3J0ZWQgYSByZXN1bHRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4gL0V4ZWN1dGVkICg/OnN1Y2Nlc3NmdWxseXx3aXRoIGVycm9yKS8udGVzdChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLFxuICAgICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2s/LnRleHRDb250ZW50ID8/ICcnO1xuICAgICAgICBpZiAodGV4dC5pbmNsdWRlcygnRXhlY3V0ZWQgd2l0aCBlcnJvcicpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCdFeGVjdXRlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdvayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc3RhdHVzID0gJ3RpbWVvdXQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6IChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLnNsaWNlKDAsIG91dHB1dEV4Y2VycHRMZW5ndGgpLCBzdGF0dXMgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRzLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGNhcHRpb246IGJ1dHRvbkNhcHRpb24sXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIG5vdGVQYXRoLFxuICAgICAgb3V0cHV0RXhjZXJwdExlbmd0aDogT1VUUFVUX0VYQ0VSUFRfTEVOR1RILFxuICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiB0aW1lb3V0cy5zZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgbm90ZSBpbiByZWFkaW5nIHZpZXcgYW5kIGxpc3RzIHRoZSBjYXB0aW9ucyBvZiB0aGUgYnV0dG9ucyB0aGF0IG1vdW50ZWQsIGRlZHVwbGljYXRlZCBhbmQgaW5cbiAqIGRvY3VtZW50IG9yZGVyLlxuICpcbiAqIFR3byBxdWlya3Mgb2YgcmVhZGluZyB2aWV3IHNoYXBlIHRoaXMuIEl0IHJlbmRlcnMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gdGhlXG4gKiBwcmV2aWV3IGlzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gd2hpbGUgd2FpdGluZyBvciBhIG5vdGUncyBsYXN0IGJ1dHRvbnMgbmV2ZXIgbW91bnQgYXQgYWxsLiBBbmRcbiAqIHdoaWxlIGl0IHNldHRsZXMgaXQgY2FuIGhvbGQgU0VWRVJBTCBlbGVtZW50cyBwZXIgZmVuY2UgXHUyMDE0IHRoZSBzYW1lIGJ1dHRvbiB3YXMgb2JzZXJ2ZWQgcmVuZGVyZWQgdHdpY2VcbiAqIFx1MjAxNCBzbyB0aGUgY2FwdGlvbnMgYXJlIGRlZHVwbGljYXRlZDsgY2xpY2tpbmcgYnkgY2FwdGlvbiB0aGVuIGFkZHJlc3NlcyBlYWNoIGJ1dHRvbiBvbmNlIGhvd2V2ZXIgbWFueVxuICogY29waWVzIG9mIGl0IHRoZSBET00gaXMgaG9sZGluZy5cbiAqXG4gKiBAcGFyYW0gbm90ZSAtIFRoZSBub3RlIHRvIG9wZW4uXG4gKiBAcGFyYW0gc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGJ1dHRvbnMgdG8gbW91bnQuXG4gKiBAcmV0dXJucyBUaGUgZGlzdGluY3QgYnV0dG9uIGNhcHRpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBvcGVuTm90ZUFuZExpc3RCdXR0b25DYXB0aW9ucyhub3RlOiBEZW1vVmF1bHROb3RlLCBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIGV2YWxJbk9ic2lkaWFuKHtcbiAgICBhc3luYyBjYWxsYmFjayh7IGFwcCwgZXhwZWN0ZWRCdXR0b25Db3VudCwgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgbGliOiB7IHdhaXRVbnRpbCB9LCBub3RlUGF0aCwgb2JzaWRpYW5Nb2R1bGUsIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgZnVuY3Rpb24gdmlldygpOiBJbnN0YW5jZVR5cGU8dHlwZW9mIG9ic2lkaWFuTW9kdWxlLk1hcmtkb3duVmlldz4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXcpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcHJldmlld0VsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB2aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCc6c2NvcGUgLm1hcmtkb3duLXByZXZpZXctdmlldycpID8/IG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjYXB0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gWy4uLnZpZXcoKT8uY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbDxIVE1MQnV0dG9uRWxlbWVudD4oJzpzY29wZSAuYmxvY2stbGFuZ3VhZ2UtY29kZS1idXR0b24gYnV0dG9uLm1vZC1jdGEnKSA/PyBbXV1cbiAgICAgICAgICAubWFwKChidXR0b24pID0+IGJ1dHRvbi50ZXh0Q29udGVudClcbiAgICAgICAgICAuZmlsdGVyKChjYXB0aW9uKSA9PiBjYXB0aW9uICE9PSAnJyk7XG4gICAgICAgIHJldHVybiBbLi4ubmV3IFNldChyZW5kZXJlZCldO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBhcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChub3RlUGF0aC5yZXBsYWNlKC9cXC5tZCQvLCAnJyksICcnLCBmYWxzZSk7XG4gICAgICBhd2FpdCBhcHAud29ya3NwYWNlLmdldExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHN0YXRlOiB7IGZpbGU6IG5vdGVQYXRoLCBtb2RlOiAncHJldmlldycgfSwgdHlwZTogJ21hcmtkb3duJyB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7bm90ZVBhdGh9XCIgbmV2ZXIgbW91bnRlZCBhbGwgJHtTdHJpbmcoZXhwZWN0ZWRCdXR0b25Db3VudCl9IG9mIGl0cyBidXR0b25zYCxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gcHJldmlld0VsKCk7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsZXIpIHtcbiAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG9wID0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb25zKCkubGVuZ3RoID49IGV4cGVjdGVkQnV0dG9uQ291bnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVGhlIGNhcHRpb25zIGFyZSByZXR1cm5lZCBlaXRoZXIgd2F5OyB0aGUgY2FsbGVyIGFzc2VydHMgb24gdGhlbSBhbmQgcmVwb3J0cyB0aGUgc2hvcnRmYWxsLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FwdGlvbnMoKTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBleHBlY3RlZEJ1dHRvbkNvdW50OiBub3RlLmJ1dHRvbkNvdW50LFxuICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kczogUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBub3RlUGF0aDogbm90ZS5uYW1lLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHFCQUFxQjtBQU12QixNQUFNLGdDQUFnQztBQXFGN0MsTUFBTSxnREFBZ0Q7QUFDdEQsTUFBTSx5Q0FBeUM7QUFDL0MsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBd0I7QUFJOUIsTUFBTSx5QkFBeUIsQ0FBQyxXQUFXO0FBRTNDLE1BQU0sNEJBQTRCO0FBZ0IzQixTQUFTLGVBQWUsVUFBa0IsVUFBb0Q7QUFDbkcsTUFBSSxTQUFTLFdBQVcsR0FBRztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sVUFBVSxTQUNiLElBQUksQ0FBQyxZQUFZLFFBQVEsUUFBUSxPQUFPLE1BQU0sUUFBUSxNQUFNLE1BQU0sUUFBUSxPQUFPLFdBQVcsUUFBUSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFDakgsS0FBSyxJQUFJO0FBQ1osU0FBTyxHQUFHLE9BQU8sU0FBUyxNQUFNLENBQUMsaUJBQWlCLFFBQVE7QUFBQSxFQUEwQixPQUFPO0FBQzdGO0FBV08sU0FBUyxxQkFBcUIsZUFBdUIsZUFBcUQ7QUFDL0csU0FBTyxZQUFZLGVBQWUsRUFBRSxlQUFlLEtBQUssQ0FBQyxFQUN0RCxPQUFPLENBQUMsVUFBVSxNQUFNLE9BQU8sS0FBSyxNQUFNLEtBQUssU0FBUyxLQUFLLEtB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
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWJ1dHRvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIHZpdGVzdCBzdWl0ZSB0aGF0IG9wZW5zIGV2ZXJ5IG5vdGUgb2YgYSBwbHVnaW4ncyBpbi1yZXBvIGBkZW1vLXZhdWx0L2AsIGNsaWNrcyBlYWNoIGBjb2RlLWJ1dHRvbmBcbiAqIGluIGl0IGFnYWluc3QgYSByZWFsIE9ic2lkaWFuLCBhbmQgZmFpbHMgb24gYW55IGJ1dHRvbiB0aGF0IGVycm9ycyBvciBuZXZlciByZXBvcnRzIGEgcmVzdWx0LlxuICpcbiAqIEEgZGVtbyB2YXVsdCdzIGJ1dHRvbnMgYXJlIHRoZSBvbmUgcGFydCBvZiBpdCBubyBvdGhlciBnYXRlIGNhbiBjaGVjay4gYGxpbnQ6bWRgIHJlYWRzIHRoZSBtYXJrZG93bixcbiAqIHRoZSBjb3ZlcmFnZSBzdWl0ZSAoe0BsaW5rIC4vZGVtby12YXVsdC1jb3ZlcmFnZS50cyB8IGByZWdpc3RlckRlbW9WYXVsdENvdmVyYWdlU3VpdGVgfSkgY2hlY2tzIHRoZVxuICogYXV0aG9yaW5nIGNvbnZlbnRpb25zLCBhbmQgbmVpdGhlciBleGVjdXRlcyBhbnl0aGluZyBcdTIwMTQgYSBidXR0b24gd2hvc2UgYHJlcXVpcmUoJy9kZW1vU2V0dXAudHMnKWAgcGF0aFxuICogaXMgd3JvbmcsIG9yIHRoYXQgY2FsbHMgYW4gQVBJIHRoYXQgaGFzIHNpbmNlIGNoYW5nZWQgc2hhcGUsIGZhaWxzIGF0IGNsaWNrIHRpbWUgYW5kIG5vd2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29tcGFuaW9uIGhhbGYgXHUyMDE0IHNlZWRpbmcgdGhlIHRlbXAgdmF1bHQgd2l0aCB0aGUgZGVtby12YXVsdCB0cmVlLCBpdHMgYC5vYnNpZGlhbmAgY29uZmlnLCBhbmQgdGhlXG4gKiBDb2RlU2NyaXB0IFRvb2xraXQgYmluYXJ5IHRoYXQgdHVybnMgYGBgYCBgYGBjb2RlLWJ1dHRvbiBgYGBgIGZlbmNlcyBpbnRvIGJ1dHRvbnMgXHUyMDE0IGlzXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgaW4gYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgOyBoYW5kIGl0cyByZXN1bHQgdG8gdGhlIHByb2plY3Qnc1xuICogYGdsb2JhbFNldHVwYCBhbmQgbmFtZSBDb2RlU2NyaXB0IFRvb2xraXQgaW4gYGVuYWJsZUNvbW11bml0eVBsdWdpbnNgLlxuICovXG5cbmltcG9ydCB7XG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnO1xuaW1wb3J0IHsgZ2V0VGVtcG9yYXJ5VmF1bHQgfSBmcm9tICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nL3ZpdGVzdC1nbG9iYWwtc2V0dXAtcGx1Z2luJztcbmltcG9ydCB7XG4gIGJlZm9yZUFsbCxcbiAgZGVzY3JpYmUsXG4gIGV4cGVjdCxcbiAgaXRcbn0gZnJvbSAndml0ZXN0JztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogQ29kZVNjcmlwdCBUb29sa2l0J3MgbWFuaWZlc3QgaWQuIEl0IGlzIHN0aWxsIHRoZSBwbHVnaW4ncyBvcmlnaW5hbCBgZml4LXJlcXVpcmUtbW9kdWxlc2AgaWQsIHdoaWNoXG4gKiBubyBsb25nZXIgbWF0Y2hlcyBpdHMgbmFtZSBcdTIwMTQgdGhlIGlkIGlzIHB1Ymxpc2hlZCwgc28gaXQgY2Fubm90IGJlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDT0RFX1NDUklQVF9UT09MS0lUX1BMVUdJTl9JRCA9ICdmaXgtcmVxdWlyZS1tb2R1bGVzJztcblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBjbGlja2luZyBvbmUgYnV0dG9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbW9WYXVsdEJ1dHRvblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgYnV0dG9uJ3MgY2FwdGlvbiwgYXMgcmVuZGVyZWQuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgcHJpbnRlZCB1bmRlciB0aGUgYnV0dG9uLCB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYnV0dG9uIHJlcG9ydGVkIHN1Y2Nlc3MsIHJlcG9ydGVkIGFuIGVycm9yLCBvciBuZXZlciByZXBvcnRlZCBhdCBhbGwuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6ICdlcnJvcicgfCAnb2snIHwgJ3RpbWVvdXQnIHwgJ3Vua25vd24nO1xufVxuXG4vKipcbiAqIE9uZSBkZW1vLXZhdWx0IG5vdGUgYW5kIGhvdyBtYW55IGJ1dHRvbnMgaXRzIHNvdXJjZSBkZWNsYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZW1vVmF1bHROb3RlIHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IGBjb2RlLWJ1dHRvbmAgZmVuY2VzIHRoZSBub3RlJ3Mgc291cmNlIGRlY2xhcmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG5vdGUncyBmaWxlIG5hbWUsIHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHtAbGluayByZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlckRlbW9WYXVsdEJ1dHRvblN1aXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIb3cgbG9uZywgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGZvciBhIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDE1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOb3RlIGZpbGUgbmFtZXMgKHJlbGF0aXZlIHRvIHRoZSBkZW1vIHZhdWx0IHJvb3QpIHRvIHNraXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ1JFQURNRS5tZCddYFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZWROb3Rlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVwb3NpdG9yeSByb290IGhvbGRpbmcgYGRlbW8tdmF1bHQvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIHJlc29sdmVkIHJlcG8gcm9vdCwgZmFsbGluZyBiYWNrIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgZm9yIGEgbm90ZSdzIHByZXZpZXcgYW5kIGl0cyBidXR0b25zIHRvIG1vdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjAwMDBgXG4gICAqL1xuICByZWFkb25seSBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHdhaXRpbmcgYnVkZ2V0cyBhIHNpbmdsZSBidXR0b24gY2xpY2sgaXMgYWxsb3dlZC5cbiAqL1xuaW50ZXJmYWNlIENsaWNrQnV0dG9uVGltZW91dHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIGNsaWNrZWQgYnV0dG9uIHRvIHJlcG9ydCBhIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGZvciB0aGUgYnV0dG9uIGl0c2VsZiB0byBtb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxNV8wMDA7XG5jb25zdCBERUZBVUxUX1NFVFRMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDIwXzAwMDtcbmNvbnN0IFBPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwO1xuY29uc3QgT1VUUFVUX0VYQ0VSUFRfTEVOR1RIID0gNDAwO1xuXG4vLyBgUkVBRE1FLm1kYCBpcyB0aGUgcmVwby1mYWNpbmcgcGFnZSBHaXRIdWIgcmVuZGVycywgbm90IGEgd2Fsa3Rocm91Z2guIGAwMCBTdGFydC5tZGAgaXMgZGVsaWJlcmF0ZWx5XG4vLyBOT1QgZXhjbHVkZWQ6IHNpbmNlIFQ0NzggdGhlIGxhbmRpbmcgbm90ZXMgY2FycnkgYnV0dG9ucyBvZiB0aGVpciBvd24uXG5jb25zdCBERUZBVUxUX0VYQ0xVREVEX05PVEVTID0gWydSRUFETUUubWQnXTtcblxuY29uc3QgQ09ERV9CVVRUT05fRkVOQ0VfUkVHX0VYUCA9IC9eXFxzKmBgYGNvZGUtYnV0dG9uL2dtO1xuXG4vLyBUaGUgcmVuZGVyZWQtYnV0dG9uIHNlbGVjdG9yIGlzIGA6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhYC4gSXQgaXMgd3JpdHRlblxuLy8gT3V0IGF0IGVhY2ggdXNlIHNpdGUgcmF0aGVyIHRoYW4gaGVsZCBpbiBhIGNvbnN0YW50IGhlcmU6IGV2ZXJ5IGNsb3N1cmUgYmVsb3cgaXMgc2VyaWFsaXplZCB3aXRoXG4vLyBgdG9TdHJpbmcoKWAgYW5kIGV2YWx1YXRlZCBpbnNpZGUgT2JzaWRpYW4sIHdoZXJlIG5vdGhpbmcgZnJvbSB0aGlzIG1vZHVsZSdzIHNjb3BlIGV4aXN0cy5cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGFzc2VydGlvbiBtZXNzYWdlIGZvciBhIG5vdGUncyBmYWlsaW5nIGJ1dHRvbnMuXG4gKlxuICogVGhlIGNhcHR1cmVkIG91dHB1dCBpcyBpbmNsdWRlZCBiZWNhdXNlIGEgYnV0dG9uJ3MgZmFpbHVyZSBpcyBhIHJ1bnRpbWUgb25lIFx1MjAxNCB0aGUgc3RhY2sgQ29kZVNjcmlwdFxuICogVG9vbGtpdCBwcmludHMgdW5kZXIgaXQgaXMgdGhlIG9ubHkgZGlhZ25vc2lzIHRoZXJlIGlzLlxuICpcbiAqIEBwYXJhbSBub3RlTmFtZSAtIFRoZSBub3RlIHRoZSBidXR0b25zIGJlbG9uZyB0by5cbiAqIEBwYXJhbSBmYWlsdXJlcyAtIFRoZSBmYWlsaW5nIGJ1dHRvbnMuXG4gKiBAcmV0dXJucyBUaGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZhaWx1cmVzKG5vdGVOYW1lOiBzdHJpbmcsIGZhaWx1cmVzOiByZWFkb25seSBEZW1vVmF1bHRCdXR0b25SZXN1bHRbXSk6IHN0cmluZyB7XG4gIGlmIChmYWlsdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gZmFpbHVyZXNcbiAgICAubWFwKChmYWlsdXJlKSA9PiBgICAtIFwiJHtmYWlsdXJlLmNhcHRpb259XCIgWyR7ZmFpbHVyZS5zdGF0dXN9XTogJHtmYWlsdXJlLm91dHB1dC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJykudHJpbSgpfWApXG4gICAgLmpvaW4oJ1xcbicpO1xuICByZXR1cm4gYCR7U3RyaW5nKGZhaWx1cmVzLmxlbmd0aCl9IGJ1dHRvbihzKSBpbiAke25vdGVOYW1lfSBkaWQgbm90IHJ1biBjbGVhbmx5OlxcbiR7ZGV0YWlsc31gO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBkZW1vIHZhdWx0J3MgdG9wLWxldmVsIG5vdGVzIHRoYXQgZGVjbGFyZSBhdCBsZWFzdCBvbmUgYGNvZGUtYnV0dG9uYC5cbiAqXG4gKiBPbmx5IHRoZSB2YXVsdCByb290IGlzIHdhbGtlZDogYE1hdGVyaWFscy9gIGhvbGRzIGZpeHR1cmVzIHRoZSB3YWxrdGhyb3VnaHMgYWN0IG9uLCBub3Qgd2Fsa3Rocm91Z2hzLlxuICpcbiAqIEBwYXJhbSBkZW1vVmF1bHRQYXRoIC0gVGhlIGRlbW8gdmF1bHQgcm9vdC5cbiAqIEBwYXJhbSBleGNsdWRlZE5vdGVzIC0gTm90ZSBmaWxlIG5hbWVzIHRvIHNraXAuXG4gKiBAcmV0dXJucyBUaGUgbm90ZXMsIHNvcnRlZCBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE5vdGVzV2l0aEJ1dHRvbnMoZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBleGNsdWRlZE5vdGVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogRGVtb1ZhdWx0Tm90ZVtdIHtcbiAgcmV0dXJuIHJlYWRkaXJTeW5jKGRlbW9WYXVsdFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSAmJiBlbnRyeS5uYW1lLmVuZHNXaXRoKCcubWQnKSAmJiAhZXhjbHVkZWROb3Rlcy5oYXMoZW50cnkubmFtZSkpXG4gICAgLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5hbWUpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKG5hbWUpID0+ICh7XG4gICAgICBidXR0b25Db3VudDogKHJlYWRGaWxlU3luYyhqb2luKGRlbW9WYXVsdFBhdGgsIG5hbWUpLCAndXRmLTgnKS5tYXRjaChDT0RFX0JVVFRPTl9GRU5DRV9SRUdfRVhQKSA/PyBbXSkubGVuZ3RoLFxuICAgICAgbmFtZVxuICAgIH0pKVxuICAgIC5maWx0ZXIoKG5vdGUpID0+IG5vdGUuYnV0dG9uQ291bnQgPiAwKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEV2ZXJ5IGFzc2VydGlvbiBiZWxvdyBydW5zIGFnYWluc3QgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQLCBkcml2ZW4gYnkgY2xvc3VyZXMgdGhpcyBwcm9jZXNzIHNlcmlhbGl6ZXMgYW5kIGFub3RoZXIgZXhlY3V0ZXMuIFRoZSB0ZXN0YWJsZSBwYXJ0cyBhcmUgbGlzdE5vdGVzV2l0aEJ1dHRvbnMgYW5kIGZvcm1hdEZhaWx1cmVzLCB3aGljaCBoYXZlIHRoZWlyIG93biB1bml0IHRlc3RzLiAqL1xuLyoqXG4gKiBSZWdpc3RlcnMgYSB2aXRlc3Qgc3VpdGUgdGhhdCBjbGlja3MgZXZlcnkgYGNvZGUtYnV0dG9uYCBpbiB0aGUgcmVwbydzIGRlbW8gdmF1bHQuXG4gKlxuICogT25lIGBpdGAgcGVyIG5vdGUsIGFuZCBvbmUgYGV2YWxJbk9ic2lkaWFuYCBwZXIgYnV0dG9uOiBhIHNpbmdsZSBjbG9zdXJlIHJ1bnMgYXMgb25lIENEUFxuICogYFJ1bnRpbWUuZXZhbHVhdGVgLCB3aGljaCB0aGUgaGFybmVzcyBjYXBzIGF0IDMwIHMsIHNvIGEgbm90ZSB3aXRoIGEgZG96ZW4gYnV0dG9ucyB3b3VsZCBvdGhlcndpc2VcbiAqIHRpbWUgb3V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHdoaWNoIGJ1dHRvbiBmYWlsZWQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGVPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVtb1ZhdWx0QnV0dG9uU3VpdGUob3B0aW9uczogUmVnaXN0ZXJEZW1vVmF1bHRCdXR0b25TdWl0ZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCByb290Rm9sZGVyID0gb3B0aW9ucy5yb290Rm9sZGVyID8/IGdldFJvb3RGb2xkZXIoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkZW1vVmF1bHRQYXRoID0gam9pbihyb290Rm9sZGVyLCAnZGVtby12YXVsdCcpO1xuICBjb25zdCBleGNsdWRlZE5vdGVzID0gbmV3IFNldChvcHRpb25zLmV4Y2x1ZGVkTm90ZXMgPz8gREVGQVVMVF9FWENMVURFRF9OT1RFUyk7XG4gIGNvbnN0IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IG9wdGlvbnMuc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfU0VUVExFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICBjb25zdCBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSBvcHRpb25zLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0JVVFRPTl9SRVNVTFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgY29uc3Qgbm90ZXMgPSBsaXN0Tm90ZXNXaXRoQnV0dG9ucyhkZW1vVmF1bHRQYXRoLCBleGNsdWRlZE5vdGVzKTtcblxuICBkZXNjcmliZSgnZGVtby12YXVsdCBidXR0b25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpc0NvZGVTY3JpcHRUb29sa2l0TG9hZGVkID0gYXdhaXQgY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZChzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgICAgLy8gV2l0aG91dCBpdCBldmVyeSBgY29kZS1idXR0b25gIGZlbmNlIHN0YXlzIGEgcGxhaW4gY29kZSBibG9jaywgc28gZXZlcnkgbm90ZSBiZWxvdyB3b3VsZCByZXBvcnRcbiAgICAgIC8vIFplcm8gYnV0dG9ucyBhbmQgcGFzcyB2YWN1b3VzbHkuIEZhaWwgaGVyZSBpbnN0ZWFkLCBvbmNlLCB3aXRoIHRoZSByZWFzb24uXG4gICAgICBleHBlY3QoaXNDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCwgJ0NvZGVTY3JpcHQgVG9vbGtpdCBkaWQgbm90IGxvYWQsIHNvIG5vIGJ1dHRvbiBjb3VsZCByZW5kZXInKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQSB2YXVsdCB3aG9zZSBub3RlcyBkZWNsYXJlIG5vIGJ1dHRvbnMgaXMgYSByZWFsIGZhaWx1cmUgb2YgRzk4J3MgaW50ZXJhY3RpdmUgaGFsZiwgbm90IGEgcmVhc29uXG4gICAgLy8gVG8gcmVnaXN0ZXIgbm90aGluZyBhbmQgcmVwb3J0IGdyZWVuLlxuICAgIGl0KCdoYXMgYXQgbGVhc3Qgb25lIG5vdGUgd2l0aCBhIGNvZGUgYnV0dG9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vdGVzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBub3RlIG9mIG5vdGVzKSB7XG4gICAgICBpdChgcnVucyBldmVyeSBjb2RlIGJ1dHRvbiBpbiAke25vdGUubmFtZX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHRpb25zID0gYXdhaXQgb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgLy8gUmVhZGluZyB2aWV3IG1vdW50cyBhIG5vdGUncyBsZWFkaW5nIHNlY3Rpb25zIG1vcmUgdGhhbiBvbmNlIHdoaWxlIGl0IHNldHRsZXMsIHNvIHRoZSBET00gY2FuXG4gICAgICAgIC8vIEhvbGQgc2V2ZXJhbCBlbGVtZW50cyBwZXIgZmVuY2UuIFRoZSBjYXB0aW9ucyBhcmUgZGVkdXBsaWNhdGVkLCBhbmQgdGhlIGFzc2VydGlvbiBpcyB0aGF0IGF0XG4gICAgICAgIC8vIExlYXN0IGFzIG1hbnkgRElTVElOQ1QgYnV0dG9ucyByZW5kZXJlZCBhcyB0aGUgc291cmNlIGRlY2xhcmVzIFx1MjAxNCBhIGZlbmNlIHRoYXQgc2lsZW50bHkgc3RheWVkXG4gICAgICAgIC8vIEEgcGxhaW4gY29kZSBibG9jayBpcyB0aGUgZmFpbHVyZSB0aGlzIGNhdGNoZXMuXG4gICAgICAgIGV4cGVjdChjYXB0aW9ucy5sZW5ndGgsIGAke25vdGUubmFtZX0gZGVjbGFyZXMgJHtTdHJpbmcobm90ZS5idXR0b25Db3VudCl9IGJ1dHRvbihzKSBidXQgb25seSAke1N0cmluZyhjYXB0aW9ucy5sZW5ndGgpfSByZW5kZXJlZGApXG4gICAgICAgICAgLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwobm90ZS5idXR0b25Db3VudCk7XG5cbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IERlbW9WYXVsdEJ1dHRvblJlc3VsdFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2FwdGlvbiBvZiBjYXB0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWNrQnV0dG9uKG5vdGUubmFtZSwgY2FwdGlvbiwge1xuICAgICAgICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QoZmFpbHVyZXMsIGZvcm1hdEZhaWx1cmVzKG5vdGUubmFtZSwgZmFpbHVyZXMpKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogVHVybnMgcmVzdHJpY3RlZCBtb2RlIG9mZiBhbmQgZW5hYmxlcyBDb2RlU2NyaXB0IFRvb2xraXQsIHdob3NlIGJpbmFyeSB0aGUgZ2xvYmFsIHNldHVwIHNlZWRlZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gSG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgQ29kZVNjcmlwdCBUb29sa2l0IGlzIGxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tDb2RlU2NyaXB0VG9vbGtpdExvYWRlZCh0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gZXZhbEluT2JzaWRpYW4oe1xuICAgIGFzeW5jIGNhbGxiYWNrKHsgYXBwLCBjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkLCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBsaWI6IHsgd2FpdFVudGlsIH0sIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogdGltZW91dCB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBpZiAodHlwZW9mIGFwcC5wbHVnaW5zLmlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiAhYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuc2V0RW5hYmxlKHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFhcHAucGx1Z2lucy5nZXRQbHVnaW4oY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZCkpIHtcbiAgICAgICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luKGNvZGVTY3JpcHRUb29sa2l0UGx1Z2luSWQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb2RlU2NyaXB0IFRvb2xraXQgbmV2ZXIgbG9hZGVkJyxcbiAgICAgICAgICBwcmVkaWNhdGU6ICgpOiBib29sZWFuID0+IGFwcC5wbHVnaW5zLmdldFBsdWdpbihjb2RlU2NyaXB0VG9vbGtpdFBsdWdpbklkKSAhPT0gbnVsbCxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29kZVNjcmlwdFRvb2xraXRQbHVnaW5JZDogQ09ERV9TQ1JJUFRfVE9PTEtJVF9QTFVHSU5fSUQsXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgIH0sXG4gICAgdmF1bHRQYXRoOiBnZXRUZW1wb3JhcnlWYXVsdCgpLnBhdGhcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEcml2ZXMgYSByZWFsIE9ic2lkaWFuIG92ZXIgQ0RQOiB0aGUgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGhlcmUgYW5kIGV4ZWN1dGVkIGluIGFub3RoZXIgcHJvY2Vzcywgc28gaXQgY2Fubm90IGJlIGV4ZXJjaXNlZCBieSBhIHVuaXQgdGVzdC4gKi9cbi8qKlxuICogQ2xpY2tzIG9uZSBidXR0b24gYW5kIHJlYWRzIHRoZSByZXN1bHQgbGluZSBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHVuZGVyIGl0LlxuICpcbiAqIEEgYnV0dG9uIHRoYXQgcmUtcmVuZGVycyBpdHMgb3duIG5vdGUgKGEgc2V0dGluZ3MgY2hhbmdlLCBhIHJlbG9hZCkgZGV0YWNoZXMgdGhlIGJsb2NrIGl0IGxpdmVzIGluLFxuICogc28gdGhlIGJsb2NrIGVsZW1lbnQgaXMgY2FwdHVyZWQgQkVGT1JFIHRoZSBjbGljayBhbmQgcmVhZCBhZnRlcndhcmRzIFx1MjAxNCBDb2RlU2NyaXB0IFRvb2xraXQgd3JpdGVzIHRoZVxuICogcmVzdWx0IGludG8gdGhhdCBzYW1lIGVsZW1lbnQgZXZlbiBvbmNlIGl0IGlzIGRldGFjaGVkLlxuICpcbiAqIEBwYXJhbSBub3RlUGF0aCAtIFRoZSBub3RlIGhvbGRpbmcgdGhlIGJ1dHRvbi5cbiAqIEBwYXJhbSBidXR0b25DYXB0aW9uIC0gVGhlIGJ1dHRvbidzIHJlbmRlcmVkIGNhcHRpb24sIHdoaWNoIGlzIGhvdyBpdCBpcyBhZGRyZXNzZWQuXG4gKiBAcGFyYW0gdGltZW91dHMgLSBUaGUgcmVuZGVyIGFuZCByZXN1bHQgYnVkZ2V0cy5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGVtb1ZhdWx0QnV0dG9uUmVzdWx0fS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xpY2tCdXR0b24oXG4gIG5vdGVQYXRoOiBzdHJpbmcsXG4gIGJ1dHRvbkNhcHRpb246IHN0cmluZyxcbiAgdGltZW91dHM6IENsaWNrQnV0dG9uVGltZW91dHNcbik6IFByb21pc2U8RGVtb1ZhdWx0QnV0dG9uUmVzdWx0PiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soe1xuICAgICAgYXBwLFxuICAgICAgYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgICAgY2FwdGlvbixcbiAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICBsaWI6IHsgd2FpdFVudGlsIH0sXG4gICAgICBvYnNpZGlhbk1vZHVsZSxcbiAgICAgIG91dHB1dEV4Y2VycHRMZW5ndGgsXG4gICAgICBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9KTogUHJvbWlzZTxEZW1vVmF1bHRCdXR0b25SZXN1bHQ+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYnV0dG9ucygpOiBIVE1MQnV0dG9uRWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi52aWV3KCk/LmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KCc6c2NvcGUgLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uIGJ1dHRvbi5tb2QtY3RhJykgPz8gW11dO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmaW5kQnV0dG9uKCk6IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbnMoKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50ZXh0Q29udGVudCA9PT0gY2FwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWRpbmcgdmlldyBtb3VudHMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gTk8gc2luZ2xlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgLy8gSG9sZHMgYSB3aG9sZSBub3RlJ3MgYnV0dG9ucy4gQWR2YW5jZSBhIHZpZXdwb3J0IGF0IGEgdGltZSBhbmQgd3JhcCBiYWNrIHRvIHRoZSB0b3AsIHJlbW91bnRpbmdcbiAgICAgIC8vIEV2ZXJ5IHNlY3Rpb24gaW4gdHVybiB1bnRpbCB0aGUgb25lIGJlaW5nIGxvb2tlZCBmb3IgYXBwZWFycy4gUGlubmluZyB0byB0aGUgQk9UVE9NIGluc3RlYWQgXHUyMDE0XG4gICAgICAvLyBXaGF0IHRoaXMgZGlkIHVudGlsIDk0LjQuMSBcdTIwMTQgb25seSBldmVyIG1vdW50cyB0aGUgbm90ZSdzIHRhaWwsIHNvIGEgYnV0dG9uIGFueXdoZXJlIGJ1dCBhdCB0aGVcbiAgICAgIC8vIEVuZCBvZiBpdHMgbm90ZSB3YXMgcmVwb3J0ZWQgYXMgbmV2ZXIgcmVuZGVyZWQgKGBzdGF0dXM6ICd0aW1lb3V0J2AsIGVtcHR5IG91dHB1dCkgaG93ZXZlclxuICAgICAgLy8gSGVhbHRoeSBpdCB3YXMuXG4gICAgICBjb25zdCBTQ1JPTExfQk9UVE9NX1RPTEVSQU5DRV9JTl9QSVhFTFMgPSA0O1xuICAgICAgY29uc3QgU0NST0xMX1NURVBfUkFUSU8gPSAwLjg7XG4gICAgICBmdW5jdGlvbiBhZHZhbmNlU2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IHByZXZpZXdFbCgpO1xuICAgICAgICBpZiAoIXNjcm9sbGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxlci5zY3JvbGxUb3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQgPj0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gU0NST0xMX0JPVFRPTV9UT0xFUkFOQ0VfSU5fUElYRUxTO1xuICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBpc0F0Qm90dG9tID8gMCA6IHNjcm9sbGVyLnNjcm9sbFRvcCArIE1hdGguZmxvb3Ioc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICogU0NST0xMX1NURVBfUkFUSU8pO1xuICAgICAgfVxuXG4gICAgICAvLyBIZWxkIGZyb20gdGhlIHByZWRpY2F0ZSByYXRoZXIgdGhhbiByZS1xdWVyaWVkIGFmdGVyIGl0OiB0aGUgd2FsayBhYm92ZSBrZWVwcyBtb3ZpbmcgdGhlXG4gICAgICAvLyBWaWV3cG9ydCwgc28gYSBidXR0b24gZm91bmQgb24gb25lIHBvbGwgY2FuIGJlIHVubW91bnRlZCBhZ2FpbiBieSB0aGUgbmV4dC5cbiAgICAgIGxldCBidXR0b246IEhUTUxCdXR0b25FbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBjb2RlIGJ1dHRvbiBcIiR7Y2FwdGlvbn1cIiBuZXZlciByZW5kZXJlZGAsXG4gICAgICAgICAgcHJlZGljYXRlOiAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBhZHZhbmNlU2Nyb2xsKCk7XG4gICAgICAgICAgICBidXR0b24gPSBmaW5kQnV0dG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYnV0dG9uICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJ1dHRvbikge1xuICAgICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6ICcnLCBzdGF0dXM6ICd0aW1lb3V0JyB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9jayA9IGJ1dHRvbi5jbG9zZXN0PEhUTUxFbGVtZW50PignLmJsb2NrLWxhbmd1YWdlLWNvZGUtYnV0dG9uJykgPz8gYnV0dG9uLnBhcmVudEVsZW1lbnQ7XG4gICAgICBidXR0b24uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgIGJ1dHRvbi5jbGljaygpO1xuXG4gICAgICBsZXQgc3RhdHVzOiBEZW1vVmF1bHRCdXR0b25SZXN1bHRbJ3N0YXR1cyddO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsKHtcbiAgICAgICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgIG1lc3NhZ2U6IGBidXR0b24gXCIke2NhcHRpb259XCIgbmV2ZXIgcmVwb3J0ZWQgYSByZXN1bHRgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4gL0V4ZWN1dGVkICg/OnN1Y2Nlc3NmdWxseXx3aXRoIGVycm9yKS8udGVzdChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLFxuICAgICAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogYnV0dG9uUmVzdWx0VGltZW91dEluTWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2s/LnRleHRDb250ZW50ID8/ICcnO1xuICAgICAgICBpZiAodGV4dC5pbmNsdWRlcygnRXhlY3V0ZWQgd2l0aCBlcnJvcicpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Vycm9yJztcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCdFeGVjdXRlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdvayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gJ3Vua25vd24nO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc3RhdHVzID0gJ3RpbWVvdXQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjYXB0aW9uLCBvdXRwdXQ6IChibG9jaz8udGV4dENvbnRlbnQgPz8gJycpLnNsaWNlKDAsIG91dHB1dEV4Y2VycHRMZW5ndGgpLCBzdGF0dXMgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBidXR0b25SZXN1bHRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IHRpbWVvdXRzLmJ1dHRvblJlc3VsdFRpbWVvdXRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGNhcHRpb246IGJ1dHRvbkNhcHRpb24sXG4gICAgICBpbnRlcnZhbEluTWlsbGlzZWNvbmRzOiBQT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyxcbiAgICAgIG5vdGVQYXRoLFxuICAgICAgb3V0cHV0RXhjZXJwdExlbmd0aDogT1VUUFVUX0VYQ0VSUFRfTEVOR1RILFxuICAgICAgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiB0aW1lb3V0cy5zZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgbm90ZSBpbiByZWFkaW5nIHZpZXcgYW5kIGxpc3RzIHRoZSBjYXB0aW9ucyBvZiB0aGUgYnV0dG9ucyB0aGF0IG1vdW50ZWQsIGRlZHVwbGljYXRlZCBhbmQgaW5cbiAqIGRvY3VtZW50IG9yZGVyLlxuICpcbiAqIFR3byBxdWlya3Mgb2YgcmVhZGluZyB2aWV3IHNoYXBlIHRoaXMuIEl0IHJlbmRlcnMgbGF6aWx5IGFuZCB1bm1vdW50cyBzZWN0aW9ucyBmYXIgb2ZmLXNjcmVlbiwgc28gbm9cbiAqIHNpbmdsZSBzY3JvbGwgcG9zaXRpb24gaG9sZHMgYSB3aG9sZSBub3RlJ3MgYnV0dG9ucyBcdTIwMTQgdGhlIHByZXZpZXcgaXMgd2Fsa2VkIHRvcCB0byBib3R0b20gYW5kIGJhY2tcbiAqIHdoaWxlIHdhaXRpbmcsIGFuZCB0aGUgY2FwdGlvbnMgc2VlbiBhbG9uZyB0aGUgd2F5IGFyZSBBQ0NVTVVMQVRFRCByYXRoZXIgdGhhbiByZWFkIG9uY2UgYXQgdGhlIGVuZC5cbiAqIEFuZCB3aGlsZSBpdCBzZXR0bGVzIGl0IGNhbiBob2xkIFNFVkVSQUwgZWxlbWVudHMgcGVyIGZlbmNlIFx1MjAxNCB0aGUgc2FtZSBidXR0b24gd2FzIG9ic2VydmVkIHJlbmRlcmVkXG4gKiB0d2ljZSBcdTIwMTQgc28gdGhlIGNhcHRpb25zIGFyZSBkZWR1cGxpY2F0ZWQ7IGNsaWNraW5nIGJ5IGNhcHRpb24gdGhlbiBhZGRyZXNzZXMgZWFjaCBidXR0b24gb25jZSBob3dldmVyXG4gKiBtYW55IGNvcGllcyBvZiBpdCB0aGUgRE9NIGlzIGhvbGRpbmcuXG4gKlxuICogQHBhcmFtIG5vdGUgLSBUaGUgbm90ZSB0byBvcGVuLlxuICogQHBhcmFtIHNldHRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIEhvdyBsb25nIHRvIHdhaXQgZm9yIHRoZSBidXR0b25zIHRvIG1vdW50LlxuICogQHJldHVybnMgVGhlIGRpc3RpbmN0IGJ1dHRvbiBjYXB0aW9ucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Blbk5vdGVBbmRMaXN0QnV0dG9uQ2FwdGlvbnMobm90ZTogRGVtb1ZhdWx0Tm90ZSwgc2V0dGxlVGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIHJldHVybiBldmFsSW5PYnNpZGlhbih7XG4gICAgYXN5bmMgY2FsbGJhY2soeyBhcHAsIGV4cGVjdGVkQnV0dG9uQ291bnQsIGludGVydmFsSW5NaWxsaXNlY29uZHMsIGxpYjogeyB3YWl0VW50aWwgfSwgbm90ZVBhdGgsIG9ic2lkaWFuTW9kdWxlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgIGZ1bmN0aW9uIHZpZXcoKTogSW5zdGFuY2VUeXBlPHR5cGVvZiBvYnNpZGlhbk1vZHVsZS5NYXJrZG93blZpZXc+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUob2JzaWRpYW5Nb2R1bGUuTWFya2Rvd25WaWV3KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHByZXZpZXdFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignOnNjb3BlIC5tYXJrZG93bi1wcmV2aWV3LXZpZXcnKSA/PyBudWxsO1xuICAgICAgfVxuICAgICAgLy8gQWNjdW11bGF0ZWQgYWNyb3NzIHRoZSB3YWxrIGJlbG93LCBuZXZlciByZWFkIGZyb20gb25lIHNuYXBzaG90OiB3aXRoIHRoZSB2aWV3cG9ydCBtb3ZpbmcsIGFueVxuICAgICAgLy8gU2luZ2xlIHJlYWRpbmcgaG9sZHMgb25seSB0aGUgc2VjdGlvbnMgY3VycmVudGx5IG1vdW50ZWQuXG4gICAgICBjb25zdCBzZWVuQ2FwdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZ1bmN0aW9uIGNhcHRpb25zKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdmlldygpPy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PignOnNjb3BlIC5ibG9jay1sYW5ndWFnZS1jb2RlLWJ1dHRvbiBidXR0b24ubW9kLWN0YScpID8/IFtdKSB7XG4gICAgICAgICAgaWYgKGJ1dHRvbi50ZXh0Q29udGVudCAhPT0gJycpIHtcbiAgICAgICAgICAgIHNlZW5DYXB0aW9ucy5hZGQoYnV0dG9uLnRleHRDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5zZWVuQ2FwdGlvbnNdO1xuICAgICAgfVxuXG4gICAgICAvLyBTYW1lIHdhbGsgYXMgYGNsaWNrQnV0dG9uYCwgYW5kIGZvciB0aGUgc2FtZSByZWFzb246IGEgbm90ZSB3aG9zZSBidXR0b25zIGFyZSBpbiB0aGUgTUlERExFXG4gICAgICAvLyBOZXZlciBtb3VudHMgdGhlbSBpZiB0aGUgcHJldmlldyBpcyBwaW5uZWQgdG8gdGhlIGJvdHRvbS5cbiAgICAgIGNvbnN0IFNDUk9MTF9CT1RUT01fVE9MRVJBTkNFX0lOX1BJWEVMUyA9IDQ7XG4gICAgICBjb25zdCBTQ1JPTExfU1RFUF9SQVRJTyA9IDAuODtcbiAgICAgIGZ1bmN0aW9uIGFkdmFuY2VTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0gcHJldmlld0VsKCk7XG4gICAgICAgIGlmICghc2Nyb2xsZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IHNjcm9sbGVyLnNjcm9sbFRvcCArIHNjcm9sbGVyLmNsaWVudEhlaWdodCA+PSBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBTQ1JPTExfQk9UVE9NX1RPTEVSQU5DRV9JTl9QSVhFTFM7XG4gICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvcCA9IGlzQXRCb3R0b20gPyAwIDogc2Nyb2xsZXIuc2Nyb2xsVG9wICsgTWF0aC5mbG9vcihzY3JvbGxlci5jbGllbnRIZWlnaHQgKiBTQ1JPTExfU1RFUF9SQVRJTyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KG5vdGVQYXRoLnJlcGxhY2UoL1xcLm1kJC8sICcnKSwgJycsIGZhbHNlKTtcbiAgICAgIGF3YWl0IGFwcC53b3Jrc3BhY2UuZ2V0TGVhZihmYWxzZSkuc2V0Vmlld1N0YXRlKHsgc3RhdGU6IHsgZmlsZTogbm90ZVBhdGgsIG1vZGU6ICdwcmV2aWV3JyB9LCB0eXBlOiAnbWFya2Rvd24nIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0VW50aWwoe1xuICAgICAgICAgIGludGVydmFsSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgbWVzc2FnZTogYFwiJHtub3RlUGF0aH1cIiBuZXZlciBtb3VudGVkIGFsbCAke1N0cmluZyhleHBlY3RlZEJ1dHRvbkNvdW50KX0gb2YgaXRzIGJ1dHRvbnNgLFxuICAgICAgICAgIHByZWRpY2F0ZTogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgYWR2YW5jZVNjcm9sbCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb25zKCkubGVuZ3RoID49IGV4cGVjdGVkQnV0dG9uQ291bnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVGhlIGNhcHRpb25zIGFyZSByZXR1cm5lZCBlaXRoZXIgd2F5OyB0aGUgY2FsbGVyIGFzc2VydHMgb24gdGhlbSBhbmQgcmVwb3J0cyB0aGUgc2hvcnRmYWxsLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FwdGlvbnMoKTtcbiAgICB9LFxuICAgIGlucHV0OiB7XG4gICAgICBleHBlY3RlZEJ1dHRvbkNvdW50OiBub3RlLmJ1dHRvbkNvdW50LFxuICAgICAgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kczogUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBub3RlUGF0aDogbm90ZS5uYW1lLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBzZXR0bGVUaW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgICB9LFxuICAgIHZhdWx0UGF0aDogZ2V0VGVtcG9yYXJ5VmF1bHQoKS5wYXRoXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHFCQUFxQjtBQU12QixNQUFNLGdDQUFnQztBQXFGN0MsTUFBTSxnREFBZ0Q7QUFDdEQsTUFBTSx5Q0FBeUM7QUFDL0MsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBd0I7QUFJOUIsTUFBTSx5QkFBeUIsQ0FBQyxXQUFXO0FBRTNDLE1BQU0sNEJBQTRCO0FBZ0IzQixTQUFTLGVBQWUsVUFBa0IsVUFBb0Q7QUFDbkcsTUFBSSxTQUFTLFdBQVcsR0FBRztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sVUFBVSxTQUNiLElBQUksQ0FBQyxZQUFZLFFBQVEsUUFBUSxPQUFPLE1BQU0sUUFBUSxNQUFNLE1B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
|