import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/saved-views/panel/View.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/global/icon/Home.vue"; import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutMenu as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock,createBlock as __createBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29" function _interopVNode(vnode) { if (vnode && vnode.props && 'data-v-inspector' in vnode.props) { const data = vnode.props['data-v-inspector'] delete vnode.props['data-v-inspector'] Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false }) } return vnode } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { StringEnum, throwUncoveredError } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { difference } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { Ellipsis, SquarePen, User } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { SavedViewVisibility } from "/_nuxt/lib/common/generated/gql/graphql.ts"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { useViewerSavedViewsUtils } from "/_nuxt/lib/viewer/composables/savedViews/general.ts"; import { useCollectNewSavedViewViewerData, useUpdateSavedView } from "/_nuxt/lib/viewer/composables/savedViews/management.ts"; import { useDraggableView, useDraggableViewTargetView } from "/_nuxt/lib/viewer/composables/savedViews/ui.ts"; import { useSavedViewValidationHelpers } from "/_nuxt/lib/viewer/composables/savedViews/validation.ts"; import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts"; import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts"; import { useEventBus } from "/_nuxt/composables/globals.ts"; import { useDateFormatters } from "/_nuxt/composables/dates.ts"; import { computed, ref, useId } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { ViewerEventBusKeys } from "/_nuxt/utils/globals.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerSavedViewsPanelView", props: { view: { type: Object, required: true } }, setup(__props, { expose: __expose }) { __expose(); const MenuItems = StringEnum([ "Delete", "LoadOriginalVersions", "CopyLink", "ChangeVisibility", "ReplaceView", "MoveToGroup", "SetAsHomeView", "Embed" ]); const { getTooltipProps } = useSmartTooltipDelay(); graphql(` fragment ViewerSavedViewsPanelView_SavedView on SavedView { id name description thumbnailUrl visibility isHomeView resourceIds author { id name } updatedAt permissions { canUpdate { ...FullPermissionCheckResult } } ...UseDeleteSavedView_SavedView ...UseUpdateSavedView_SavedView ...ViewerSavedViewsPanelViewEditDialog_SavedView ...UseSavedViewValidationHelpers_SavedView ...UseDraggableView_SavedView } `); const props = __props; const { resources: { response: { savedView, isFederatedView, resourceItemsIds, project } } } = useInjectedViewerState(); const { collect } = useCollectNewSavedViewViewerData(); const updateView = useUpdateSavedView(); const isLoading = useMutationLoading(); const { copyLink, applyView } = useViewerSavedViewsUtils(); const eventBus = useEventBus(); const { formattedRelativeDate, formattedFullDate } = useDateFormatters(); const { canUpdate, isOnlyVisibleToMe, canSetHomeView, isHomeView, canToggleVisibility, canMove, canOpenEditDialog, canEmbed } = useSavedViewValidationHelpers({ view: computed(() => props.view) }); const { classes: draggableClasses, on } = useDraggableView({ view: computed(() => props.view) }); const { classes: draggableTargetClasses, on: targetOn } = useDraggableViewTargetView({ view: computed(() => props.view) }); const mp = useMixpanel(); const showMenu = ref(false); const menuId = useId(); const isActive = computed(() => props.view.id === savedView.value?.id); const isOriginalVersionAlreadyLoaded = computed(() => { const viewResources = props.view.resourceIds; const currentlyLoadedResources = resourceItemsIds.value; return difference(viewResources, currentlyLoadedResources).length === 0; }); const canLoadOriginal = computed( () => { if (isOriginalVersionAlreadyLoaded.value) { return { authorized: false, message: "Original version is already loaded" }; } return { authorized: true, message: void 0 }; } ); const menuItems = computed(() => [ [ { id: MenuItems.MoveToGroup, title: "Move to group", disabled: !canMove.value?.authorized || isLoading.value, disabledTooltip: canMove.value?.errorMessage }, { id: MenuItems.ReplaceView, title: "Replace view", disabled: !canUpdate.value?.authorized || isLoading.value, disabledTooltip: canUpdate.value?.errorMessage }, { id: MenuItems.CopyLink, title: "Copy link" }, { id: MenuItems.LoadOriginalVersions, title: "Load with original model version", disabled: !canLoadOriginal.value.authorized || isLoading.value, disabledTooltip: canLoadOriginal.value.message } ], [ { id: MenuItems.SetAsHomeView, title: "Set as home view", active: !!isHomeView.value, disabled: !canSetHomeView.value.authorized, disabledTooltip: canSetHomeView.value.message }, { id: MenuItems.ChangeVisibility, title: isOnlyVisibleToMe.value ? "Make view shared" : "Make view private", disabled: !canToggleVisibility.value.authorized, disabledTooltip: canToggleVisibility.value.message }, { id: MenuItems.Embed, title: "Embed view", disabled: !canEmbed.value?.authorized, disabledTooltip: canEmbed.value?.errorMessage } ], [ { id: MenuItems.Delete, title: "Delete view...", disabled: !canUpdate.value?.authorized || isLoading.value, disabledTooltip: canUpdate.value?.errorMessage } ] ]); const wrapperClasses = computed(() => { const classParts = [ "flex items-center gap-2 p-2 w-full group rounded-md cursor-pointer relative transition-all" ]; if (isActive.value) { classParts.push("bg-highlight-2 hover:bg-highlight-3"); } else { classParts.push("hover:bg-highlight-1"); } return classParts.join(" "); }); const onActionChosen = async (item) => { switch (item.id) { case MenuItems.Delete: eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, { type: "delete", view: props.view }); break; case MenuItems.CopyLink: await copyLink({ settings: { id: props.view.id } }); mp.track("Saved View Link Copied", { viewId: props.view.id, // eslint-disable-next-line camelcase workspace_id: project.value?.workspaceId }); break; case MenuItems.LoadOriginalVersions: applyView({ id: props.view.id, loadOriginal: true }); mp.track("Saved View Original Version Loaded", { viewId: props.view.id, // eslint-disable-next-line camelcase workspace_id: project.value?.workspaceId }); break; case MenuItems.ChangeVisibility: await updateView({ view: props.view, input: { id: props.view.id, projectId: props.view.projectId, visibility: isOnlyVisibleToMe.value ? SavedViewVisibility.Public : SavedViewVisibility.AuthorOnly } }); break; case MenuItems.ReplaceView: await updateView({ view: props.view, input: { id: props.view.id, ...await collect() } }); break; case MenuItems.MoveToGroup: eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, { type: "move", view: props.view }); break; case MenuItems.SetAsHomeView: await updateView({ view: props.view, input: { id: props.view.id, projectId: props.view.projectId, isHomeView: !isHomeView.value } }); break; case MenuItems.Embed: eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEmbed, { view: props.view }); break; default: throwUncoveredError(item.id); } }; const apply = async () => { applyView({ id: props.view.id }); }; const onEdit = () => { eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, { type: "edit", view: props.view }); }; const __returned__ = { MenuItems, getTooltipProps, props, savedView, isFederatedView, resourceItemsIds, project, collect, updateView, isLoading, copyLink, applyView, eventBus, formattedRelativeDate, formattedFullDate, canUpdate, isOnlyVisibleToMe, canSetHomeView, isHomeView, canToggleVisibility, canMove, canOpenEditDialog, canEmbed, draggableClasses, on, draggableTargetClasses, targetOn, mp, showMenu, menuId, isActive, isOriginalVersionAlreadyLoaded, canLoadOriginal, menuItems, wrapperClasses, onActionChosen, apply, onEdit, get Ellipsis() { return Ellipsis; }, get SquarePen() { return SquarePen; }, get User() { return User; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, withModifiers as _withModifiers, toHandlers as _toHandlers, mergeProps as _mergeProps } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = ["view-id"]; const _hoisted_2 = { class: "flex items-center shrink-0", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:12:5" }; const _hoisted_3 = { class: "relative", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:13:7" }; const _hoisted_4 = ["src"]; const _hoisted_5 = { key: 0, class: "absolute -top-1 -left-1 bg-orange-500 w-4 h-4 flex items-center justify-center rounded-[3px]", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:19:9" }; const _hoisted_6 = { class: "flex flex-col min-w-0 grow gap-y-0.5", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:27:5" }; const _hoisted_7 = { class: "text-body-2xs font-medium text-foreground truncate grow-0", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:28:7" }; const _hoisted_8 = { class: "text-body-2xs text-foreground-3 truncate", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:31:7" }; const _hoisted_9 = { class: "w-full flex items-center gap-1", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:34:7" }; const _hoisted_10 = { class: "text-body-2xs text-foreground-3 truncate pr-1.5", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:43:9" }; const _hoisted_11 = { class: "shrink-0 opacity-0 group-hover:opacity-100", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:81:7" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_IconHome = __nuxt_component_0; const _component_FormButton = __nuxt_component_1; const _component_LayoutMenu = __nuxt_component_2; const _directive_tippy = _resolveDirective("tippy"); const _directive_keyboard_clickable = _resolveDirective("keyboard-clickable"); return _withDirectives((_openBlock(), _createElementBlock("div", _mergeProps({ class: [$setup.wrapperClasses, $setup.draggableClasses, $setup.draggableTargetClasses], "view-id": $props.view.id, draggable: "true" }, _toHandlers({ ...$setup.on, ...$setup.targetOn }, true), { onClick: $setup.apply, "data-v-inspector": "components/viewer/saved-views/panel/View.vue:4:3" }), [ _createElementVNode("div", _hoisted_2, [ _createElementVNode("div", _hoisted_3, [ _createElementVNode("img", { src: $props.view.thumbnailUrl, alt: "View screenshot", class: "w-20 h-[60px] object-cover rounded border border-outline-3 bg-foundation-page cursor-pointer", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:14:9" }, null, 8, _hoisted_4), $setup.isHomeView && !$setup.isFederatedView ? (_openBlock(), _createElementBlock("div", _hoisted_5, [ _createVNode(_component_IconHome, { class: "w-3 h-3", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:23:11" }) ])) : _createCommentVNode("v-if", true) ]) ]), _createElementVNode("div", _hoisted_6, [ _createElementVNode( "div", _hoisted_7, _toDisplayString($props.view.name), 1 /* TEXT */ ), _createElementVNode( "div", _hoisted_8, _toDisplayString($props.view.author?.name), 1 /* TEXT */ ), _createElementVNode("div", _hoisted_9, [ $setup.isOnlyVisibleToMe ? _withDirectives((_openBlock(), _createBlock( $setup["User"], { key: 0, size: 12, "stroke-width": 1.5, "absolute-stroke-width": true, class: "w-3 h-3 text-foreground-3 shrink-0", "data-v-inspector": "components/viewer/saved-views/panel/View.vue:35:9" }, null, 512 /* NEED_PATCH */ )), [ [_directive_tippy, $setup.getTooltipProps("Only visible to you")] ]) : _createCommentVNode("v-if", true), _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_10, [ _createTextVNode( _toDisplayString($setup.formattedRelativeDate($props.view.updatedAt, { capitalize: true })), 1 /* TEXT */ ) ])), [ [_directive_tippy, { content: $setup.formattedFullDate($props.view.updatedAt), delay: [700, 100], duration: [120, 150], offset: [0, 2], placement: "right" }] ]) ]) ]), _createElementVNode("div", { class: "flex gap-0.5 items-center opacity-0 w-0 group-hover:opacity-100 group-hover:w-auto", onClick: _cache[3] || (_cache[3] = _withModifiers(() => { }, ["stop"])), "data-v-inspector": "components/viewer/saved-views/panel/View.vue:57:5" }, [ _createVNode(_component_LayoutMenu, { open: $setup.showMenu, "onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showMenu = $event), items: $setup.menuItems, "menu-id": $setup.menuId, "mount-menu-on-body": "", "show-ticks": "right", size: 230, class: "shrink-0", onChosen: _cache[2] || (_cache[2] = ({ item: actionItem }) => $setup.onActionChosen(actionItem)), "data-v-inspector": "components/viewer/saved-views/panel/View.vue:61:7" }, { default: _withCtx(() => [ _createVNode(_component_FormButton, { size: "sm", color: "subtle", "icon-left": $setup.Ellipsis, "hide-text": "", name: "viewActions", class: "shrink-0", onClick: _cache[0] || (_cache[0] = ($event) => $setup.showMenu = !$setup.showMenu), "data-v-inspector": "components/viewer/saved-views/panel/View.vue:71:9" }, null, 8, ["icon-left"]) ]), _: 1 /* STABLE */ }, 8, ["open", "items", "menu-id"]), _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_11, [ _createVNode(_component_FormButton, { size: "sm", color: "subtle", "icon-left": $setup.SquarePen, "hide-text": "", name: "editView", class: "shrink-0", disabled: !$setup.canOpenEditDialog?.authorized, onClick: $setup.onEdit, "data-v-inspector": "components/viewer/saved-views/panel/View.vue:91:9" }, null, 8, ["icon-left", "disabled"]) ])), [ [ _directive_tippy, $setup.getTooltipProps( $setup.canOpenEditDialog?.authorized ? "Edit view" : $setup.canOpenEditDialog?.errorMessage ) ] ]) ]) ], 16, _hoisted_1)), [ [_directive_keyboard_clickable] ]); } _sfc_main.__hmrId = "26f14cc2"; typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main); import.meta.hot.on("file-changed", ({ file }) => { __VUE_HMR_RUNTIME__.CHANGED_FILE = file; }); import.meta.hot.accept((mod) => { if (!mod) return; const { default: updated, _rerender_only } = mod; if (_rerender_only) { __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render); } else { __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated); } }); import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper"; export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/viewer/saved-views/panel/View.vue"]]); //# sourceMappingURL=data:application/json;base64,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LDBCQUFtQiwyQkFBeUQsMEJBQW1CO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlZpZXcudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxyXG48IS0tIGVzbGludC1kaXNhYmxlIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zIC0tPlxyXG48dGVtcGxhdGU+XHJcbiAgPGRpdlxyXG4gICAgdi1rZXlib2FyZC1jbGlja2FibGVcclxuICAgIDpjbGFzcz1cIlt3cmFwcGVyQ2xhc3NlcywgZHJhZ2dhYmxlQ2xhc3NlcywgZHJhZ2dhYmxlVGFyZ2V0Q2xhc3Nlc11cIlxyXG4gICAgOnZpZXctaWQ9XCJ2aWV3LmlkXCJcclxuICAgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgdi1vbj1cInsgLi4ub24sIC4uLnRhcmdldE9uIH1cIlxyXG4gICAgQGNsaWNrPVwiYXBwbHlcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NDozXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc2hyaW5rLTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6MTI6NVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6MTM6N1wiPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgIDpzcmM9XCJ2aWV3LnRodW1ibmFpbFVybFwiXHJcbiAgICAgICAgICBhbHQ9XCJWaWV3IHNjcmVlbnNob3RcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ3LTIwIGgtWzYwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkIGJvcmRlciBib3JkZXItb3V0bGluZS0zIGJnLWZvdW5kYXRpb24tcGFnZSBjdXJzb3ItcG9pbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZToxNDo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtaWY9XCJpc0hvbWVWaWV3ICYmICFpc0ZlZGVyYXRlZFZpZXdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtdG9wLTEgLWxlZnQtMSBiZy1vcmFuZ2UtNTAwIHctNCBoLTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1bM3B4XVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZToxOTo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8SWNvbkhvbWUgY2xhc3M9XCJ3LTMgaC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjIzOjExXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG1pbi13LTAgZ3JvdyBnYXAteS0wLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6Mjc6NVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LTJ4cyBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJ1bmNhdGUgZ3Jvdy0wXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjI4OjdcIj5cclxuICAgICAgICB7eyB2aWV3Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0zIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjMxOjdcIj5cclxuICAgICAgICB7eyB2aWV3LmF1dGhvcj8ubmFtZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTozNDo3XCI+XHJcbiAgICAgICAgPFVzZXJcclxuICAgICAgICAgIHYtaWY9XCJpc09ubHlWaXNpYmxlVG9NZVwiXHJcbiAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdPbmx5IHZpc2libGUgdG8geW91JylcIlxyXG4gICAgICAgICAgOnNpemU9XCIxMlwiXHJcbiAgICAgICAgICA6c3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIDphYnNvbHV0ZS1zdHJva2Utd2lkdGg9XCJ0cnVlXCJcclxuICAgICAgICAgIGNsYXNzPVwidy0zIGgtMyB0ZXh0LWZvcmVncm91bmQtMyBzaHJpbmstMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTozNTo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtdGlwcHk9XCJ7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGZvcm1hdHRlZEZ1bGxEYXRlKHZpZXcudXBkYXRlZEF0KSxcclxuICAgICAgICAgICAgZGVsYXk6IFs3MDAsIDEwMF0sXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiBbMTIwLCAxNTBdLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAyXSxcclxuICAgICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmQtMyB0cnVuY2F0ZSBwci0xLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NDM6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZm9ybWF0dGVkUmVsYXRpdmVEYXRlKHZpZXcudXBkYXRlZEF0LCB7IGNhcGl0YWxpemU6IHRydWUgfSkgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGdhcC0wLjUgaXRlbXMtY2VudGVyIG9wYWNpdHktMCB3LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dy1hdXRvXCJcclxuICAgICAgQGNsaWNrLnN0b3AgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjU3OjVcIlxyXG4gICAgPlxyXG4gICAgICA8TGF5b3V0TWVudVxyXG4gICAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dNZW51XCJcclxuICAgICAgICA6aXRlbXM9XCJtZW51SXRlbXNcIlxyXG4gICAgICAgIDptZW51LWlkPVwibWVudUlkXCJcclxuICAgICAgICBtb3VudC1tZW51LW9uLWJvZHlcclxuICAgICAgICBzaG93LXRpY2tzPVwicmlnaHRcIlxyXG4gICAgICAgIDpzaXplPVwiMjMwXCJcclxuICAgICAgICBjbGFzcz1cInNocmluay0wXCJcclxuICAgICAgICBAY2hvc2VuPVwiKHsgaXRlbTogYWN0aW9uSXRlbSB9KSA9PiBvbkFjdGlvbkNob3NlbihhY3Rpb25JdGVtKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTo2MTo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgOmljb24tbGVmdD1cIkVsbGlwc2lzXCJcclxuICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgbmFtZT1cInZpZXdBY3Rpb25zXCJcclxuICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxyXG4gICAgICAgICAgQGNsaWNrPVwic2hvd01lbnUgPSAhc2hvd01lbnVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NzE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9MYXlvdXRNZW51PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi10aXBweT1cIlxyXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICBjYW5PcGVuRWRpdERpYWxvZz8uYXV0aG9yaXplZFxyXG4gICAgICAgICAgICAgID8gJ0VkaXQgdmlldydcclxuICAgICAgICAgICAgICA6IGNhbk9wZW5FZGl0RGlhbG9nPy5lcnJvck1lc3NhZ2VcclxuICAgICAgICAgIClcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwic2hyaW5rLTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjgxOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICA6aWNvbi1sZWZ0PVwiU3F1YXJlUGVuXCJcclxuICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgbmFtZT1cImVkaXRWaWV3XCJcclxuICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxyXG4gICAgICAgICAgOmRpc2FibGVkPVwiIWNhbk9wZW5FZGl0RGlhbG9nPy5hdXRob3JpemVkXCJcclxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTo5MTo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQge1xyXG4gIFN0cmluZ0VudW0sXHJcbiAgdGhyb3dVbmNvdmVyZWRFcnJvcixcclxuICB0eXBlIE9wdGlvbmFsLFxyXG4gIHR5cGUgU3RyaW5nRW51bVZhbHVlc1xyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXRNZW51SXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHVzZU11dGF0aW9uTG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gtZXMnXHJcbmltcG9ydCB7IEVsbGlwc2lzLCBTcXVhcmVQZW4sIFVzZXIgfSBmcm9tICdsdWNpZGUtdnVlLW5leHQnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHtcclxuICBTYXZlZFZpZXdWaXNpYmlsaXR5LFxyXG4gIHR5cGUgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdGcmFnbWVudFxyXG59IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgdXNlVmlld2VyU2F2ZWRWaWV3c1V0aWxzIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NhdmVkVmlld3MvZ2VuZXJhbCdcclxuaW1wb3J0IHtcclxuICB1c2VDb2xsZWN0TmV3U2F2ZWRWaWV3Vmlld2VyRGF0YSxcclxuICB1c2VVcGRhdGVTYXZlZFZpZXdcclxufSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9tYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIHVzZURyYWdnYWJsZVZpZXcsXHJcbiAgdXNlRHJhZ2dhYmxlVmlld1RhcmdldFZpZXdcclxufSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy91aSdcclxuaW1wb3J0IHsgdXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnMgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy92YWxpZGF0aW9uJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5cclxuY29uc3QgTWVudUl0ZW1zID0gU3RyaW5nRW51bShbXHJcbiAgJ0RlbGV0ZScsXHJcbiAgJ0xvYWRPcmlnaW5hbFZlcnNpb25zJyxcclxuICAnQ29weUxpbmsnLFxyXG4gICdDaGFuZ2VWaXNpYmlsaXR5JyxcclxuICAnUmVwbGFjZVZpZXcnLFxyXG4gICdNb3ZlVG9Hcm91cCcsXHJcbiAgJ1NldEFzSG9tZVZpZXcnLFxyXG4gICdFbWJlZCdcclxuXSlcclxudHlwZSBNZW51SXRlbXMgPSBTdHJpbmdFbnVtVmFsdWVzPHR5cGVvZiBNZW51SXRlbXM+XHJcblxyXG5jb25zdCB7IGdldFRvb2x0aXBQcm9wcyB9ID0gdXNlU21hcnRUb29sdGlwRGVsYXkoKVxyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcclxuICAgIGlkXHJcbiAgICBuYW1lXHJcbiAgICBkZXNjcmlwdGlvblxyXG4gICAgdGh1bWJuYWlsVXJsXHJcbiAgICB2aXNpYmlsaXR5XHJcbiAgICBpc0hvbWVWaWV3XHJcbiAgICByZXNvdXJjZUlkc1xyXG4gICAgYXV0aG9yIHtcclxuICAgICAgaWRcclxuICAgICAgbmFtZVxyXG4gICAgfVxyXG4gICAgdXBkYXRlZEF0XHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhblVwZGF0ZSB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3XHJcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XHJcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3RWRpdERpYWxvZ19TYXZlZFZpZXdcclxuICAgIC4uLlVzZVNhdmVkVmlld1ZhbGlkYXRpb25IZWxwZXJzX1NhdmVkVmlld1xyXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXdcclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICB2aWV3OiBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3X1NhdmVkVmlld0ZyYWdtZW50XHJcbn0+KClcclxuXHJcbmNvbnN0IHtcclxuICByZXNvdXJjZXM6IHtcclxuICAgIHJlc3BvbnNlOiB7IHNhdmVkVmlldywgaXNGZWRlcmF0ZWRWaWV3LCByZXNvdXJjZUl0ZW1zSWRzLCBwcm9qZWN0IH1cclxuICB9XHJcbn0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgeyBjb2xsZWN0IH0gPSB1c2VDb2xsZWN0TmV3U2F2ZWRWaWV3Vmlld2VyRGF0YSgpXHJcbmNvbnN0IHVwZGF0ZVZpZXcgPSB1c2VVcGRhdGVTYXZlZFZpZXcoKVxyXG5jb25zdCBpc0xvYWRpbmcgPSB1c2VNdXRhdGlvbkxvYWRpbmcoKVxyXG5jb25zdCB7IGNvcHlMaW5rLCBhcHBseVZpZXcgfSA9IHVzZVZpZXdlclNhdmVkVmlld3NVdGlscygpXHJcbmNvbnN0IGV2ZW50QnVzID0gdXNlRXZlbnRCdXMoKVxyXG5jb25zdCB7IGZvcm1hdHRlZFJlbGF0aXZlRGF0ZSwgZm9ybWF0dGVkRnVsbERhdGUgfSA9IHVzZURhdGVGb3JtYXR0ZXJzKClcclxuY29uc3Qge1xyXG4gIGNhblVwZGF0ZSxcclxuICBpc09ubHlWaXNpYmxlVG9NZSxcclxuICBjYW5TZXRIb21lVmlldyxcclxuICBpc0hvbWVWaWV3LFxyXG4gIGNhblRvZ2dsZVZpc2liaWxpdHksXHJcbiAgY2FuTW92ZSxcclxuICBjYW5PcGVuRWRpdERpYWxvZyxcclxuICBjYW5FbWJlZFxyXG59ID0gdXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnMoe1xyXG4gIHZpZXc6IGNvbXB1dGVkKCgpID0+IHByb3BzLnZpZXcpXHJcbn0pXHJcbmNvbnN0IHsgY2xhc3NlczogZHJhZ2dhYmxlQ2xhc3Nlcywgb24gfSA9IHVzZURyYWdnYWJsZVZpZXcoe1xyXG4gIHZpZXc6IGNvbXB1dGVkKCgpID0+IHByb3BzLnZpZXcpXHJcbn0pXHJcbmNvbnN0IHsgY2xhc3NlczogZHJhZ2dhYmxlVGFyZ2V0Q2xhc3Nlcywgb246IHRhcmdldE9uIH0gPSB1c2VEcmFnZ2FibGVWaWV3VGFyZ2V0Vmlldyh7XHJcbiAgdmlldzogY29tcHV0ZWQoKCkgPT4gcHJvcHMudmlldylcclxufSlcclxuXHJcbmNvbnN0IG1wID0gdXNlTWl4cGFuZWwoKVxyXG5cclxuY29uc3Qgc2hvd01lbnUgPSByZWYoZmFsc2UpXHJcbmNvbnN0IG1lbnVJZCA9IHVzZUlkKClcclxuXHJcbmNvbnN0IGlzQWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMudmlldy5pZCA9PT0gc2F2ZWRWaWV3LnZhbHVlPy5pZClcclxuXHJcbmNvbnN0IGlzT3JpZ2luYWxWZXJzaW9uQWxyZWFkeUxvYWRlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCB2aWV3UmVzb3VyY2VzID0gcHJvcHMudmlldy5yZXNvdXJjZUlkc1xyXG4gIGNvbnN0IGN1cnJlbnRseUxvYWRlZFJlc291cmNlcyA9IHJlc291cmNlSXRlbXNJZHMudmFsdWVcclxuICByZXR1cm4gZGlmZmVyZW5jZSh2aWV3UmVzb3VyY2VzLCBjdXJyZW50bHlMb2FkZWRSZXNvdXJjZXMpLmxlbmd0aCA9PT0gMFxyXG59KVxyXG5cclxuY29uc3QgY2FuTG9hZE9yaWdpbmFsID0gY29tcHV0ZWQoXHJcbiAgKCk6IHsgYXV0aG9yaXplZDogYm9vbGVhbjsgbWVzc2FnZTogT3B0aW9uYWw8c3RyaW5nPiB9ID0+IHtcclxuICAgIGlmIChpc09yaWdpbmFsVmVyc2lvbkFscmVhZHlMb2FkZWQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHsgYXV0aG9yaXplZDogZmFsc2UsIG1lc3NhZ2U6ICdPcmlnaW5hbCB2ZXJzaW9uIGlzIGFscmVhZHkgbG9hZGVkJyB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgYXV0aG9yaXplZDogdHJ1ZSwgbWVzc2FnZTogdW5kZWZpbmVkIH1cclxuICB9XHJcbilcclxuXHJcbmNvbnN0IG1lbnVJdGVtcyA9IGNvbXB1dGVkKCgpOiBMYXlvdXRNZW51SXRlbTxNZW51SXRlbXM+W11bXSA9PiBbXHJcbiAgW1xyXG4gICAge1xyXG4gICAgICBpZDogTWVudUl0ZW1zLk1vdmVUb0dyb3VwLFxyXG4gICAgICB0aXRsZTogJ01vdmUgdG8gZ3JvdXAnLFxyXG4gICAgICBkaXNhYmxlZDogIWNhbk1vdmUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhbk1vdmUudmFsdWU/LmVycm9yTWVzc2FnZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5SZXBsYWNlVmlldyxcclxuICAgICAgdGl0bGU6ICdSZXBsYWNlIHZpZXcnLFxyXG4gICAgICBkaXNhYmxlZDogIWNhblVwZGF0ZS52YWx1ZT8uYXV0aG9yaXplZCB8fCBpc0xvYWRpbmcudmFsdWUsXHJcbiAgICAgIGRpc2FibGVkVG9vbHRpcDogY2FuVXBkYXRlLnZhbHVlPy5lcnJvck1lc3NhZ2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuQ29weUxpbmssXHJcbiAgICAgIHRpdGxlOiAnQ29weSBsaW5rJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5Mb2FkT3JpZ2luYWxWZXJzaW9ucyxcclxuICAgICAgdGl0bGU6ICdMb2FkIHdpdGggb3JpZ2luYWwgbW9kZWwgdmVyc2lvbicsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuTG9hZE9yaWdpbmFsLnZhbHVlLmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhbkxvYWRPcmlnaW5hbC52YWx1ZS5tZXNzYWdlXHJcbiAgICB9XHJcbiAgXSxcclxuICBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuU2V0QXNIb21lVmlldyxcclxuICAgICAgdGl0bGU6ICdTZXQgYXMgaG9tZSB2aWV3JyxcclxuICAgICAgYWN0aXZlOiAhIWlzSG9tZVZpZXcudmFsdWUsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuU2V0SG9tZVZpZXcudmFsdWUuYXV0aG9yaXplZCxcclxuICAgICAgZGlzYWJsZWRUb29sdGlwOiBjYW5TZXRIb21lVmlldy52YWx1ZS5tZXNzYWdlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogTWVudUl0ZW1zLkNoYW5nZVZpc2liaWxpdHksXHJcbiAgICAgIHRpdGxlOiBpc09ubHlWaXNpYmxlVG9NZS52YWx1ZSA/ICdNYWtlIHZpZXcgc2hhcmVkJyA6ICdNYWtlIHZpZXcgcHJpdmF0ZScsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuVG9nZ2xlVmlzaWJpbGl0eS52YWx1ZS5hdXRob3JpemVkLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhblRvZ2dsZVZpc2liaWxpdHkudmFsdWUubWVzc2FnZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5FbWJlZCxcclxuICAgICAgdGl0bGU6ICdFbWJlZCB2aWV3JyxcclxuICAgICAgZGlzYWJsZWQ6ICFjYW5FbWJlZC52YWx1ZT8uYXV0aG9yaXplZCxcclxuICAgICAgZGlzYWJsZWRUb29sdGlwOiBjYW5FbWJlZC52YWx1ZT8uZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgXSxcclxuICBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuRGVsZXRlLFxyXG4gICAgICB0aXRsZTogJ0RlbGV0ZSB2aWV3Li4uJyxcclxuICAgICAgZGlzYWJsZWQ6ICFjYW5VcGRhdGUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhblVwZGF0ZS52YWx1ZT8uZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgXVxyXG5dKVxyXG5cclxuY29uc3Qgd3JhcHBlckNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgY2xhc3NQYXJ0cyA9IFtcclxuICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgdy1mdWxsIGdyb3VwIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgcmVsYXRpdmUgdHJhbnNpdGlvbi1hbGwnXHJcbiAgXVxyXG5cclxuICBpZiAoaXNBY3RpdmUudmFsdWUpIHtcclxuICAgIGNsYXNzUGFydHMucHVzaCgnYmctaGlnaGxpZ2h0LTIgaG92ZXI6YmctaGlnaGxpZ2h0LTMnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjbGFzc1BhcnRzLnB1c2goJ2hvdmVyOmJnLWhpZ2hsaWdodC0xJylcclxuICB9XHJcblxyXG4gIHJldHVybiBjbGFzc1BhcnRzLmpvaW4oJyAnKVxyXG59KVxyXG5cclxuY29uc3Qgb25BY3Rpb25DaG9zZW4gPSBhc3luYyAoaXRlbTogTGF5b3V0TWVudUl0ZW08TWVudUl0ZW1zPikgPT4ge1xyXG4gIHN3aXRjaCAoaXRlbS5pZCkge1xyXG4gICAgY2FzZSBNZW51SXRlbXMuRGVsZXRlOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRWRpdCwge1xyXG4gICAgICAgIHR5cGU6ICdkZWxldGUnLFxyXG4gICAgICAgIHZpZXc6IHByb3BzLnZpZXdcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkNvcHlMaW5rOlxyXG4gICAgICBhd2FpdCBjb3B5TGluayh7XHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIGlkOiBwcm9wcy52aWV3LmlkXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBtcC50cmFjaygnU2F2ZWQgVmlldyBMaW5rIENvcGllZCcsIHtcclxuICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkxvYWRPcmlnaW5hbFZlcnNpb25zOlxyXG4gICAgICBhcHBseVZpZXcoe1xyXG4gICAgICAgIGlkOiBwcm9wcy52aWV3LmlkLFxyXG4gICAgICAgIGxvYWRPcmlnaW5hbDogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICBtcC50cmFjaygnU2F2ZWQgVmlldyBPcmlnaW5hbCBWZXJzaW9uIExvYWRlZCcsIHtcclxuICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkNoYW5nZVZpc2liaWxpdHk6XHJcbiAgICAgIGF3YWl0IHVwZGF0ZVZpZXcoe1xyXG4gICAgICAgIHZpZXc6IHByb3BzLnZpZXcsXHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBwcm9wcy52aWV3LmlkLFxyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy52aWV3LnByb2plY3RJZCxcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGlzT25seVZpc2libGVUb01lLnZhbHVlXHJcbiAgICAgICAgICAgID8gU2F2ZWRWaWV3VmlzaWJpbGl0eS5QdWJsaWNcclxuICAgICAgICAgICAgOiBTYXZlZFZpZXdWaXNpYmlsaXR5LkF1dGhvck9ubHlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIE1lbnVJdGVtcy5SZXBsYWNlVmlldzpcclxuICAgICAgLy8gUmVwbGFjZSB2aWV3IHcvIGFjdGl2ZSBvbmVcclxuICAgICAgYXdhaXQgdXBkYXRlVmlldyh7XHJcbiAgICAgICAgdmlldzogcHJvcHMudmlldyxcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgICAuLi4oYXdhaXQgY29sbGVjdCgpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLk1vdmVUb0dyb3VwOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRWRpdCwge1xyXG4gICAgICAgIHR5cGU6ICdtb3ZlJyxcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIE1lbnVJdGVtcy5TZXRBc0hvbWVWaWV3OlxyXG4gICAgICBhd2FpdCB1cGRhdGVWaWV3KHtcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3LFxyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogcHJvcHMudmlldy5pZCxcclxuICAgICAgICAgIHByb2plY3RJZDogcHJvcHMudmlldy5wcm9qZWN0SWQsXHJcbiAgICAgICAgICBpc0hvbWVWaWV3OiAhaXNIb21lVmlldy52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkVtYmVkOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRW1iZWQsIHtcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvd1VuY292ZXJlZEVycm9yKGl0ZW0uaWQpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBhcHBseSA9IGFzeW5jICgpID0+IHtcclxuICBhcHBseVZpZXcoe1xyXG4gICAgaWQ6IHByb3BzLnZpZXcuaWRcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBvbkVkaXQgPSAoKSA9PiB7XHJcbiAgZXZlbnRCdXMuZW1pdChWaWV3ZXJFdmVudEJ1c0tleXMuTWFya1NhdmVkVmlld0ZvckVkaXQsIHtcclxuICAgIHR5cGU6ICdlZGl0JyxcclxuICAgIHZpZXc6IHByb3BzLnZpZXdcclxuICB9KVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWUifQ==