268 lines
27 KiB
Plaintext
268 lines
27 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/automate/viewer/panel/FunctionRunRowObjectResult.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/filters/filter/numeric/Numeric.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createBlock as __createBlock,createElementVNode as __createElementVNode,createElementBlock as __createElementBlock } 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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 {
|
|
CheckIcon,
|
|
XMarkIcon,
|
|
InformationCircleIcon,
|
|
ExclamationTriangleIcon
|
|
} from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
import { useFilterUtilities } from "/_nuxt/lib/viewer/composables/filtering/filtering.ts";
|
|
import { useFilterColoringHelpers } from "/_nuxt/lib/viewer/composables/filtering/coloringHelpers.ts";
|
|
import { containsAll } from "/_nuxt/lib/common/helpers/utils.ts";
|
|
import { isNumericFilter } from "/_nuxt/lib/viewer/helpers/filters/types.ts";
|
|
import { injectGradientDataIntoDataStore } from "/_nuxt/lib/viewer/helpers/filters/utils.ts";
|
|
|
|
import { computed, ref, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "AutomateViewerPanelFunctionRunRowObjectResult",
|
|
props: {
|
|
result: { type: null, required: true },
|
|
functionId: { type: String, required: false }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const props = __props;
|
|
const {
|
|
viewer: {
|
|
metadata: { filteringDataStore }
|
|
}
|
|
} = useInjectedViewerState();
|
|
const { isolateObjects, unIsolateObjects, resetFilters, addActiveFilter, filters } = useFilterUtilities();
|
|
const { setColorFilter, removeColorFilter } = useFilterColoringHelpers();
|
|
const hasMetadataGradient = computed(() => {
|
|
const hasGradient = !!props.result?.metadata?.gradient;
|
|
return hasGradient;
|
|
});
|
|
const isIsolated = computed(() => {
|
|
if (hasMetadataGradient.value) {
|
|
const isolated2 = metadataGradientIsSet.value;
|
|
return isolated2;
|
|
}
|
|
const isolatedIds = filters.isolatedObjectIds.value;
|
|
const ids = resultObjectIds.value;
|
|
const isolated = isolatedIds?.length ? containsAll(ids, isolatedIds) : false;
|
|
return isolated;
|
|
});
|
|
const resultObjectIds = computed(() => {
|
|
const ids = "objectIds" in props.result ? props.result.objectIds : Object.keys(props.result.objectAppIds);
|
|
return ids;
|
|
});
|
|
const handleClick = () => {
|
|
if (hasMetadataGradient.value) {
|
|
setOrUnsetGradient();
|
|
return;
|
|
}
|
|
isolateOrUnisolateObjects();
|
|
};
|
|
const isolateOrUnisolateObjects = () => {
|
|
const ids = resultObjectIds.value;
|
|
if (ids.length === 0) return;
|
|
if (!isIsolated.value) {
|
|
isolateObjects(ids);
|
|
} else {
|
|
unIsolateObjects(ids);
|
|
}
|
|
};
|
|
const metadataGradientIsSet = ref(false);
|
|
const computedPropInfo = computed(() => {
|
|
if (!hasMetadataGradient.value) return;
|
|
if (!props.result.metadata) return;
|
|
if (!props.functionId) return;
|
|
const propInfo = {
|
|
objectCount: 0,
|
|
key: props.functionId,
|
|
type: "number",
|
|
min: Number.MAX_VALUE,
|
|
max: Number.MIN_VALUE,
|
|
valueGroups: [],
|
|
passMin: 0,
|
|
passMax: 0
|
|
};
|
|
const gradientValues = props.result.metadata.gradientValues || {};
|
|
propInfo.objectCount = Object.keys(gradientValues).length;
|
|
for (const [key, { gradientValue: value }] of Object.entries(gradientValues)) {
|
|
const valueGroup = {
|
|
id: key,
|
|
value
|
|
};
|
|
propInfo.valueGroups.push(valueGroup);
|
|
if (propInfo.max < value) propInfo.max = value;
|
|
if (propInfo.min > value) propInfo.min = value;
|
|
}
|
|
propInfo.passMax = propInfo.max;
|
|
propInfo.passMin = propInfo.min;
|
|
return propInfo;
|
|
});
|
|
const computedFilterData = computed(() => {
|
|
if (!metadataGradientIsSet.value || !props.functionId) return;
|
|
const activeFilter = filters.propertyFilters.value.find(
|
|
(f) => f.filter?.key === props.functionId
|
|
);
|
|
return activeFilter && isNumericFilter(activeFilter) ? activeFilter : void 0;
|
|
});
|
|
const setOrUnsetGradient = () => {
|
|
if (metadataGradientIsSet.value) {
|
|
resetFilters();
|
|
removeColorFilter();
|
|
metadataGradientIsSet.value = false;
|
|
return;
|
|
}
|
|
resetFilters();
|
|
if (!props.result.metadata) {
|
|
return;
|
|
}
|
|
if (!computedPropInfo.value) {
|
|
return;
|
|
}
|
|
if (!props.functionId) {
|
|
return;
|
|
}
|
|
const gradientValues = props.result.metadata?.gradientValues || {};
|
|
injectGradientDataIntoDataStore(filteringDataStore, props.functionId, gradientValues);
|
|
metadataGradientIsSet.value = true;
|
|
const filterId = addActiveFilter(computedPropInfo.value);
|
|
setColorFilter(filterId);
|
|
};
|
|
const iconAndColor = computed(() => {
|
|
switch (props.result.level) {
|
|
case "SUCCESS":
|
|
return {
|
|
icon: CheckIcon,
|
|
color: "text-success font-medium"
|
|
};
|
|
case "ERROR":
|
|
return {
|
|
icon: XMarkIcon,
|
|
color: "text-danger font-medium"
|
|
};
|
|
case "WARNING":
|
|
return {
|
|
icon: ExclamationTriangleIcon,
|
|
color: "text-warning font-medium"
|
|
};
|
|
case "INFO":
|
|
default:
|
|
return {
|
|
icon: InformationCircleIcon,
|
|
color: "text-foreground font-medium"
|
|
};
|
|
}
|
|
});
|
|
watch(
|
|
() => filters.propertyFilters.value,
|
|
(newFilters) => {
|
|
if (!props.functionId) return;
|
|
const hasFilter = newFilters.some((f) => f.filter?.key === props.functionId);
|
|
if (!hasFilter && metadataGradientIsSet.value) {
|
|
metadataGradientIsSet.value = false;
|
|
}
|
|
},
|
|
{ deep: true }
|
|
);
|
|
const __returned__ = { props, filteringDataStore, isolateObjects, unIsolateObjects, resetFilters, addActiveFilter, filters, setColorFilter, removeColorFilter, hasMetadataGradient, isIsolated, resultObjectIds, handleClick, isolateOrUnisolateObjects, metadataGradientIsSet, computedPropInfo, computedFilterData, setOrUnsetGradient, iconAndColor };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = {
|
|
class: "overflow-hidden",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:2:3"
|
|
};
|
|
const _hoisted_2 = {
|
|
class: "flex items-center space-x-1",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:11:7"
|
|
};
|
|
const _hoisted_3 = { "data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:12:9" };
|
|
const _hoisted_4 = {
|
|
key: 0,
|
|
class: "text-xs text-foreground-2 pl-5",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:19:7"
|
|
};
|
|
const _hoisted_5 = {
|
|
class: "flex mt-2 px-3 overflow-hidden",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:23:5"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_ViewerFiltersFilterNumeric = __nuxt_component_0;
|
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_createElementVNode(
|
|
"button",
|
|
{
|
|
class: _normalizeClass(`block w-full transition text-left hover:bg-primary-muted hover:shadow-md rounded-md p-1 cursor-pointer border-l-2 ${$setup.isIsolated || $setup.metadataGradientIsSet ? "border-primary bg-primary-muted shadow-md" : "border-transparent"}`),
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.handleClick()),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:3:5"
|
|
},
|
|
[
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_createElementVNode("div", _hoisted_3, [
|
|
(_openBlock(), _createBlock(_resolveDynamicComponent($setup.iconAndColor.icon), {
|
|
class: _normalizeClass(`w-4 h-4 ${$setup.iconAndColor.color}`),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:13:11"
|
|
}, null, 8, ["class"]))
|
|
]),
|
|
_createElementVNode(
|
|
"div",
|
|
{
|
|
class: _normalizeClass(`text-xs ${$setup.iconAndColor.color}`),
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:15:9"
|
|
},
|
|
_toDisplayString($props.result.category) + ": " + _toDisplayString($setup.resultObjectIds.length) + " affected elements ",
|
|
3
|
|
/* TEXT, CLASS */
|
|
)
|
|
]),
|
|
$props.result.message ? (_openBlock(), _createElementBlock(
|
|
"div",
|
|
_hoisted_4,
|
|
_toDisplayString($props.result.message),
|
|
1
|
|
/* TEXT */
|
|
)) : _createCommentVNode("v-if", true)
|
|
],
|
|
2
|
|
/* CLASS */
|
|
),
|
|
_createElementVNode("div", _hoisted_5, [
|
|
$setup.metadataGradientIsSet && $setup.computedFilterData ? (_openBlock(), _createBlock(_component_ViewerFiltersFilterNumeric, {
|
|
key: 0,
|
|
filter: $setup.computedFilterData,
|
|
"no-padding": "",
|
|
"data-v-inspector": "components/automate/viewer/panel/FunctionRunRowObjectResult.vue:24:7"
|
|
}, null, 8, ["filter"])) : _createCommentVNode("v-if", true)
|
|
])
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "f54ba2ce";
|
|
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/automate/viewer/panel/FunctionRunRowObjectResult.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QUFBQSxVQUVNO0FBQUEsVUFGTjtBQUFBLFVBRU0saUJBREQsY0FBTyxPQUFPO0FBQUE7QUFBQTtBQUFBOzs7OztJQUdyQixvQkFNTSxPQU5OLFlBTU07QUFBQSxNQUpJLGdDQUF5QiwyQ0FEakMsYUFJRTtBQUFBO1FBRkMsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUFXLG9CQUFpQjtBQUFBIiwibmFtZXMiOlsiaXNvbGF0ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiRnVuY3Rpb25SdW5Sb3dPYmplY3RSZXN1bHQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZToyOjNcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgOmNsYXNzPVwiYGJsb2NrIHctZnVsbCB0cmFuc2l0aW9uIHRleHQtbGVmdCBob3ZlcjpiZy1wcmltYXJ5LW11dGVkIGhvdmVyOnNoYWRvdy1tZCByb3VuZGVkLW1kIHAtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItbC0yICAke1xyXG4gICAgICAgIGlzSXNvbGF0ZWQgfHwgbWV0YWRhdGFHcmFkaWVudElzU2V0XHJcbiAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSBiZy1wcmltYXJ5LW11dGVkIHNoYWRvdy1tZCdcclxuICAgICAgICAgIDogJ2JvcmRlci10cmFuc3BhcmVudCdcclxuICAgICAgfWBcIlxyXG4gICAgICBAY2xpY2s9XCJoYW5kbGVDbGljaygpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZTozOjVcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZToxMTo3XCI+XHJcbiAgICAgICAgPGRpdiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3dPYmplY3RSZXN1bHQudnVlOjEyOjlcIj5cclxuICAgICAgICAgIDxDb21wb25lbnQgOmlzPVwiaWNvbkFuZENvbG9yLmljb25cIiA6Y2xhc3M9XCJgdy00IGgtNCAke2ljb25BbmRDb2xvci5jb2xvcn1gXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZToxMzoxMVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJgdGV4dC14cyAke2ljb25BbmRDb2xvci5jb2xvcn1gXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZToxNTo5XCI+XHJcbiAgICAgICAgICB7eyByZXN1bHQuY2F0ZWdvcnkgfX06IHt7IHJlc3VsdE9iamVjdElkcy5sZW5ndGggfX0gYWZmZWN0ZWQgZWxlbWVudHNcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgdi1pZj1cInJlc3VsdC5tZXNzYWdlXCIgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZm9yZWdyb3VuZC0yIHBsLTVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3dPYmplY3RSZXN1bHQudnVlOjE5OjdcIj5cclxuICAgICAgICB7eyByZXN1bHQubWVzc2FnZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggbXQtMiBweC0zIG92ZXJmbG93LWhpZGRlblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvd09iamVjdFJlc3VsdC52dWU6MjM6NVwiPlxyXG4gICAgICA8Vmlld2VyRmlsdGVyc0ZpbHRlck51bWVyaWNcclxuICAgICAgICB2LWlmPVwibWV0YWRhdGFHcmFkaWVudElzU2V0ICYmIGNvbXB1dGVkRmlsdGVyRGF0YVwiXHJcbiAgICAgICAgOmZpbHRlcj1cImNvbXB1dGVkRmlsdGVyRGF0YVwiXHJcbiAgICAgICAgbm8tcGFkZGluZyBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3dPYmplY3RSZXN1bHQudnVlOjI0OjdcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgQ2hlY2tJY29uLFxyXG4gIFhNYXJrSWNvbixcclxuICBJbmZvcm1hdGlvbkNpcmNsZUljb24sXHJcbiAgRXhjbGFtYXRpb25UcmlhbmdsZUljb25cclxufSBmcm9tICdAaGVyb2ljb25zL3Z1ZS8yNC9vdXRsaW5lJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zZXR1cCdcclxuaW1wb3J0IHsgdXNlRmlsdGVyVXRpbGl0aWVzIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL2ZpbHRlcmluZy9maWx0ZXJpbmcnXHJcbmltcG9ydCB7IHVzZUZpbHRlckNvbG9yaW5nSGVscGVycyB9IGZyb20gJ34vbGliL3ZpZXdlci9jb21wb3NhYmxlcy9maWx0ZXJpbmcvY29sb3JpbmdIZWxwZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE51bWVyaWNQcm9wZXJ0eUluZm8gfSBmcm9tICdAc3BlY2tsZS92aWV3ZXInXHJcbmltcG9ydCB7IGNvbnRhaW5zQWxsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3V0aWxzJ1xyXG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRlIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgdHlwZSB7IE51bWVyaWNGaWx0ZXJEYXRhIH0gZnJvbSAnfi9saWIvdmlld2VyL2hlbHBlcnMvZmlsdGVycy90eXBlcydcclxuaW1wb3J0IHsgaXNOdW1lcmljRmlsdGVyIH0gZnJvbSAnfi9saWIvdmlld2VyL2hlbHBlcnMvZmlsdGVycy90eXBlcydcclxuaW1wb3J0IHsgaW5qZWN0R3JhZGllbnREYXRhSW50b0RhdGFTdG9yZSB9IGZyb20gJ34vbGliL3ZpZXdlci9oZWxwZXJzL2ZpbHRlcnMvdXRpbHMnXHJcblxyXG50eXBlIE9iamVjdFJlc3VsdCA9IFJlcXVpcmVkPFxyXG4gIEF1dG9tYXRlLkF1dG9tYXRlVHlwZXMuUmVzdWx0c1NjaGVtYVsndmFsdWVzJ11cclxuPlsnb2JqZWN0UmVzdWx0cyddW251bWJlcl1cclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIHJlc3VsdDogT2JqZWN0UmVzdWx0XHJcbiAgZnVuY3Rpb25JZD86IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCB7XHJcbiAgdmlld2VyOiB7XHJcbiAgICBtZXRhZGF0YTogeyBmaWx0ZXJpbmdEYXRhU3RvcmUgfVxyXG4gIH1cclxufSA9IHVzZUluamVjdGVkVmlld2VyU3RhdGUoKVxyXG5cclxuY29uc3QgeyBpc29sYXRlT2JqZWN0cywgdW5Jc29sYXRlT2JqZWN0cywgcmVzZXRGaWx0ZXJzLCBhZGRBY3RpdmVGaWx0ZXIsIGZpbHRlcnMgfSA9XHJcbiAgdXNlRmlsdGVyVXRpbGl0aWVzKClcclxuY29uc3QgeyBzZXRDb2xvckZpbHRlciwgcmVtb3ZlQ29sb3JGaWx0ZXIgfSA9IHVzZUZpbHRlckNvbG9yaW5nSGVscGVycygpXHJcblxyXG5jb25zdCBoYXNNZXRhZGF0YUdyYWRpZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IGhhc0dyYWRpZW50ID0gISFwcm9wcy5yZXN1bHQ/Lm1ldGFkYXRhPy5ncmFkaWVudFxyXG4gIHJldHVybiBoYXNHcmFkaWVudFxyXG59KVxyXG5cclxuY29uc3QgaXNJc29sYXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAvLyBHcmFkaWVudCByZXN1bHRzIHNob3cgYWN0aXZlIHZpYSBtZXRhZGF0YUdyYWRpZW50SXNTZXRcclxuICBpZiAoaGFzTWV0YWRhdGFHcmFkaWVudC52YWx1ZSkge1xyXG4gICAgY29uc3QgaXNvbGF0ZWQgPSBtZXRhZGF0YUdyYWRpZW50SXNTZXQudmFsdWVcclxuICAgIHJldHVybiBpc29sYXRlZFxyXG4gIH1cclxuXHJcbiAgLy8gTm9uLWdyYWRpZW50IHJlc3VsdHMgc2hvdyBhY3RpdmUgaWYgdGhlaXIgb2JqZWN0cyBhcmUgaXNvbGF0ZWRcclxuICBjb25zdCBpc29sYXRlZElkcyA9IGZpbHRlcnMuaXNvbGF0ZWRPYmplY3RJZHMudmFsdWVcclxuICBjb25zdCBpZHMgPSByZXN1bHRPYmplY3RJZHMudmFsdWVcclxuICBjb25zdCBpc29sYXRlZCA9IGlzb2xhdGVkSWRzPy5sZW5ndGggPyBjb250YWluc0FsbChpZHMsIGlzb2xhdGVkSWRzKSA6IGZhbHNlXHJcblxyXG4gIHJldHVybiBpc29sYXRlZFxyXG59KVxyXG5cclxuY29uc3QgcmVzdWx0T2JqZWN0SWRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGNvbnN0IGlkcyA9XHJcbiAgICAnb2JqZWN0SWRzJyBpbiBwcm9wcy5yZXN1bHRcclxuICAgICAgPyBwcm9wcy5yZXN1bHQub2JqZWN0SWRzXHJcbiAgICAgIDogT2JqZWN0LmtleXMocHJvcHMucmVzdWx0Lm9iamVjdEFwcElkcylcclxuXHJcbiAgcmV0dXJuIGlkc1xyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XHJcbiAgaWYgKGhhc01ldGFkYXRhR3JhZGllbnQudmFsdWUpIHtcclxuICAgIHNldE9yVW5zZXRHcmFkaWVudCgpXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGlzb2xhdGVPclVuaXNvbGF0ZU9iamVjdHMoKVxyXG59XHJcblxyXG5jb25zdCBpc29sYXRlT3JVbmlzb2xhdGVPYmplY3RzID0gKCkgPT4ge1xyXG4gIGNvbnN0IGlkcyA9IHJlc3VsdE9iamVjdElkcy52YWx1ZVxyXG4gIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm5cclxuXHJcbiAgaWYgKCFpc0lzb2xhdGVkLnZhbHVlKSB7XHJcbiAgICBpc29sYXRlT2JqZWN0cyhpZHMpXHJcbiAgfSBlbHNlIHtcclxuICAgIHVuSXNvbGF0ZU9iamVjdHMoaWRzKVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgbWV0YWRhdGFHcmFkaWVudElzU2V0ID0gcmVmKGZhbHNlKVxyXG5cclxuLy8gTk9URTogVGhpcyBpcyBjdXJyZW50bHkgYSBoYWNreSBjb252ZW50aW9uISEhXHJcbmNvbnN0IGNvbXB1dGVkUHJvcEluZm8gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgaWYgKCFoYXNNZXRhZGF0YUdyYWRpZW50LnZhbHVlKSByZXR1cm5cclxuICBpZiAoIXByb3BzLnJlc3VsdC5tZXRhZGF0YSkgcmV0dXJuXHJcbiAgaWYgKCFwcm9wcy5mdW5jdGlvbklkKSByZXR1cm5cclxuXHJcbiAgY29uc3QgcHJvcEluZm86IE51bWVyaWNQcm9wZXJ0eUluZm8gPSB7XHJcbiAgICBvYmplY3RDb3VudDogMCxcclxuICAgIGtleTogcHJvcHMuZnVuY3Rpb25JZCxcclxuICAgIHR5cGU6ICdudW1iZXInLFxyXG4gICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxyXG4gICAgbWF4OiBOdW1iZXIuTUlOX1ZBTFVFLFxyXG4gICAgdmFsdWVHcm91cHM6IFtdLFxyXG4gICAgcGFzc01pbjogMCxcclxuICAgIHBhc3NNYXg6IDBcclxuICB9XHJcblxyXG4gIGNvbnN0IGdyYWRpZW50VmFsdWVzID0gcHJvcHMucmVzdWx0Lm1ldGFkYXRhLmdyYWRpZW50VmFsdWVzIHx8IHt9XHJcbiAgcHJvcEluZm8ub2JqZWN0Q291bnQgPSBPYmplY3Qua2V5cyhncmFkaWVudFZhbHVlcykubGVuZ3RoXHJcblxyXG4gIGZvciAoY29uc3QgW2tleSwgeyBncmFkaWVudFZhbHVlOiB2YWx1ZSB9XSBvZiBPYmplY3QuZW50cmllcyhncmFkaWVudFZhbHVlcykpIHtcclxuICAgIGNvbnN0IHZhbHVlR3JvdXAgPSB7XHJcbiAgICAgIGlkOiBrZXksXHJcbiAgICAgIHZhbHVlXHJcbiAgICB9XHJcbiAgICBwcm9wSW5mby52YWx1ZUdyb3Vwcy5wdXNoKHZhbHVlR3JvdXApXHJcbiAgICBpZiAocHJvcEluZm8ubWF4IDwgdmFsdWUpIHByb3BJbmZvLm1heCA9IHZhbHVlXHJcbiAgICBpZiAocHJvcEluZm8ubWluID4gdmFsdWUpIHByb3BJbmZvLm1pbiA9IHZhbHVlXHJcbiAgfVxyXG4gIHByb3BJbmZvLnBhc3NNYXggPSBwcm9wSW5mby5tYXhcclxuICBwcm9wSW5mby5wYXNzTWluID0gcHJvcEluZm8ubWluXHJcbiAgcmV0dXJuIHByb3BJbmZvXHJcbn0pXHJcblxyXG5jb25zdCBjb21wdXRlZEZpbHRlckRhdGEgPSBjb21wdXRlZCgoKTogTnVtZXJpY0ZpbHRlckRhdGEgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmICghbWV0YWRhdGFHcmFkaWVudElzU2V0LnZhbHVlIHx8ICFwcm9wcy5mdW5jdGlvbklkKSByZXR1cm5cclxuXHJcbiAgY29uc3QgYWN0aXZlRmlsdGVyID0gZmlsdGVycy5wcm9wZXJ0eUZpbHRlcnMudmFsdWUuZmluZChcclxuICAgIChmKSA9PiBmLmZpbHRlcj8ua2V5ID09PSBwcm9wcy5mdW5jdGlvbklkXHJcbiAgKVxyXG5cclxuICByZXR1cm4gYWN0aXZlRmlsdGVyICYmIGlzTnVtZXJpY0ZpbHRlcihhY3RpdmVGaWx0ZXIpID8gYWN0aXZlRmlsdGVyIDogdW5kZWZpbmVkXHJcbn0pXHJcblxyXG5jb25zdCBzZXRPclVuc2V0R3JhZGllbnQgPSAoKSA9PiB7XHJcbiAgaWYgKG1ldGFkYXRhR3JhZGllbnRJc1NldC52YWx1ZSkge1xyXG4gICAgcmVzZXRGaWx0ZXJzKClcclxuICAgIHJlbW92ZUNvbG9yRmlsdGVyKClcclxuICAgIG1ldGFkYXRhR3JhZGllbnRJc1NldC52YWx1ZSA9IGZhbHNlXHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVycygpXHJcblxyXG4gIGlmICghcHJvcHMucmVzdWx0Lm1ldGFkYXRhKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIGlmICghY29tcHV0ZWRQcm9wSW5mby52YWx1ZSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBpZiAoIXByb3BzLmZ1bmN0aW9uSWQpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgY29uc3QgZ3JhZGllbnRWYWx1ZXMgPSBwcm9wcy5yZXN1bHQubWV0YWRhdGE/LmdyYWRpZW50VmFsdWVzIHx8IHt9XHJcblxyXG4gIGluamVjdEdyYWRpZW50RGF0YUludG9EYXRhU3RvcmUoZmlsdGVyaW5nRGF0YVN0b3JlLCBwcm9wcy5mdW5jdGlvbklkLCBncmFkaWVudFZhbHVlcylcclxuXHJcbiAgbWV0YWRhdGFHcmFkaWVudElzU2V0LnZhbHVlID0gdHJ1ZVxyXG5cclxuICBjb25zdCBmaWx0ZXJJZCA9IGFkZEFjdGl2ZUZpbHRlcihjb21wdXRlZFByb3BJbmZvLnZhbHVlKVxyXG5cclxuICBzZXRDb2xvckZpbHRlcihmaWx0ZXJJZClcclxufVxyXG5cclxuY29uc3QgaWNvbkFuZENvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHN3aXRjaCAocHJvcHMucmVzdWx0LmxldmVsKSB7XHJcbiAgICBjYXNlICdTVUNDRVNTJzpcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpY29uOiBDaGVja0ljb24sXHJcbiAgICAgICAgY29sb3I6ICd0ZXh0LXN1Y2Nlc3MgZm9udC1tZWRpdW0nXHJcbiAgICAgIH1cclxuICAgIGNhc2UgJ0VSUk9SJzpcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpY29uOiBYTWFya0ljb24sXHJcbiAgICAgICAgY29sb3I6ICd0ZXh0LWRhbmdlciBmb250LW1lZGl1bSdcclxuICAgICAgfVxyXG4gICAgY2FzZSAnV0FSTklORyc6XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWNvbjogRXhjbGFtYXRpb25UcmlhbmdsZUljb24sXHJcbiAgICAgICAgY29sb3I6ICd0ZXh0LXdhcm5pbmcgZm9udC1tZWRpdW0nXHJcbiAgICAgIH1cclxuICAgIGNhc2UgJ0lORk8nOlxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpY29uOiBJbmZvcm1hdGlvbkNpcmNsZUljb24sXHJcbiAgICAgICAgY29sb3I6ICd0ZXh0LWZvcmVncm91bmQgZm9udC1tZWRpdW0nXHJcbiAgICAgIH1cclxuICB9XHJcbn0pXHJcblxyXG53YXRjaChcclxuICAoKSA9PiBmaWx0ZXJzLnByb3BlcnR5RmlsdGVycy52YWx1ZSxcclxuICAobmV3RmlsdGVycykgPT4ge1xyXG4gICAgaWYgKCFwcm9wcy5mdW5jdGlvbklkKSByZXR1cm5cclxuICAgIGNvbnN0IGhhc0ZpbHRlciA9IG5ld0ZpbHRlcnMuc29tZSgoZikgPT4gZi5maWx0ZXI/LmtleSA9PT0gcHJvcHMuZnVuY3Rpb25JZClcclxuICAgIGlmICghaGFzRmlsdGVyICYmIG1ldGFkYXRhR3JhZGllbnRJc1NldC52YWx1ZSkge1xyXG4gICAgICBtZXRhZGF0YUdyYWRpZW50SXNTZXQudmFsdWUgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgeyBkZWVwOiB0cnVlIH1cclxuKVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0LnZ1ZSJ9 |