Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000199
T

259 lines
27 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/project/page/models/ListView.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/project/page/models/StructureItem.vue";
import { default as __nuxt_component_1 } from "/_nuxt/components/form/ButtonSecondaryViewAll.vue";
import { default as __nuxt_component_2 } from "/_nuxt/components/common/EmptySearchState.vue";
import { default as __nuxt_component_3 } from "/_nuxt/components/project/CardImportFileArea.vue";
import { InfiniteLoading as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_5 } from "/_nuxt/components/project/models/Add.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createElementBlock as __createElementBlock,createVNode as __createVNode,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 _createVNode(...args) { return _interopVNode(__createVNode(...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 { useQuery, useQueryLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import {
projectModelsTreeTopLevelQuery,
projectModelsTreeTopLevelPaginationQuery
} from "/_nuxt/lib/projects/graphql/queries.ts";
import { useEvictProjectModelFields } from "/_nuxt/lib/projects/composables/modelManagement.ts";
import { allProjectModelsRoute } from "/_nuxt/lib/common/helpers/route.ts";
import { useLogger } from "/_nuxt/composables/logging.ts";
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ProjectPageModelsListView",
props: {
projectId: { type: String, required: true },
project: { type: Object, required: false },
search: { type: String, required: false },
disablePagination: { type: Boolean, required: false },
sourceApps: { type: Array, required: false },
contributors: { type: Array, required: false }
},
emits: ["update:loading", "clear-search"],
setup(__props, { expose: __expose, emit: __emit }) {
__expose();
const emit = __emit;
const props = __props;
const logger = useLogger();
const infiniteLoadCacheBuster = ref(0);
const newSubmodelParent = ref("");
const showNewDialog = computed({
get: () => !!newSubmodelParent.value,
set: (newVal) => {
if (!newVal) {
newSubmodelParent.value = "";
}
}
});
const evictModelFields = useEvictProjectModelFields();
const areQueriesLoading = useQueryLoading();
const baseQueryVariables = computed(
() => ({
projectId: props.projectId,
filter: {
search: props.search || null,
sourceApps: props.sourceApps?.length ? props.sourceApps.map((a) => a.searchKey) : null,
contributors: props.contributors?.length ? props.contributors.map((c) => c.id) : null
}
})
);
const infiniteLoaderId = ref("");
const isModelUploading = ref(false);
const {
result: baseResult,
variables: resultVariables,
onResult: onBaseResult
} = useQuery(projectModelsTreeTopLevelQuery, () => baseQueryVariables.value);
const isFiltering = computed(() => {
const filter = resultVariables.value?.filter;
if (filter?.contributors?.length) return true;
if (filter?.search?.length) return true;
if (filter?.sourceApps?.length) return true;
return false;
});
const {
result: extraPagesResult,
fetchMore: fetchMorePages,
onResult: onExtraPagesResult
} = useQuery(
projectModelsTreeTopLevelPaginationQuery,
() => ({
...baseQueryVariables.value,
cursor: null
}),
() => ({ enabled: !props.disablePagination })
);
const pendingModels = computed(
() => isFiltering.value ? [] : baseResult.value?.project?.pendingImportedModels || []
);
const modelTreeItems = computed(
() => extraPagesResult.value ? extraPagesResult.value?.project?.modelsTree.items || [] : baseResult.value?.project?.modelsTree.items || []
);
const topLevelItems = computed(
() => [...pendingModels.value, ...modelTreeItems.value].slice(
0,
props.disablePagination ? 8 : void 0
)
);
const isUsingSearch = computed(() => !!resultVariables.value?.filter?.search);
const moreToLoad = computed(
() => !extraPagesResult.value?.project || extraPagesResult.value.project.modelsTree.items.length < extraPagesResult.value.project.modelsTree.totalCount
);
const showViewAll = computed(() => moreToLoad.value && props.disablePagination);
const onModelUpdated = () => {
evictModelFields(props.projectId);
infiniteLoadCacheBuster.value++;
calculateLoaderId();
};
const onCreateSubmodel = (parentModelName) => {
newSubmodelParent.value = parentModelName;
};
const infiniteLoad = async (state) => {
const cursor = extraPagesResult.value?.project?.modelsTree.cursor || baseResult.value?.project?.modelsTree.cursor || null;
if (!moreToLoad.value || !cursor) return state.complete();
try {
await fetchMorePages({
variables: {
cursor
}
});
} catch (e) {
logger.error(e);
state.error();
return;
}
state.loaded();
if (!moreToLoad.value) {
state.complete();
}
};
const calculateLoaderId = () => {
const vars = baseQueryVariables.value;
const id = JSON.stringify(vars.filter) + `${infiniteLoadCacheBuster.value}`;
infiniteLoaderId.value = id;
};
const onModelUploading = (payload) => {
isModelUploading.value = payload.isUploading;
};
watch(areQueriesLoading, (newVal) => {
emit("update:loading", newVal);
});
onBaseResult(calculateLoaderId);
onExtraPagesResult(calculateLoaderId);
const __returned__ = { emit, props, logger, infiniteLoadCacheBuster, newSubmodelParent, showNewDialog, evictModelFields, areQueriesLoading, baseQueryVariables, infiniteLoaderId, isModelUploading, baseResult, resultVariables, onBaseResult, isFiltering, extraPagesResult, fetchMorePages, onExtraPagesResult, pendingModels, modelTreeItems, topLevelItems, isUsingSearch, moreToLoad, showViewAll, onModelUpdated, onCreateSubmodel, infiniteLoad, calculateLoaderId, onModelUploading, get allProjectModelsRoute() {
return allProjectModelsRoute;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = { "data-v-inspector": "components/project/page/models/ListView.vue:2:3" };
const _hoisted_2 = {
key: 0,
class: "space-y-2 max-w-full",
"data-v-inspector": "components/project/page/models/ListView.vue:3:5"
};
const _hoisted_3 = {
key: 1,
"data-v-inspector": "components/project/page/models/ListView.vue:30:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ProjectPageModelsStructureItem = __nuxt_component_0;
const _component_FormButtonSecondaryViewAll = __nuxt_component_1;
const _component_CommonEmptySearchState = __nuxt_component_2;
const _component_ProjectCardImportFileArea = __nuxt_component_3;
const _component_InfiniteLoading = __nuxt_component_4;
const _component_ProjectModelsAdd = __nuxt_component_5;
return _openBlock(), _createElementBlock("div", _hoisted_1, [
$setup.topLevelItems.length && $props.project && !$setup.isModelUploading ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.topLevelItems, (item) => {
return _openBlock(), _createElementBlock("div", {
key: item.id,
"data-v-inspector": "components/project/page/models/ListView.vue:7:7"
}, [
_createVNode(_component_ProjectPageModelsStructureItem, {
item,
project: $props.project,
"is-search-result": $setup.isUsingSearch,
onModelUpdated: $setup.onModelUpdated,
onCreateSubmodel: $setup.onCreateSubmodel,
"data-v-inspector": "components/project/page/models/ListView.vue:8:9"
}, null, 8, ["item", "project", "is-search-result"])
]);
}),
128
/* KEYED_FRAGMENT */
)),
$setup.showViewAll ? (_openBlock(), _createBlock(_component_FormButtonSecondaryViewAll, {
key: 0,
to: $setup.allProjectModelsRoute($props.projectId),
"data-v-inspector": "components/project/page/models/ListView.vue:16:7"
}, null, 8, ["to"])) : _createCommentVNode("v-if", true)
])) : !$setup.areQueriesLoading ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 1 },
[
!$setup.topLevelItems.length && $setup.isFiltering && ($setup.baseResult?.project?.modelsTree.items || []).length === 0 ? (_openBlock(), _createBlock(_component_CommonEmptySearchState, {
key: 0,
onClearSearch: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("clear-search")),
"data-v-inspector": "components/project/page/models/ListView.vue:22:7"
})) : (_openBlock(), _createElementBlock("div", _hoisted_3, [
$props.project ? (_openBlock(), _createBlock(_component_ProjectCardImportFileArea, {
key: 0,
project: $props.project,
class: "h-36 col-span-4",
onUploading: $setup.onModelUploading,
"data-v-inspector": "components/project/page/models/ListView.vue:31:9"
}, null, 8, ["project"])) : _createCommentVNode("v-if", true)
]))
],
64
/* STABLE_FRAGMENT */
)) : _createCommentVNode("v-if", true),
$setup.topLevelItems?.length && !$props.disablePagination ? (_openBlock(), _createBlock(_component_InfiniteLoading, {
key: 2,
settings: { identifier: $setup.infiniteLoaderId },
onInfinite: $setup.infiniteLoad,
"data-v-inspector": "components/project/page/models/ListView.vue:39:5"
}, null, 8, ["settings"])) : _createCommentVNode("v-if", true),
_createVNode(_component_ProjectModelsAdd, {
open: $setup.showNewDialog,
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showNewDialog = $event),
project: $props.project,
"parent-model-name": $setup.newSubmodelParent || void 0,
"data-v-inspector": "components/project/page/models/ListView.vue:44:5"
}, null, 8, ["open", "project", "parent-model-name"])
]);
}
_sfc_main.__hmrId = "7d741a8c";
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/project/page/models/ListView.vue"]]);
//# sourceMappingURL=data:application/json;base64,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Z25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJMaXN0Vmlldy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9MaXN0Vmlldy52dWU6MjozXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIHYtaWY9XCJ0b3BMZXZlbEl0ZW1zLmxlbmd0aCAmJiBwcm9qZWN0ICYmICFpc01vZGVsVXBsb2FkaW5nXCJcclxuICAgICAgY2xhc3M9XCJzcGFjZS15LTIgbWF4LXctZnVsbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvTGlzdFZpZXcudnVlOjM6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgdi1mb3I9XCJpdGVtIGluIHRvcExldmVsSXRlbXNcIiA6a2V5PVwiaXRlbS5pZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvTGlzdFZpZXcudnVlOjc6N1wiPlxyXG4gICAgICAgIDxQcm9qZWN0UGFnZU1vZGVsc1N0cnVjdHVyZUl0ZW1cclxuICAgICAgICAgIDppdGVtPVwiaXRlbVwiXHJcbiAgICAgICAgICA6cHJvamVjdD1cInByb2plY3RcIlxyXG4gICAgICAgICAgOmlzLXNlYXJjaC1yZXN1bHQ9XCJpc1VzaW5nU2VhcmNoXCJcclxuICAgICAgICAgIEBtb2RlbC11cGRhdGVkPVwib25Nb2RlbFVwZGF0ZWRcIlxyXG4gICAgICAgICAgQGNyZWF0ZS1zdWJtb2RlbD1cIm9uQ3JlYXRlU3VibW9kZWxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0xpc3RWaWV3LnZ1ZTo4OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Rm9ybUJ1dHRvblNlY29uZGFyeVZpZXdBbGxcclxuICAgICAgICB2LWlmPVwic2hvd1ZpZXdBbGxcIlxyXG4gICAgICAgIDp0bz1cImFsbFByb2plY3RNb2RlbHNSb3V0ZShwcm9qZWN0SWQpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9MaXN0Vmlldy52dWU6MTY6N1wiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0ZW1wbGF0ZSB2LWVsc2UtaWY9XCIhYXJlUXVlcmllc0xvYWRpbmdcIj5cclxuICAgICAgPENvbW1vbkVtcHR5U2VhcmNoU3RhdGVcclxuICAgICAgICB2LWlmPVwiXHJcbiAgICAgICAgICAhdG9wTGV2ZWxJdGVtcy5sZW5ndGggJiZcclxuICAgICAgICAgIGlzRmlsdGVyaW5nICYmXHJcbiAgICAgICAgICAoYmFzZVJlc3VsdD8ucHJvamVjdD8ubW9kZWxzVHJlZS5pdGVtcyB8fCBbXSkubGVuZ3RoID09PSAwXHJcbiAgICAgICAgXCJcclxuICAgICAgICBAY2xlYXItc2VhcmNoPVwiJGVtaXQoJ2NsZWFyLXNlYXJjaCcpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9MaXN0Vmlldy52dWU6MjI6N1wiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXYgdi1lbHNlIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvTGlzdFZpZXcudnVlOjMwOjdcIj5cclxuICAgICAgICA8UHJvamVjdENhcmRJbXBvcnRGaWxlQXJlYVxyXG4gICAgICAgICAgdi1pZj1cInByb2plY3RcIlxyXG4gICAgICAgICAgOnByb2plY3Q9XCJwcm9qZWN0XCJcclxuICAgICAgICAgIGNsYXNzPVwiaC0zNiBjb2wtc3Bhbi00XCJcclxuICAgICAgICAgIEB1cGxvYWRpbmc9XCJvbk1vZGVsVXBsb2FkaW5nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9MaXN0Vmlldy52dWU6MzE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gICAgPEluZmluaXRlTG9hZGluZ1xyXG4gICAgICB2LWlmPVwidG9wTGV2ZWxJdGVtcz8ubGVuZ3RoICYmICFkaXNhYmxlUGFnaW5hdGlvblwiXHJcbiAgICAgIDpzZXR0aW5ncz1cInsgaWRlbnRpZmllcjogaW5maW5pdGVMb2FkZXJJZCB9XCJcclxuICAgICAgQGluZmluaXRlPVwiaW5maW5pdGVMb2FkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9wYWdlL21vZGVscy9MaXN0Vmlldy52dWU6Mzk6NVwiXHJcbiAgICAvPlxyXG4gICAgPFByb2plY3RNb2RlbHNBZGRcclxuICAgICAgdi1tb2RlbDpvcGVuPVwic2hvd05ld0RpYWxvZ1wiXHJcbiAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXHJcbiAgICAgIDpwYXJlbnQtbW9kZWwtbmFtZT1cIm5ld1N1Ym1vZGVsUGFyZW50IHx8IHVuZGVmaW5lZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvcGFnZS9tb2RlbHMvTGlzdFZpZXcudnVlOjQ0OjVcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHR5cGUge1xyXG4gIFBlbmRpbmdGaWxlVXBsb2FkRnJhZ21lbnQsXHJcbiAgUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsc0ZyYWdtZW50LFxyXG4gIFNpbmdsZUxldmVsTW9kZWxUcmVlSXRlbUZyYWdtZW50LFxyXG4gIEZvcm1Vc2Vyc1NlbGVjdEl0ZW1GcmFnbWVudCxcclxuICBQcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsUXVlcnlWYXJpYWJsZXNcclxufSBmcm9tICd+fi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlUXVlcnksIHVzZVF1ZXJ5TG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7XHJcbiAgcHJvamVjdE1vZGVsc1RyZWVUb3BMZXZlbFF1ZXJ5LFxyXG4gIHByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWxQYWdpbmF0aW9uUXVlcnlcclxufSBmcm9tICd+fi9saWIvcHJvamVjdHMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQgdHlwZSB7IE51bGxhYmxlLCBTb3VyY2VBcHBEZWZpbml0aW9uIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IEluZmluaXRlTG9hZGVyU3RhdGUgfSBmcm9tICd+fi9saWIvZ2xvYmFsL2hlbHBlcnMvY29tcG9uZW50cydcclxuaW1wb3J0IHsgdXNlRXZpY3RQcm9qZWN0TW9kZWxGaWVsZHMgfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvbW9kZWxNYW5hZ2VtZW50J1xyXG5pbXBvcnQgeyBhbGxQcm9qZWN0TW9kZWxzUm91dGUgfSBmcm9tICd+fi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUnXHJcbmltcG9ydCB0eXBlIHsgRmlsZUFyZWFVcGxvYWRpbmdQYXlsb2FkIH0gZnJvbSAnfi9saWIvZm9ybS9oZWxwZXJzL2ZpbGVVcGxvYWQnXHJcblxyXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHM8e1xyXG4gIChlOiAndXBkYXRlOmxvYWRpbmcnLCB2OiBib29sZWFuKTogdm9pZFxyXG4gIChlOiAnY2xlYXItc2VhcmNoJyk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgcHJvamVjdElkOiBzdHJpbmdcclxuICBwcm9qZWN0PzogUHJvamVjdFBhZ2VMYXRlc3RJdGVtc01vZGVsc0ZyYWdtZW50XHJcbiAgc2VhcmNoPzogc3RyaW5nXHJcbiAgZGlzYWJsZVBhZ2luYXRpb24/OiBib29sZWFuXHJcbiAgc291cmNlQXBwcz86IFNvdXJjZUFwcERlZmluaXRpb25bXVxyXG4gIGNvbnRyaWJ1dG9ycz86IEZvcm1Vc2Vyc1NlbGVjdEl0ZW1GcmFnbWVudFtdXHJcbn0+KClcclxuXHJcbmNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcblxyXG5jb25zdCBpbmZpbml0ZUxvYWRDYWNoZUJ1c3RlciA9IHJlZigwKVxyXG5jb25zdCBuZXdTdWJtb2RlbFBhcmVudCA9IHJlZignJylcclxuXHJcbmNvbnN0IHNob3dOZXdEaWFsb2cgPSBjb21wdXRlZCh7XHJcbiAgZ2V0OiAoKSA9PiAhIW5ld1N1Ym1vZGVsUGFyZW50LnZhbHVlLFxyXG4gIHNldDogKG5ld1ZhbCkgPT4ge1xyXG4gICAgaWYgKCFuZXdWYWwpIHtcclxuICAgICAgbmV3U3VibW9kZWxQYXJlbnQudmFsdWUgPSAnJ1xyXG4gICAgfVxyXG4gIH1cclxufSlcclxuXHJcbmNvbnN0IGV2aWN0TW9kZWxGaWVsZHMgPSB1c2VFdmljdFByb2plY3RNb2RlbEZpZWxkcygpXHJcbmNvbnN0IGFyZVF1ZXJpZXNMb2FkaW5nID0gdXNlUXVlcnlMb2FkaW5nKClcclxuXHJcbmNvbnN0IGJhc2VRdWVyeVZhcmlhYmxlcyA9IGNvbXB1dGVkKFxyXG4gICgpOiBQcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsUXVlcnlWYXJpYWJsZXMgPT4gKHtcclxuICAgIHByb2plY3RJZDogcHJvcHMucHJvamVjdElkLFxyXG4gICAgZmlsdGVyOiB7XHJcbiAgICAgIHNlYXJjaDogcHJvcHMuc2VhcmNoIHx8IG51bGwsXHJcbiAgICAgIHNvdXJjZUFwcHM6IHByb3BzLnNvdXJjZUFwcHM/Lmxlbmd0aFxyXG4gICAgICAgID8gcHJvcHMuc291cmNlQXBwcy5tYXAoKGEpID0+IGEuc2VhcmNoS2V5KVxyXG4gICAgICAgIDogbnVsbCxcclxuICAgICAgY29udHJpYnV0b3JzOiBwcm9wcy5jb250cmlidXRvcnM/Lmxlbmd0aFxyXG4gICAgICAgID8gcHJvcHMuY29udHJpYnV0b3JzLm1hcCgoYykgPT4gYy5pZClcclxuICAgICAgICA6IG51bGxcclxuICAgIH1cclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBpbmZpbml0ZUxvYWRlcklkID0gcmVmKCcnKVxyXG5jb25zdCBpc01vZGVsVXBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5cclxuLy8gQmFzZSBxdWVyeSAoYWxsIHBlbmRpbmcgdXBsb2FkcyArIGZpcnN0IHBhZ2Ugb2YgbW9kZWxzKVxyXG5jb25zdCB7XHJcbiAgcmVzdWx0OiBiYXNlUmVzdWx0LFxyXG4gIHZhcmlhYmxlczogcmVzdWx0VmFyaWFibGVzLFxyXG4gIG9uUmVzdWx0OiBvbkJhc2VSZXN1bHRcclxufSA9IHVzZVF1ZXJ5KHByb2plY3RNb2RlbHNUcmVlVG9wTGV2ZWxRdWVyeSwgKCkgPT4gYmFzZVF1ZXJ5VmFyaWFibGVzLnZhbHVlKVxyXG5cclxuY29uc3QgaXNGaWx0ZXJpbmcgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgZmlsdGVyID0gcmVzdWx0VmFyaWFibGVzLnZhbHVlPy5maWx0ZXJcclxuICBpZiAoZmlsdGVyPy5jb250cmlidXRvcnM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuICBpZiAoZmlsdGVyPy5zZWFyY2g/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuICBpZiAoZmlsdGVyPy5zb3VyY2VBcHBzPy5sZW5ndGgpIHJldHVybiB0cnVlXHJcbiAgcmV0dXJuIGZhbHNlXHJcbn0pXHJcblxyXG4vLyBQYWdpbmF0aW9uIHF1ZXJ5XHJcbmNvbnN0IHtcclxuICByZXN1bHQ6IGV4dHJhUGFnZXNSZXN1bHQsXHJcbiAgZmV0Y2hNb3JlOiBmZXRjaE1vcmVQYWdlcyxcclxuICBvblJlc3VsdDogb25FeHRyYVBhZ2VzUmVzdWx0XHJcbn0gPSB1c2VRdWVyeShcclxuICBwcm9qZWN0TW9kZWxzVHJlZVRvcExldmVsUGFnaW5hdGlvblF1ZXJ5LFxyXG4gICgpID0+ICh7XHJcbiAgICAuLi5iYXNlUXVlcnlWYXJpYWJsZXMudmFsdWUsXHJcbiAgICBjdXJzb3I6IG51bGwgYXMgTnVsbGFibGU8c3RyaW5nPlxyXG4gIH0pLFxyXG4gICgpID0+ICh7IGVuYWJsZWQ6ICFwcm9wcy5kaXNhYmxlUGFnaW5hdGlvbiB9KVxyXG4pXHJcblxyXG5jb25zdCBwZW5kaW5nTW9kZWxzID0gY29tcHV0ZWQoKCkgPT5cclxuICBpc0ZpbHRlcmluZy52YWx1ZSA/IFtdIDogYmFzZVJlc3VsdC52YWx1ZT8ucHJvamVjdD8ucGVuZGluZ0ltcG9ydGVkTW9kZWxzIHx8IFtdXHJcbilcclxuY29uc3QgbW9kZWxUcmVlSXRlbXMgPSBjb21wdXRlZCgoKSA9PlxyXG4gIGV4dHJhUGFnZXNSZXN1bHQudmFsdWVcclxuICAgID8gZXh0cmFQYWdlc1Jlc3VsdC52YWx1ZT8ucHJvamVjdD8ubW9kZWxzVHJlZS5pdGVtcyB8fCBbXVxyXG4gICAgOiBiYXNlUmVzdWx0LnZhbHVlPy5wcm9qZWN0Py5tb2RlbHNUcmVlLml0ZW1zIHx8IFtdXHJcbilcclxuXHJcbmNvbnN0IHRvcExldmVsSXRlbXMgPSBjb21wdXRlZChcclxuICAoKTogQXJyYXk8U2luZ2xlTGV2ZWxNb2RlbFRyZWVJdGVtRnJhZ21lbnQgfCBQZW5kaW5nRmlsZVVwbG9hZEZyYWdtZW50PiA9PlxyXG4gICAgWy4uLnBlbmRpbmdNb2RlbHMudmFsdWUsIC4uLm1vZGVsVHJlZUl0ZW1zLnZhbHVlXS5zbGljZShcclxuICAgICAgMCxcclxuICAgICAgcHJvcHMuZGlzYWJsZVBhZ2luYXRpb24gPyA4IDogdW5kZWZpbmVkXHJcbiAgICApXHJcbilcclxuXHJcbmNvbnN0IGlzVXNpbmdTZWFyY2ggPSBjb21wdXRlZCgoKSA9PiAhIXJlc3VsdFZhcmlhYmxlcy52YWx1ZT8uZmlsdGVyPy5zZWFyY2gpXHJcbmNvbnN0IG1vcmVUb0xvYWQgPSBjb21wdXRlZChcclxuICAoKSA9PlxyXG4gICAgIWV4dHJhUGFnZXNSZXN1bHQudmFsdWU/LnByb2plY3QgfHxcclxuICAgIGV4dHJhUGFnZXNSZXN1bHQudmFsdWUucHJvamVjdC5tb2RlbHNUcmVlLml0ZW1zLmxlbmd0aCA8XHJcbiAgICAgIGV4dHJhUGFnZXNSZXN1bHQudmFsdWUucHJvamVjdC5tb2RlbHNUcmVlLnRvdGFsQ291bnRcclxuKVxyXG5jb25zdCBzaG93Vmlld0FsbCA9IGNvbXB1dGVkKCgpID0+IG1vcmVUb0xvYWQudmFsdWUgJiYgcHJvcHMuZGlzYWJsZVBhZ2luYXRpb24pXHJcblxyXG5jb25zdCBvbk1vZGVsVXBkYXRlZCA9ICgpID0+IHtcclxuICAvLyBFdmljdCBtb2RlbCBkYXRhXHJcbiAgZXZpY3RNb2RlbEZpZWxkcyhwcm9wcy5wcm9qZWN0SWQpXHJcblxyXG4gIC8vIFJlc2V0IHBhZ2luYXRpb25cclxuICBpbmZpbml0ZUxvYWRDYWNoZUJ1c3Rlci52YWx1ZSsrXHJcbiAgY2FsY3VsYXRlTG9hZGVySWQoKVxyXG59XHJcblxyXG5jb25zdCBvbkNyZWF0ZVN1Ym1vZGVsID0gKHBhcmVudE1vZGVsTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgbmV3U3VibW9kZWxQYXJlbnQudmFsdWUgPSBwYXJlbnRNb2RlbE5hbWVcclxufVxyXG5cclxuY29uc3QgaW5maW5pdGVMb2FkID0gYXN5bmMgKHN0YXRlOiBJbmZpbml0ZUxvYWRlclN0YXRlKSA9PiB7XHJcbiAgY29uc3QgY3Vyc29yID1cclxuICAgIGV4dHJhUGFnZXNSZXN1bHQudmFsdWU/LnByb2plY3Q/Lm1vZGVsc1RyZWUuY3Vyc29yIHx8XHJcbiAgICBiYXNlUmVzdWx0LnZhbHVlPy5wcm9qZWN0Py5tb2RlbHNUcmVlLmN1cnNvciB8fFxyXG4gICAgbnVsbFxyXG4gIGlmICghbW9yZVRvTG9hZC52YWx1ZSB8fCAhY3Vyc29yKSByZXR1cm4gc3RhdGUuY29tcGxldGUoKVxyXG5cclxuICB0cnkge1xyXG4gICAgYXdhaXQgZmV0Y2hNb3JlUGFnZXMoe1xyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBjdXJzb3JcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICBsb2dnZXIuZXJyb3IoZSlcclxuICAgIHN0YXRlLmVycm9yKClcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgc3RhdGUubG9hZGVkKClcclxuICBpZiAoIW1vcmVUb0xvYWQudmFsdWUpIHtcclxuICAgIHN0YXRlLmNvbXBsZXRlKClcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNhbGN1bGF0ZUxvYWRlcklkID0gKCkgPT4ge1xyXG4gIGNvbnN0IHZhcnMgPSBiYXNlUXVlcnlWYXJpYWJsZXMudmFsdWVcclxuICBjb25zdCBpZCA9IEpTT04uc3RyaW5naWZ5KHZhcnMuZmlsdGVyKSArIGAke2luZmluaXRlTG9hZENhY2hlQnVzdGVyLnZhbHVlfWBcclxuICBpbmZpbml0ZUxvYWRlcklkLnZhbHVlID0gaWRcclxufVxyXG5cclxuY29uc3Qgb25Nb2RlbFVwbG9hZGluZyA9IChwYXlsb2FkOiBGaWxlQXJlYVVwbG9hZGluZ1BheWxvYWQpID0+IHtcclxuICBpc01vZGVsVXBsb2FkaW5nLnZhbHVlID0gcGF5bG9hZC5pc1VwbG9hZGluZ1xyXG59XHJcblxyXG53YXRjaChhcmVRdWVyaWVzTG9hZGluZywgKG5ld1ZhbCkgPT4ge1xyXG4gIGVtaXQoJ3VwZGF0ZTpsb2FkaW5nJywgbmV3VmFsKVxyXG59KVxyXG5cclxub25CYXNlUmVzdWx0KGNhbGN1bGF0ZUxvYWRlcklkKVxyXG5vbkV4dHJhUGFnZXNSZXN1bHQoY2FsY3VsYXRlTG9hZGVySWQpXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcm9qZWN0L3BhZ2UvbW9kZWxzL0xpc3RWaWV3LnZ1ZSJ9