import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/form/select/Projects.vue");import { FormSelectBase as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementBlock as __createElementBlock,createElementVNode as __createElementVNode,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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...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 { Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { useFormSelectChildInternals } from "/_nuxt/lib/form/composables/select.ts"; import { useApolloClient } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { searchProjectsQuery } from "/_nuxt/lib/form/graphql/queries.ts"; import { useActiveUser } from "/_nuxt/lib/auth/composables/activeUser.ts"; import { ref, useId, toRefs, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "FormSelectProjects", props: { /** * Whether to allow selecting multiple items */ multiple: { type: Boolean, default: false }, modelValue: { type: [Object, Array], default: void 0 }, /** * Search placeholder text */ searchPlaceholder: { type: String, default: "Search projects" }, selectorPlaceholder: { type: String, default: "" }, /** * Label is required at the very least for screen-readers */ label: { type: String, required: true }, /** * Whether to show the label visually */ showLabel: { type: Boolean, default: false }, /** * Whether to show the optional text */ showOptional: { type: Boolean, default: false }, name: { type: String, default: void 0 }, /** * Whether to only return owned projects from server */ ownedOnly: { type: Boolean, default: false }, /** * Whether to only return projects within a specific workspace */ workspaceId: { type: String }, tooltipText: { type: String } }, emits: ["update:modelValue"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); graphql(` fragment FormSelectProjects_Project on Project { id name } `); const emit = __emit; const props = __props; const elementToWatchForChanges = ref(null); const itemContainer = ref(null); const labelId = useId(); const buttonId = useId(); const { selectedValue, hiddenSelectedItemCount, isArrayValue, isMultiItemArrayValue } = useFormSelectChildInternals({ props: toRefs(props), emit, dynamicVisibility: { elementToWatchForChanges, itemContainer } }); const apollo = useApolloClient().client; const { isLoggedIn } = useActiveUser(); const invokeSearch = async (search) => { if (!isLoggedIn.value) return []; const results = await apollo.query({ query: searchProjectsQuery, variables: computed(() => ({ search: search.trim().length ? search : null, onlyWithRoles: props.ownedOnly ? [Roles.Stream.Owner] : null, ...props.workspaceId && { workspaceId: props.workspaceId } })).value }); return results.data.activeUser?.projects.items || []; }; const __returned__ = { emit, props, elementToWatchForChanges, itemContainer, labelId, buttonId, selectedValue, hiddenSelectedItemCount, isArrayValue, isMultiItemArrayValue, apollo, isLoggedIn, invokeSearch }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, resolveComponent as _resolveComponent, withCtx as _withCtx, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { key: 0, ref: "elementToWatchForChanges", class: "flex items-center space-x-0.5", "data-v-inspector": "components/form/select/Projects.vue:27:9" }; const _hoisted_2 = { ref: "itemContainer", class: "flex flex-wrap overflow-hidden space-x-0.5 h-6", "data-v-inspector": "components/form/select/Projects.vue:28:11" }; const _hoisted_3 = { key: 0, class: "text-foreground-2 normal", "data-v-inspector": "components/form/select/Projects.vue:36:11" }; const _hoisted_4 = { key: 1, class: "flex items-center", "data-v-inspector": "components/form/select/Projects.vue:42:9" }; const _hoisted_5 = { class: "truncate text-foreground", "data-v-inspector": "components/form/select/Projects.vue:43:11" }; const _hoisted_6 = { class: "flex items-center", "data-v-inspector": "components/form/select/Projects.vue:50:7" }; const _hoisted_7 = { class: "truncate", "data-v-inspector": "components/form/select/Projects.vue:51:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_FormSelectBase = __nuxt_component_0; return _openBlock(), _createBlock(_component_FormSelectBase, { modelValue: $setup.selectedValue, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.selectedValue = $event), multiple: $props.multiple, search: true, "search-placeholder": $props.searchPlaceholder, "get-search-results": $setup.invokeSearch, "show-optional": $props.showOptional, label: $props.label, "show-label": $props.showLabel, name: $props.name || "projects", "label-id": $setup.labelId, "button-id": $setup.buttonId, "tooltip-text": $props.tooltipText, by: "id", "data-v-inspector": "components/form/select/Projects.vue:2:3" }, { "nothing-selected": _withCtx(() => [ $props.selectorPlaceholder ? (_openBlock(), _createElementBlock( _Fragment, { key: 0 }, [ _createTextVNode( _toDisplayString($props.selectorPlaceholder), 1 /* TEXT */ ) ], 64 /* STABLE_FRAGMENT */ )) : (_openBlock(), _createElementBlock( _Fragment, { key: 1 }, [ _createTextVNode( _toDisplayString($props.multiple ? "Select projects" : "Select a project"), 1 /* TEXT */ ) ], 64 /* STABLE_FRAGMENT */ )) ]), "something-selected": _withCtx(({ value }) => [ $setup.isMultiItemArrayValue(value) ? (_openBlock(), _createElementBlock( "div", _hoisted_1, [ _createElementVNode( "div", _hoisted_2, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList(value, (item, i) => { return _openBlock(), _createElementBlock( "div", { key: item.id, class: "text-foreground", "data-v-inspector": "components/form/select/Projects.vue:32:13" }, _toDisplayString(item.name + (i < value.length - 1 ? ", " : "")), 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ], 512 /* NEED_PATCH */ ), $setup.hiddenSelectedItemCount > 0 ? (_openBlock(), _createElementBlock( "div", _hoisted_3, " +" + _toDisplayString($setup.hiddenSelectedItemCount), 1 /* TEXT */ )) : _createCommentVNode("v-if", true) ], 512 /* NEED_PATCH */ )) : (_openBlock(), _createElementBlock("div", _hoisted_4, [ _createElementVNode( "span", _hoisted_5, _toDisplayString(($setup.isArrayValue(value) ? value[0] : value).name), 1 /* TEXT */ ) ])) ]), option: _withCtx(({ item }) => [ _createElementVNode("div", _hoisted_6, [ _createElementVNode( "span", _hoisted_7, _toDisplayString(item.name), 1 /* TEXT */ ) ]) ]), _: 1 /* STABLE */ }, 8, ["modelValue", "multiple", "search-placeholder", "show-optional", "label", "show-label", "name", "label-id", "button-id", "tooltip-text"]); } _sfc_main.__hmrId = "13d643c8"; 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/form/select/Projects.vue"]]); //# sourceMappingURL=data:application/json;base64,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T0FBSyxDQUFqQixNQUFNLE1BQUM7dUNBQXBCO0FBQUEsb0JBRU07QUFBQTtBQUFBLHNCQUYyQixLQUFLLEtBQUs7QUFBQSxzQkFBSSxPQUFNO0FBQUEsc0JBQWtCLG9CQUFpQjtBQUFBO3FDQUNuRixLQUFLLFFBQVEsSUFBSSxNQUFNLFNBQU07QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7VUFHekIsaUNBQXVCLG1CQUFsQztBQUFBLFlBRU07QUFBQSxZQUZOO0FBQUEsWUFBc0ksT0FDbkksaUJBQUcsOEJBQXVCO0FBQUE7QUFBQTtBQUFBOzs7OzBCQUsvQixvQkFJTSxPQUpOLFlBSU07QUFBQSxRQUhKO0FBQUEsVUFFTztBQUFBLFVBRlA7QUFBQSxVQUVPLGtCQURELG9CQUFhLEtBQUssSUFBSSxNQUFLLEtBQU0sT0FBTyxJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0lBSzdDLFFBQU0sU0FDZixDQUVNLEVBSGEsS0FBSTtBQUFBLE1BQ3ZCLG9CQUVNLE9BRk4sWUFFTTtBQUFBLFFBREo7QUFBQSxVQUF5RztBQUFBLFVBQXpHO0FBQUEsVUFBeUcsaUJBQW5CLEtBQUssSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJQcm9qZWN0cy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxGb3JtU2VsZWN0QmFzZVxyXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxyXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxyXG4gICAgOnNlYXJjaD1cInRydWVcIlxyXG4gICAgOnNlYXJjaC1wbGFjZWhvbGRlcj1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgIDpnZXQtc2VhcmNoLXJlc3VsdHM9XCJpbnZva2VTZWFyY2hcIlxyXG4gICAgOnNob3ctb3B0aW9uYWw9XCJzaG93T3B0aW9uYWxcIlxyXG4gICAgOmxhYmVsPVwibGFiZWxcIlxyXG4gICAgOnNob3ctbGFiZWw9XCJzaG93TGFiZWxcIlxyXG4gICAgOm5hbWU9XCJuYW1lIHx8ICdwcm9qZWN0cydcIlxyXG4gICAgOmxhYmVsLWlkPVwibGFiZWxJZFwiXHJcbiAgICA6YnV0dG9uLWlkPVwiYnV0dG9uSWRcIlxyXG4gICAgOnRvb2x0aXAtdGV4dD1cInRvb2x0aXBUZXh0XCJcclxuICAgIGJ5PVwiaWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6MjozXCJcclxuICA+XHJcbiAgICA8dGVtcGxhdGUgI25vdGhpbmctc2VsZWN0ZWQ+XHJcbiAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwic2VsZWN0b3JQbGFjZWhvbGRlclwiPlxyXG4gICAgICAgIHt7IHNlbGVjdG9yUGxhY2Vob2xkZXIgfX1cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICB7eyBtdWx0aXBsZSA/ICdTZWxlY3QgcHJvamVjdHMnIDogJ1NlbGVjdCBhIHByb2plY3QnIH19XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPHRlbXBsYXRlICNzb21ldGhpbmctc2VsZWN0ZWQ9XCJ7IHZhbHVlIH1cIj5cclxuICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpc011bHRpSXRlbUFycmF5VmFsdWUodmFsdWUpXCI+XHJcbiAgICAgICAgPGRpdiByZWY9XCJlbGVtZW50VG9XYXRjaEZvckNoYW5nZXNcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMC41XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvZm9ybS9zZWxlY3QvUHJvamVjdHMudnVlOjI3OjlcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgcmVmPVwiaXRlbUNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgb3ZlcmZsb3ctaGlkZGVuIHNwYWNlLXgtMC41IGgtNlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2Zvcm0vc2VsZWN0L1Byb2plY3RzLnZ1ZToyODoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoaXRlbSwgaSkgaW4gdmFsdWVcIiA6a2V5PVwiaXRlbS5pZFwiIGNsYXNzPVwidGV4dC1mb3JlZ3JvdW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvZm9ybS9zZWxlY3QvUHJvamVjdHMudnVlOjMyOjEzXCI+XHJcbiAgICAgICAgICAgICAge3sgaXRlbS5uYW1lICsgKGkgPCB2YWx1ZS5sZW5ndGggLSAxID8gJywgJyA6ICcnKSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiB2LWlmPVwiaGlkZGVuU2VsZWN0ZWRJdGVtQ291bnQgPiAwXCIgY2xhc3M9XCJ0ZXh0LWZvcmVncm91bmQtMiBub3JtYWxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6MzY6MTFcIj5cclxuICAgICAgICAgICAgK3t7IGhpZGRlblNlbGVjdGVkSXRlbUNvdW50IH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6NDI6OVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZSB0ZXh0LWZvcmVncm91bmRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6NDM6MTFcIj5cclxuICAgICAgICAgICAge3sgKGlzQXJyYXlWYWx1ZSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlKS5uYW1lIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPHRlbXBsYXRlICNvcHRpb249XCJ7IGl0ZW0gfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6NTA6N1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWU6NTE6OVwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gIDwvRm9ybVNlbGVjdEJhc2U+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgUHJvcFR5cGUgfSBmcm9tICd2dWUnXHJcbmltcG9ydCB7IFJvbGVzIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgZ3JhcGhxbCB9IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHR5cGUgeyBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdEZyYWdtZW50IH0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZUZvcm1TZWxlY3RDaGlsZEludGVybmFscyB9IGZyb20gJ35+L2xpYi9mb3JtL2NvbXBvc2FibGVzL3NlbGVjdCdcclxuaW1wb3J0IHsgdXNlQXBvbGxvQ2xpZW50IH0gZnJvbSAnQHZ1ZS9hcG9sbG8tY29tcG9zYWJsZSdcclxuaW1wb3J0IHsgc2VhcmNoUHJvamVjdHNRdWVyeSB9IGZyb20gJ35+L2xpYi9mb3JtL2dyYXBocWwvcXVlcmllcydcclxuaW1wb3J0IHsgdXNlQWN0aXZlVXNlciB9IGZyb20gJ35+L2xpYi9hdXRoL2NvbXBvc2FibGVzL2FjdGl2ZVVzZXInXHJcblxyXG50eXBlIFZhbHVlVHlwZSA9XHJcbiAgfCBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdEZyYWdtZW50XHJcbiAgfCBGb3JtU2VsZWN0UHJvamVjdHNfUHJvamVjdEZyYWdtZW50W11cclxuICB8IHVuZGVmaW5lZFxyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgRm9ybVNlbGVjdFByb2plY3RzX1Byb2plY3Qgb24gUHJvamVjdCB7XHJcbiAgICBpZFxyXG4gICAgbmFtZVxyXG4gIH1cclxuYClcclxuXHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGU6ICd1cGRhdGU6bW9kZWxWYWx1ZScsIHY6IFZhbHVlVHlwZSk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7XHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgaXRlbXNcclxuICAgKi9cclxuICBtdWx0aXBsZToge1xyXG4gICAgdHlwZTogQm9vbGVhbixcclxuICAgIGRlZmF1bHQ6IGZhbHNlXHJcbiAgfSxcclxuICBtb2RlbFZhbHVlOiB7XHJcbiAgICB0eXBlOiBbT2JqZWN0LCBBcnJheV0gYXMgUHJvcFR5cGU8VmFsdWVUeXBlPixcclxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoIHBsYWNlaG9sZGVyIHRleHRcclxuICAgKi9cclxuICBzZWFyY2hQbGFjZWhvbGRlcjoge1xyXG4gICAgdHlwZTogU3RyaW5nLFxyXG4gICAgZGVmYXVsdDogJ1NlYXJjaCBwcm9qZWN0cydcclxuICB9LFxyXG4gIHNlbGVjdG9yUGxhY2Vob2xkZXI6IHtcclxuICAgIHR5cGU6IFN0cmluZyBhcyBQcm9wVHlwZTxPcHRpb25hbDxzdHJpbmc+PixcclxuICAgIGRlZmF1bHQ6ICcnXHJcbiAgfSxcclxuICAvKipcclxuICAgKiBMYWJlbCBpcyByZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdCBmb3Igc2NyZWVuLXJlYWRlcnNcclxuICAgKi9cclxuICBsYWJlbDoge1xyXG4gICAgdHlwZTogU3RyaW5nLFxyXG4gICAgcmVxdWlyZWQ6IHRydWVcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgbGFiZWwgdmlzdWFsbHlcclxuICAgKi9cclxuICBzaG93TGFiZWw6IHtcclxuICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICBkZWZhdWx0OiBmYWxzZVxyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBzaG93IHRoZSBvcHRpb25hbCB0ZXh0XHJcbiAgICovXHJcbiAgc2hvd09wdGlvbmFsOiB7XHJcbiAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgZGVmYXVsdDogZmFsc2VcclxuICB9LFxyXG4gIG5hbWU6IHtcclxuICAgIHR5cGU6IFN0cmluZyBhcyBQcm9wVHlwZTxPcHRpb25hbDxzdHJpbmc+PixcclxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBvbmx5IHJldHVybiBvd25lZCBwcm9qZWN0cyBmcm9tIHNlcnZlclxyXG4gICAqL1xyXG4gIG93bmVkT25seToge1xyXG4gICAgdHlwZTogQm9vbGVhbixcclxuICAgIGRlZmF1bHQ6IGZhbHNlXHJcbiAgfSxcclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIG9ubHkgcmV0dXJuIHByb2plY3RzIHdpdGhpbiBhIHNwZWNpZmljIHdvcmtzcGFjZVxyXG4gICAqL1xyXG4gIHdvcmtzcGFjZUlkOiB7XHJcbiAgICB0eXBlOiBTdHJpbmcgYXMgUHJvcFR5cGU8T3B0aW9uYWw8c3RyaW5nPj5cclxuICB9LFxyXG4gIHRvb2x0aXBUZXh0OiB7XHJcbiAgICB0eXBlOiBTdHJpbmcgYXMgUHJvcFR5cGU8T3B0aW9uYWw8c3RyaW5nPj5cclxuICB9XHJcbn0pXHJcblxyXG5jb25zdCBlbGVtZW50VG9XYXRjaEZvckNoYW5nZXMgPSByZWYobnVsbCBhcyBOdWxsYWJsZTxIVE1MRWxlbWVudD4pXHJcbmNvbnN0IGl0ZW1Db250YWluZXIgPSByZWYobnVsbCBhcyBOdWxsYWJsZTxIVE1MRWxlbWVudD4pXHJcbmNvbnN0IGxhYmVsSWQgPSB1c2VJZCgpXHJcbmNvbnN0IGJ1dHRvbklkID0gdXNlSWQoKVxyXG5cclxuY29uc3QgeyBzZWxlY3RlZFZhbHVlLCBoaWRkZW5TZWxlY3RlZEl0ZW1Db3VudCwgaXNBcnJheVZhbHVlLCBpc011bHRpSXRlbUFycmF5VmFsdWUgfSA9XHJcbiAgdXNlRm9ybVNlbGVjdENoaWxkSW50ZXJuYWxzPEZvcm1TZWxlY3RQcm9qZWN0c19Qcm9qZWN0RnJhZ21lbnQ+KHtcclxuICAgIHByb3BzOiB0b1JlZnMocHJvcHMpLFxyXG4gICAgZW1pdCxcclxuICAgIGR5bmFtaWNWaXNpYmlsaXR5OiB7IGVsZW1lbnRUb1dhdGNoRm9yQ2hhbmdlcywgaXRlbUNvbnRhaW5lciB9XHJcbiAgfSlcclxuXHJcbmNvbnN0IGFwb2xsbyA9IHVzZUFwb2xsb0NsaWVudCgpLmNsaWVudFxyXG5jb25zdCB7IGlzTG9nZ2VkSW4gfSA9IHVzZUFjdGl2ZVVzZXIoKVxyXG5cclxuY29uc3QgaW52b2tlU2VhcmNoID0gYXN5bmMgKHNlYXJjaDogc3RyaW5nKSA9PiB7XHJcbiAgaWYgKCFpc0xvZ2dlZEluLnZhbHVlKSByZXR1cm4gW11cclxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgYXBvbGxvLnF1ZXJ5KHtcclxuICAgIHF1ZXJ5OiBzZWFyY2hQcm9qZWN0c1F1ZXJ5LFxyXG4gICAgdmFyaWFibGVzOiBjb21wdXRlZCgoKSA9PiAoe1xyXG4gICAgICBzZWFyY2g6IHNlYXJjaC50cmltKCkubGVuZ3RoID8gc2VhcmNoIDogbnVsbCxcclxuICAgICAgb25seVdpdGhSb2xlczogcHJvcHMub3duZWRPbmx5ID8gW1JvbGVzLlN0cmVhbS5Pd25lcl0gOiBudWxsLFxyXG4gICAgICAuLi4ocHJvcHMud29ya3NwYWNlSWQgJiYgeyB3b3Jrc3BhY2VJZDogcHJvcHMud29ya3NwYWNlSWQgfSlcclxuICAgIH0pKS52YWx1ZVxyXG4gIH0pXHJcbiAgcmV0dXJuIHJlc3VsdHMuZGF0YS5hY3RpdmVVc2VyPy5wcm9qZWN0cy5pdGVtcyB8fCBbXVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9mb3JtL3NlbGVjdC9Qcm9qZWN0cy52dWUifQ==