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

371 lines
32 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/workspace/moveProject/Intro.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/workspace/Avatar.vue";
import { default as __nuxt_component_1 } from "/_nuxt/components/global/illustration/ProjectShape.vue";
import { CommonAlert as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormButton as __nuxt_component_3 } 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 {
ProjectNoAccessError,
ProjectNotEnoughPermissionsError
} from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/authz/index.js";
import { usePersonalProjectLimits } from "/_nuxt/lib/projects/composables/permissions.ts";
import { ViewerLimitsDialogType } from "/_nuxt/lib/projects/helpers/limits.ts";
import { useLoadLatestVersion } from "/_nuxt/lib/viewer/composables/resources.ts";
import { useRoute } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "WorkspaceMoveProjectIntro",
props: {
project: { type: null, required: false },
limitType: { type: null, required: false }
},
emits: ["cancel", "continue"],
setup(__props, { expose: __expose }) {
__expose();
const props = __props;
const route = useRoute();
const canMoveProject = computed(() => props.project?.permissions?.canMoveToWorkspace);
const { load: loadLatestVersion } = useLoadLatestVersion({
project: computed(() => props.project),
resourceIdString: computed(() => route.params.modelId)
// this should only be opened in the viewer anyway
});
const { versionLimitFormatted } = usePersonalProjectLimits();
const isNotOwner = computed(() => {
const check = canMoveProject.value;
if (!check) return true;
return !check.authorized && [ProjectNotEnoughPermissionsError.code, ProjectNoAccessError.code].includes(check.code);
});
const __returned__ = { props, route, canMoveProject, loadLatestVersion, versionLimitFormatted, isNotOwner, get ViewerLimitsDialogType() {
return ViewerLimitsDialogType;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "flex flex-col",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:2:3"
};
const _hoisted_2 = {
class: "relative bg-primary h-48 select-none",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:3:5"
};
const _hoisted_3 = {
class: "bg-foundation dark:bg-foundation-2 w-full relative border-b border-outline-2 h-full overflow-clip flex justify-center",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:4:7"
};
const _hoisted_4 = {
class: "absolute shadow-2xl rounded-md my-8 p-2 gap-2 flex align-middle top-0 border z-55 w-80 h-full bg-foundation border-outline-2",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:11:9"
};
const _hoisted_5 = {
class: "relative m-0 list-none h-[204px] w-[302px] my-20 p-0 border border-outline-2 flex bg-foundation-page justify-center rounded-md",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:21:9"
};
const _hoisted_6 = {
class: "absolute z-65 justify-center rounded-md p-2 w-full",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:24:11"
};
const _hoisted_7 = {
class: "flex justify-between w-full gap-2 h-20",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:25:13"
};
const _hoisted_8 = {
class: "absolute h-20 w-[90px] card-slide-in border border-outline-2 bg-foundation rounded-md p-4 place-items-center flex-1",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:26:15"
};
const _hoisted_9 = {
class: "border border-outline-2 bg-foundation rounded-md p-4 flex-1",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:34:15"
};
const _hoisted_10 = {
class: "border border-outline-2 bg-foundation rounded-md p-4 flex-1",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:37:15"
};
const _hoisted_11 = {
class: "w-full bg-foundation-page flex flex-col gap-6 p-6",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:45:5"
};
const _hoisted_12 = {
class: "flex flex-col gap-y-4 select-none",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:46:7"
};
const _hoisted_13 = {
class: "text-heading-sm text-foreground",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:47:9"
};
const _hoisted_14 = {
class: "flex gap-2 justify-end",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:80:7"
};
const _hoisted_15 = { "data-v-inspector": "components/workspace/moveProject/Intro.vue:87:9" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_WorkspaceAvatar = __nuxt_component_0;
const _component_IllustrationProjectShape = __nuxt_component_1;
const _component_CommonAlert = __nuxt_component_2;
const _component_FormButton = __nuxt_component_3;
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createElementBlock("div", _hoisted_1, [
_createElementVNode("div", _hoisted_2, [
_createElementVNode("div", _hoisted_3, [
_cache[4] || (_cache[4] = _createElementVNode(
"div",
{
class: "z-2 absolute -top-40 left-auto transform rotate-45 rounded-full p-40 border-[150px] border-b-white border-l-indigo-600 dark:border-l-indigo-400 border-r-rose-900 dark:border-r-rose-500 border-t-white blur-[200px]",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:7:9"
},
null,
-1
/* CACHED */
)),
_createElementVNode("div", _hoisted_4, [
_createVNode(_component_WorkspaceAvatar, {
name: "My workspace",
logo: "",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:14:11"
}),
_cache[2] || (_cache[2] = _createElementVNode(
"span",
{
class: "h-[30px] flex place-items-center text-foreground-3 text-body-3xs font-medium",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:15:11"
},
" My workspace ",
-1
/* CACHED */
))
]),
_createElementVNode("ul", _hoisted_5, [
_createElementVNode("li", _hoisted_6, [
_createElementVNode("div", _hoisted_7, [
_createElementVNode("div", _hoisted_8, [
_createVNode(_component_IllustrationProjectShape, { "data-v-inspector": "components/workspace/moveProject/Intro.vue:29:17" })
]),
_cache[3] || (_cache[3] = _createElementVNode(
"div",
{
class: "border border-outline-5 border-dashed bg-foundation-2 rounded-md p-4 flex-1 place-items-center",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:31:15"
},
null,
-1
/* CACHED */
)),
_createElementVNode("div", _hoisted_9, [
_createVNode(_component_IllustrationProjectShape, {
class: "rotate-180",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:35:17"
})
]),
_createElementVNode("div", _hoisted_10, [
_createVNode(_component_IllustrationProjectShape, {
class: "rotate-90",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:38:17"
})
])
])
])
])
])
]),
_createElementVNode("div", _hoisted_11, [
_createElementVNode("div", _hoisted_12, [
_createElementVNode("h4", _hoisted_13, [
!$props.limitType ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 0 },
[
_createTextVNode("Move your projects to a workspace to:")
],
64
/* STABLE_FRAGMENT */
)) : $props.limitType === $setup.ViewerLimitsDialogType.Version ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 1 },
[
_createTextVNode(" Personal projects limit reached ")
],
64
/* STABLE_FRAGMENT */
)) : $props.limitType === $setup.ViewerLimitsDialogType.Federated ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 2 },
[
_createTextVNode(" The federated models couldn't be loaded ")
],
64
/* STABLE_FRAGMENT */
)) : _createCommentVNode("v-if", true)
]),
!$props.limitType ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 0 },
[
_cache[5] || (_cache[5] = _createTextVNode(
" → Create new projects and models, ",
-1
/* CACHED */
)),
_cache[6] || (_cache[6] = _createElementVNode(
"br",
{ "data-v-inspector": "components/workspace/moveProject/Intro.vue:58:11" },
null,
-1
/* CACHED */
)),
_cache[7] || (_cache[7] = _createTextVNode(
" → Invite new project collaborators, ",
-1
/* CACHED */
)),
_cache[8] || (_cache[8] = _createElementVNode(
"br",
{ "data-v-inspector": "components/workspace/moveProject/Intro.vue:60:11" },
null,
-1
/* CACHED */
)),
_createTextVNode(
" → View comments and versions older than " + _toDisplayString($setup.versionLimitFormatted) + " (paid plans only) ",
1
/* TEXT */
)
],
64
/* STABLE_FRAGMENT */
)) : $props.limitType === $setup.ViewerLimitsDialogType.Version ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 1 },
[
_createTextVNode(
" The version you're trying to load is older than the " + _toDisplayString($setup.versionLimitFormatted) + " version history limit allowed for Personal projects. Move your project to a workspace to gain access. ",
1
/* TEXT */
)
],
64
/* STABLE_FRAGMENT */
)) : $props.limitType === $setup.ViewerLimitsDialogType.Federated ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 2 },
[
_createTextVNode(
" One of the models is older than the " + _toDisplayString($setup.versionLimitFormatted) + " version history limit allowed for Personal projects. Move your project to a workspace to gain access. ",
1
/* TEXT */
)
],
64
/* STABLE_FRAGMENT */
)) : _createCommentVNode("v-if", true)
]),
$setup.isNotOwner ? (_openBlock(), _createBlock(_component_CommonAlert, {
key: 0,
color: "warning",
"hide-icon": "",
"data-v-inspector": "components/workspace/moveProject/Intro.vue:75:7"
}, {
title: _withCtx(() => [..._cache[9] || (_cache[9] = [
_createTextVNode(
" You can't move the project because you're not a project owner. ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true),
_createElementVNode("div", _hoisted_14, [
!$props.limitType ? (_openBlock(), _createBlock(_component_FormButton, {
key: 0,
color: "subtle",
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("cancel")),
"data-v-inspector": "components/workspace/moveProject/Intro.vue:81:9"
}, {
default: _withCtx(() => [..._cache[10] || (_cache[10] = [
_createTextVNode(
" Cancel ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : (_openBlock(), _createBlock(_component_FormButton, {
key: 1,
color: "subtle",
onClick: $setup.loadLatestVersion,
"data-v-inspector": "components/workspace/moveProject/Intro.vue:84:9"
}, {
default: _withCtx(() => [..._cache[11] || (_cache[11] = [
_createTextVNode(
" Load latest version ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
}, 8, ["onClick"])),
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_15, [
_createVNode(_component_FormButton, {
disabled: !$setup.canMoveProject?.authorized,
onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("continue")),
"data-v-inspector": "components/workspace/moveProject/Intro.vue:92:11"
}, {
default: _withCtx(() => [..._cache[12] || (_cache[12] = [
_createTextVNode(
" Move project ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
}, 8, ["disabled"])
])), [
[
_directive_tippy,
$setup.canMoveProject?.authorized || $setup.isNotOwner ? "" : $setup.canMoveProject?.message
]
])
])
])
]);
}
import "/_nuxt/components/workspace/moveProject/Intro.vue?vue&type=style&index=0&scoped=e9eedfd4&lang.css";
_sfc_main.__hmrId = "e9eedfd4";
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], ["__scopeId", "data-v-e9eedfd4"], ["__file", "D:/speckle-server/packages/frontend-2/components/workspace/moveProject/Intro.vue"]]);
//# sourceMappingURL=data:application/json;base64,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bkJOLGFBbUJNO0FBQUEsU0FsQmUsa0NBQW5CLGFBRWE7QUFBQTtVQUZpQixPQUFNO0FBQUEsVUFBVSxTQUFLLHNDQUFFLFdBQUs7QUFBQSxVQUFZLG9CQUFpQjtBQUFBOzRCQUFrRCxNQUV6STtBQUFBO2NBRnlJO0FBQUEsY0FFekk7QUFBQTtBQUFBO0FBQUE7Ozs2QkFDQSxhQUVhO0FBQUE7VUFGTSxPQUFNO0FBQUEsVUFBVSxTQUFPO0FBQUEsVUFBbUIsb0JBQWlCO0FBQUE7NEJBQWtELE1BRWhJO0FBQUE7Y0FGZ0k7QUFBQSxjQUVoSTtBQUFBO0FBQUE7QUFBQTs7Ozt1Q0FDQSxvQkFXTSxPQVhOLGFBV007QUFBQSxVQU5KLGFBS2E7QUFBQSxZQUpWLFVBQVEsQ0FBRyx1QkFBZ0I7QUFBQSxZQUMzQixTQUFLLHNDQUFFLFdBQUs7QUFBQSxZQUFjLG9CQUFpQjtBQUFBOzhCQUM3QyxNQUVEO0FBQUE7Z0JBRkM7QUFBQSxnQkFFRDtBQUFBO0FBQUE7QUFBQTs7Ozs7OztZQVR1Qix1QkFBZ0IsY0FBYyxvQkFBVSxLQUFRLHVCQUFnQjtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJJbnRyby52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZToyOjNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBiZy1wcmltYXJ5IGgtNDggc2VsZWN0LW5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjM6NVwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiZy1mb3VuZGF0aW9uIGRhcms6YmctZm91bmRhdGlvbi0yIHctZnVsbCByZWxhdGl2ZSBib3JkZXItYiBib3JkZXItb3V0bGluZS0yIGgtZnVsbCBvdmVyZmxvdy1jbGlwIGZsZXgganVzdGlmeS1jZW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInotMiBhYnNvbHV0ZSAtdG9wLTQwIGxlZnQtYXV0byB0cmFuc2Zvcm0gcm90YXRlLTQ1IHJvdW5kZWQtZnVsbCBwLTQwIGJvcmRlci1bMTUwcHhdIGJvcmRlci1iLXdoaXRlIGJvcmRlci1sLWluZGlnby02MDAgZGFyazpib3JkZXItbC1pbmRpZ28tNDAwIGJvcmRlci1yLXJvc2UtOTAwIGRhcms6Ym9yZGVyLXItcm9zZS01MDAgYm9yZGVyLXQtd2hpdGUgYmx1ci1bMjAwcHhdXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZTo3OjlcIlxyXG4gICAgICAgID48L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBzaGFkb3ctMnhsIHJvdW5kZWQtbWQgbXktOCBwLTIgZ2FwLTIgZmxleCBhbGlnbi1taWRkbGUgdG9wLTAgYm9yZGVyIHotNTUgdy04MCBoLWZ1bGwgYmctZm91bmRhdGlvbiBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZToxMTo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8V29ya3NwYWNlQXZhdGFyIG5hbWU9XCJNeSB3b3Jrc3BhY2VcIiBsb2dvPVwiXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZToxNDoxMVwiIC8+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cImgtWzMwcHhdIGZsZXggcGxhY2UtaXRlbXMtY2VudGVyIHRleHQtZm9yZWdyb3VuZC0zIHRleHQtYm9keS0zeHMgZm9udC1tZWRpdW1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjE1OjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgTXkgd29ya3NwYWNlXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHVsXHJcbiAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIG0tMCBsaXN0LW5vbmUgaC1bMjA0cHhdIHctWzMwMnB4XSBteS0yMCBwLTAgYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgZmxleCBiZy1mb3VuZGF0aW9uLXBhZ2UganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6MjE6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiYWJzb2x1dGUgei02NSBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIHAtMiB3LWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjI0OjExXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgZ2FwLTIgaC0yMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6MjU6MTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGgtMjAgdy1bOTBweF0gY2FyZC1zbGlkZS1pbiBib3JkZXIgYm9yZGVyLW91dGxpbmUtMiBiZy1mb3VuZGF0aW9uIHJvdW5kZWQtbWQgcC00IHBsYWNlLWl0ZW1zLWNlbnRlciBmbGV4LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjI2OjE1XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8SWxsdXN0cmF0aW9uUHJvamVjdFNoYXBlIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6Mjk6MTdcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vdXRsaW5lLTUgYm9yZGVyLWRhc2hlZCBiZy1mb3VuZGF0aW9uLTIgcm91bmRlZC1tZCBwLTQgZmxleC0xIHBsYWNlLWl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6MzE6MTVcIlxyXG4gICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgYmctZm91bmRhdGlvbiByb3VuZGVkLW1kIHAtNCBmbGV4LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjM0OjE1XCI+XHJcbiAgICAgICAgICAgICAgICA8SWxsdXN0cmF0aW9uUHJvamVjdFNoYXBlIGNsYXNzPVwicm90YXRlLTE4MFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6MzU6MTdcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLW91dGxpbmUtMiBiZy1mb3VuZGF0aW9uIHJvdW5kZWQtbWQgcC00IGZsZXgtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6Mzc6MTVcIj5cclxuICAgICAgICAgICAgICAgIDxJbGx1c3RyYXRpb25Qcm9qZWN0U2hhcGUgY2xhc3M9XCJyb3RhdGUtOTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjM4OjE3XCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGJnLWZvdW5kYXRpb24tcGFnZSBmbGV4IGZsZXgtY29sIGdhcC02IHAtNlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6NDU6NVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAteS00IHNlbGVjdC1ub25lXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZTo0Njo3XCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1oZWFkaW5nLXNtIHRleHQtZm9yZWdyb3VuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6NDc6OVwiPlxyXG4gICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCIhbGltaXRUeXBlXCI+TW92ZSB5b3VyIHByb2plY3RzIHRvIGEgd29ya3NwYWNlIHRvOjwvdGVtcGxhdGU+XHJcbiAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwibGltaXRUeXBlID09PSBWaWV3ZXJMaW1pdHNEaWFsb2dUeXBlLlZlcnNpb25cIj5cclxuICAgICAgICAgICAgUGVyc29uYWwgcHJvamVjdHMgbGltaXQgcmVhY2hlZFxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2UtaWY9XCJsaW1pdFR5cGUgPT09IFZpZXdlckxpbWl0c0RpYWxvZ1R5cGUuRmVkZXJhdGVkXCI+XHJcbiAgICAgICAgICAgIFRoZSBmZWRlcmF0ZWQgbW9kZWxzIGNvdWxkbid0IGJlIGxvYWRlZFxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWxpbWl0VHlwZVwiPlxyXG4gICAgICAgICAg4oaSIENyZWF0ZSBuZXcgcHJvamVjdHMgYW5kIG1vZGVscyxcclxuICAgICAgICAgIDxiciBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjU4OjExXCIgLz5cclxuICAgICAgICAgIOKGkiBJbnZpdGUgbmV3IHByb2plY3QgY29sbGFib3JhdG9ycyxcclxuICAgICAgICAgIDxiciBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjYwOjExXCIgLz5cclxuICAgICAgICAgIOKGkiBWaWV3IGNvbW1lbnRzIGFuZCB2ZXJzaW9ucyBvbGRlciB0aGFuIHt7IHZlcnNpb25MaW1pdEZvcm1hdHRlZCB9fSAocGFpZFxyXG4gICAgICAgICAgcGxhbnMgb25seSlcclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2UtaWY9XCJsaW1pdFR5cGUgPT09IFZpZXdlckxpbWl0c0RpYWxvZ1R5cGUuVmVyc2lvblwiPlxyXG4gICAgICAgICAgVGhlIHZlcnNpb24geW91J3JlIHRyeWluZyB0byBsb2FkIGlzIG9sZGVyIHRoYW4gdGhlXHJcbiAgICAgICAgICB7eyB2ZXJzaW9uTGltaXRGb3JtYXR0ZWQgfX0gdmVyc2lvbiBoaXN0b3J5IGxpbWl0IGFsbG93ZWQgZm9yIFBlcnNvbmFsXHJcbiAgICAgICAgICBwcm9qZWN0cy4gTW92ZSB5b3VyIHByb2plY3QgdG8gYSB3b3Jrc3BhY2UgdG8gZ2FpbiBhY2Nlc3MuXHJcbiAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8dGVtcGxhdGUgdi1lbHNlLWlmPVwibGltaXRUeXBlID09PSBWaWV3ZXJMaW1pdHNEaWFsb2dUeXBlLkZlZGVyYXRlZFwiPlxyXG4gICAgICAgICAgT25lIG9mIHRoZSBtb2RlbHMgaXMgb2xkZXIgdGhhbiB0aGUge3sgdmVyc2lvbkxpbWl0Rm9ybWF0dGVkIH19IHZlcnNpb25cclxuICAgICAgICAgIGhpc3RvcnkgbGltaXQgYWxsb3dlZCBmb3IgUGVyc29uYWwgcHJvamVjdHMuIE1vdmUgeW91ciBwcm9qZWN0IHRvIGEgd29ya3NwYWNlXHJcbiAgICAgICAgICB0byBnYWluIGFjY2Vzcy5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPENvbW1vbkFsZXJ0IHYtaWY9XCJpc05vdE93bmVyXCIgY29sb3I9XCJ3YXJuaW5nXCIgaGlkZS1pY29uIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6NzU6N1wiPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSAjdGl0bGU+XHJcbiAgICAgICAgICBZb3UgY2FuJ3QgbW92ZSB0aGUgcHJvamVjdCBiZWNhdXNlIHlvdSdyZSBub3QgYSBwcm9qZWN0IG93bmVyLlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvQ29tbW9uQWxlcnQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktZW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZTo4MDo3XCI+XHJcbiAgICAgICAgPEZvcm1CdXR0b24gdi1pZj1cIiFsaW1pdFR5cGVcIiBjb2xvcj1cInN1YnRsZVwiIEBjbGljaz1cIiRlbWl0KCdjYW5jZWwnKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6ODE6OVwiPlxyXG4gICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uIHYtZWxzZSBjb2xvcj1cInN1YnRsZVwiIEBjbGljaz1cImxvYWRMYXRlc3RWZXJzaW9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZTo4NDo5XCI+XHJcbiAgICAgICAgICBMb2FkIGxhdGVzdCB2ZXJzaW9uXHJcbiAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtdGlwcHk9XCJcclxuICAgICAgICAgICAgY2FuTW92ZVByb2plY3Q/LmF1dGhvcml6ZWQgfHwgaXNOb3RPd25lciA/ICcnIDogY2FuTW92ZVByb2plY3Q/Lm1lc3NhZ2VcclxuICAgICAgICAgIFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9JbnRyby52dWU6ODc6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgOmRpc2FibGVkPVwiIWNhbk1vdmVQcm9qZWN0Py5hdXRob3JpemVkXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwiJGVtaXQoJ2NvbnRpbnVlJylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvSW50cm8udnVlOjkyOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgTW92ZSBwcm9qZWN0XHJcbiAgICAgICAgICA8L0Zvcm1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgTWF5YmVOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB7XHJcbiAgUHJvamVjdE5vQWNjZXNzRXJyb3IsXHJcbiAgUHJvamVjdE5vdEVub3VnaFBlcm1pc3Npb25zRXJyb3JcclxufSBmcm9tICdAc3BlY2tsZS9zaGFyZWQvYXV0aHonXHJcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCB9IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZVBlcnNvbmFsUHJvamVjdExpbWl0cyB9IGZyb20gJ34vbGliL3Byb2plY3RzL2NvbXBvc2FibGVzL3Blcm1pc3Npb25zJ1xyXG5pbXBvcnQgeyBWaWV3ZXJMaW1pdHNEaWFsb2dUeXBlIH0gZnJvbSAnfi9saWIvcHJvamVjdHMvaGVscGVycy9saW1pdHMnXHJcbmltcG9ydCB7IHVzZUxvYWRMYXRlc3RWZXJzaW9uIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3Jlc291cmNlcydcclxuXHJcbmRlZmluZUVtaXRzPHtcclxuICBjYW5jZWw6IFtdXHJcbiAgY29udGludWU6IFtdXHJcbn0+KClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIHByb2plY3Q/OiBNYXliZU51bGxPclVuZGVmaW5lZDxXb3Jrc3BhY2VNb3ZlUHJvamVjdE1hbmFnZXJfUHJvamVjdEZyYWdtZW50PlxyXG4gIGxpbWl0VHlwZT86IFZpZXdlckxpbWl0c0RpYWxvZ1R5cGVcclxufT4oKVxyXG5cclxuY29uc3Qgcm91dGUgPSB1c2VSb3V0ZSgpXHJcbmNvbnN0IGNhbk1vdmVQcm9qZWN0ID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMucHJvamVjdD8ucGVybWlzc2lvbnM/LmNhbk1vdmVUb1dvcmtzcGFjZSlcclxuY29uc3QgeyBsb2FkOiBsb2FkTGF0ZXN0VmVyc2lvbiB9ID0gdXNlTG9hZExhdGVzdFZlcnNpb24oe1xyXG4gIHByb2plY3Q6IGNvbXB1dGVkKCgpID0+IHByb3BzLnByb2plY3QpLFxyXG4gIHJlc291cmNlSWRTdHJpbmc6IGNvbXB1dGVkKCgpID0+IHJvdXRlLnBhcmFtcy5tb2RlbElkIGFzIHN0cmluZykgLy8gdGhpcyBzaG91bGQgb25seSBiZSBvcGVuZWQgaW4gdGhlIHZpZXdlciBhbnl3YXlcclxufSlcclxuY29uc3QgeyB2ZXJzaW9uTGltaXRGb3JtYXR0ZWQgfSA9IHVzZVBlcnNvbmFsUHJvamVjdExpbWl0cygpXHJcblxyXG5jb25zdCBpc05vdE93bmVyID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IGNoZWNrID0gY2FuTW92ZVByb2plY3QudmFsdWVcclxuICBpZiAoIWNoZWNrKSByZXR1cm4gdHJ1ZSAvLyBpZiBubyBwZXJtaXNzaW9uIGNoZWNrLCBhc3N1bWUgbm90IG93bmVyXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICAhY2hlY2suYXV0aG9yaXplZCAmJlxyXG4gICAgKFxyXG4gICAgICBbUHJvamVjdE5vdEVub3VnaFBlcm1pc3Npb25zRXJyb3IuY29kZSwgUHJvamVjdE5vQWNjZXNzRXJyb3IuY29kZV0gYXMgc3RyaW5nW11cclxuICAgICkuaW5jbHVkZXMoY2hlY2suY29kZSlcclxuICApXHJcbn0pXHJcbjwvc2NyaXB0PlxyXG48c3R5bGUgc2NvcGVkPlxyXG4uY2FyZC1zbGlkZS1pbiB7XHJcbiAgYW5pbWF0aW9uOiAycyBzbGlkZS1pbi1yaWdodCBlYXNlLWluLW91dCBmb3J3YXJkcztcclxuICB0b3A6IDhweDtcclxuICBsZWZ0OiAtOHB4O1xyXG4gIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0O1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIHNsaWRlLWluLXJpZ2h0IHtcclxuICAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgdHJhbnNsYXRlWCgwKSByb3RhdGUoLTIwZGVnKSBzY2FsZSgxLjUpO1xyXG4gICAgb3BhY2l0eTogMDtcclxuICB9XHJcblxyXG4gIDEwMCUge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMTZweCkgcm90YXRlKDBkZWcpIHNjYWxlKDEpO1xyXG4gICAgb3BhY2l0eTogMTtcclxuICB9XHJcbn1cclxuPC9zdHlsZT5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L0ludHJvLnZ1ZSJ9