import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { delegateEvents as _$delegateEvents } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { addEventListener as _$addEventListener } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { className as _$className } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { setAttribute as _$setAttribute } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { effect as _$effect } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { memo as _$memo } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
const _tmpl$ = /*#__PURE__*/_$template(`<div class="flex h-4 items-center">`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class="flex h-full flex-col gap-2"><div class="flex w-full flex-wrap items-center gap-2"><div class="flex items-center gap-2"><div class="tabs-boxed tabs gap-2"></div><select class="select select-bordered select-primary select-sm w-full max-w-full flex-1 sm:select-md"><option value=""></option></select></div><div class="join flex flex-1 items-center md:flex-1"><input type=search class="input join-item input-primary input-sm min-w-0 flex-1 sm:input-md"></div></div><div class="overflow-x-auto whitespace-nowrap rounded-md bg-base-300"><table><thead class="sticky top-0 z-10 h-8"></thead><tbody>`),
|
_tmpl$3 = /*#__PURE__*/_$template(`<button><span></span><div class="badge badge-sm">`),
|
_tmpl$4 = /*#__PURE__*/_$template(`<option>`),
|
_tmpl$5 = /*#__PURE__*/_$template(`<tr>`),
|
_tmpl$6 = /*#__PURE__*/_$template(`<th class=bg-base-200><div><div>`),
|
_tmpl$7 = /*#__PURE__*/_$template(`<button class=cursor-pointer>`),
|
_tmpl$8 = /*#__PURE__*/_$template(`<tr class="hover:!bg-primary hover:text-primary-content">`),
|
_tmpl$9 = /*#__PURE__*/_$template(`<td class=py-2>`),
|
_tmpl$10 = /*#__PURE__*/_$template(`<button><div></div><div></div><div>(<!>)`);
|
import { writeClipboard } from "/node_modules/.vite/deps/@solid-primitives_clipboard.js?v=0143a3b2";
|
import { makePersisted } from "/node_modules/.vite/deps/@solid-primitives_storage.js?v=6c3abd28";
|
import { IconInfoSmall, IconPlayerPause, IconPlayerPlay, IconSettings, IconSortAscending, IconSortDescending, IconX, IconZoomInFilled, IconZoomOutFilled } from "/node_modules/.vite/deps/@tabler_icons-solidjs.js?v=000c47cd";
|
import { rankItem } from "/node_modules/.vite/deps/@tanstack_match-sorter-utils.js?v=406d8158";
|
import { createSolidTable, flexRender, getCoreRowModel, getExpandedRowModel, getFilteredRowModel, getGroupedRowModel, getSortedRowModel } from "/node_modules/@tanstack/solid-table/build/lib/index.mjs?v=d99f92c7";
|
import byteSize from "/node_modules/.vite/deps/byte-size.js?v=b5a96bd7";
|
import __vite__cjsImport15_dayjs from "/node_modules/.vite/deps/dayjs.js?v=7c2851b5"; const dayjs = __vite__cjsImport15_dayjs.__esModule ? __vite__cjsImport15_dayjs.default : __vite__cjsImport15_dayjs;
|
import __vite__cjsImport16_lodash from "/node_modules/.vite/deps/lodash.js?v=dbaf0206"; const uniq = __vite__cjsImport16_lodash["uniq"];
|
import { For, Index, createEffect, createMemo, createSignal, on } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { twMerge } from "/node_modules/.vite/deps/tailwind-merge.js?v=d1b42b68";
|
import { closeAllConnectionsAPI, closeSingleConnectionAPI } from "/src/apis/index.ts";
|
import { Button, ConnectionsSettingsModal, ConnectionsTableDetailsModal } from "/src/components/index.ts";
|
import { CONNECTIONS_TABLE_ACCESSOR_KEY } from "/src/constants/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { allConnections, clientSourceIPTags, connectionsTableColumnOrder, connectionsTableColumnVisibility, connectionsTableSize, formatTimeFromNow, setConnectionsTableColumnOrder, setConnectionsTableColumnVisibility, tableSizeClassName, useConnections } from "/src/signals/index.ts";
|
var ActiveTab = /*#__PURE__*/function (ActiveTab) {
|
ActiveTab[ActiveTab["activeConnections"] = 0] = "activeConnections";
|
ActiveTab[ActiveTab["closedConnections"] = 1] = "closedConnections";
|
return ActiveTab;
|
}(ActiveTab || {});
|
const fuzzyFilter = (row, columnId, value, addMeta) => {
|
// Rank the item
|
const itemRank = rankItem(row.getValue(columnId), value);
|
|
// Store the itemRank info
|
addMeta({
|
itemRank
|
});
|
|
// Return if the item should be filtered in/out
|
return itemRank.passed;
|
};
|
export default (() => {
|
let connectionsSettingsModalRef;
|
let connectionsDetailsModalRef;
|
const [t] = useI18n();
|
const [activeTab, setActiveTab] = createSignal(ActiveTab.activeConnections);
|
const {
|
activeConnections,
|
closedConnections,
|
paused,
|
setPaused
|
} = useConnections();
|
const [globalFilter, setGlobalFilter] = createSignal('');
|
const [selectedConnectionID, setSelectedConnectionID] = createSignal();
|
const columns = [{
|
header: () => t('details'),
|
enableGrouping: false,
|
enableSorting: false,
|
enableColumnFilter: false,
|
enableGlobalFilter: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Details,
|
cell: ({
|
row
|
}) => (() => {
|
const _el$ = _tmpl$();
|
_$insert(_el$, _$createComponent(Button, {
|
"class": "btn-circle btn-xs",
|
onClick: () => {
|
setSelectedConnectionID(row.original.id);
|
connectionsDetailsModalRef?.showModal();
|
},
|
get icon() {
|
return _$createComponent(IconInfoSmall, {
|
size: "16"
|
});
|
}
|
}));
|
return _el$;
|
})()
|
}, {
|
header: () => t('close'),
|
enableGrouping: false,
|
enableSorting: false,
|
enableColumnFilter: false,
|
enableGlobalFilter: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Close,
|
cell: ({
|
row
|
}) => (() => {
|
const _el$2 = _tmpl$();
|
_$insert(_el$2, _$createComponent(Button, {
|
"class": "btn-circle btn-xs",
|
onClick: () => closeSingleConnectionAPI(row.original.id),
|
get icon() {
|
return _$createComponent(IconX, {
|
size: "16"
|
});
|
}
|
}));
|
return _el$2;
|
})()
|
}, {
|
header: () => t('ID'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.ID,
|
accessorFn: original => original.id
|
}, {
|
header: () => t('type'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Type,
|
accessorFn: original => `${original.metadata.type}(${original.metadata.network})`
|
}, {
|
header: () => t('process'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Process,
|
accessorFn: original => original.metadata.process || original.metadata.processPath.replace(/^.*[/\\](.*)$/, '$1') || '-'
|
}, {
|
header: () => t('host'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Host,
|
accessorFn: original => `${original.metadata.host ? original.metadata.host : original.metadata.destinationIP}:${original.metadata.destinationPort}`
|
}, {
|
header: () => t('sniffHost'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.SniffHost,
|
accessorFn: original => original.metadata.sniffHost || '-'
|
}, {
|
header: () => t('rules'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Rule,
|
accessorFn: original => !original.rulePayload ? original.rule : `${original.rule} :: ${original.rulePayload}`
|
}, {
|
header: () => t('chains'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Chains,
|
accessorFn: original => original.chains.slice().reverse().join(' :: ')
|
}, {
|
header: () => t('connectTime'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.ConnectTime,
|
accessorFn: original => formatTimeFromNow(original.start),
|
sortingFn: (prev, next) => dayjs(prev.original.start).valueOf() - dayjs(next.original.start).valueOf()
|
}, {
|
header: () => t('dlSpeed'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.DlSpeed,
|
accessorFn: original => `${byteSize(original.downloadSpeed)}/s`,
|
sortingFn: (prev, next) => prev.original.downloadSpeed - next.original.downloadSpeed
|
}, {
|
header: () => t('ulSpeed'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.ULSpeed,
|
accessorFn: original => `${byteSize(original.uploadSpeed)}/s`,
|
sortingFn: (prev, next) => prev.original.uploadSpeed - next.original.uploadSpeed
|
}, {
|
header: () => t('dl'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Download,
|
accessorFn: original => byteSize(original.download),
|
sortingFn: (prev, next) => prev.original.download - next.original.download
|
}, {
|
header: () => t('ul'),
|
enableGrouping: false,
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Upload,
|
accessorFn: original => byteSize(original.upload),
|
sortingFn: (prev, next) => prev.original.upload - next.original.upload
|
}, {
|
header: () => t('sourceIP'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.SourceIP,
|
accessorFn: original => {
|
const tag = clientSourceIPTags().find(tag => tag.sourceIP === original.metadata.sourceIP);
|
return tag ? tag.tagName : original.metadata.sourceIP;
|
}
|
}, {
|
header: () => t('sourcePort'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.SourcePort,
|
accessorFn: original => original.metadata.sourcePort
|
}, {
|
header: () => t('destination'),
|
accessorKey: CONNECTIONS_TABLE_ACCESSOR_KEY.Destination,
|
accessorFn: original => original.metadata.remoteDestination || original.metadata.destinationIP || original.metadata.host
|
}];
|
const [grouping, setGrouping] = createSignal([]);
|
const [sorting, setSorting] = makePersisted(createSignal([{
|
id: CONNECTIONS_TABLE_ACCESSOR_KEY.ConnectTime,
|
desc: true
|
}]), {
|
name: 'connectionsTableSorting',
|
storage: localStorage
|
});
|
const table = createSolidTable({
|
filterFns: {
|
fuzzy: fuzzyFilter
|
},
|
state: {
|
get columnOrder() {
|
return connectionsTableColumnOrder();
|
},
|
get grouping() {
|
return grouping();
|
},
|
get sorting() {
|
return sorting();
|
},
|
get columnVisibility() {
|
return connectionsTableColumnVisibility();
|
},
|
get globalFilter() {
|
return globalFilter();
|
}
|
},
|
get data() {
|
return activeTab() === ActiveTab.activeConnections ? activeConnections() : closedConnections();
|
},
|
sortDescFirst: true,
|
enableHiding: true,
|
columns,
|
onGlobalFilterChange: setGlobalFilter,
|
globalFilterFn: fuzzyFilter,
|
onGroupingChange: setGrouping,
|
onSortingChange: setSorting,
|
getFilteredRowModel: getFilteredRowModel(),
|
getSortedRowModel: getSortedRowModel(),
|
getExpandedRowModel: getExpandedRowModel(),
|
getGroupedRowModel: getGroupedRowModel(),
|
getCoreRowModel: getCoreRowModel()
|
});
|
const sourceIPHeader = table.getFlatHeaders().find(({
|
id
|
}) => id === CONNECTIONS_TABLE_ACCESSOR_KEY.SourceIP);
|
const [sourceIPFilter, setSourceIPFilter] = createSignal('');
|
createEffect(on(sourceIPFilter, () => {
|
const tagged = clientSourceIPTags().find(tag => tag.sourceIP === sourceIPFilter());
|
sourceIPHeader?.column.setFilterValue(tagged ? tagged.tagName : sourceIPFilter());
|
}));
|
const tabs = createMemo(() => [{
|
type: ActiveTab.activeConnections,
|
name: t('active'),
|
count: activeConnections().length
|
}, {
|
type: ActiveTab.closedConnections,
|
name: t('closed'),
|
count: closedConnections().length
|
}]);
|
return (() => {
|
const _el$3 = _tmpl$2(),
|
_el$4 = _el$3.firstChild,
|
_el$5 = _el$4.firstChild,
|
_el$6 = _el$5.firstChild,
|
_el$7 = _el$6.nextSibling,
|
_el$8 = _el$7.firstChild,
|
_el$9 = _el$5.nextSibling,
|
_el$10 = _el$9.firstChild,
|
_el$11 = _el$4.nextSibling,
|
_el$12 = _el$11.firstChild,
|
_el$13 = _el$12.firstChild,
|
_el$14 = _el$13.nextSibling;
|
_$insert(_el$6, _$createComponent(Index, {
|
get each() {
|
return tabs();
|
},
|
children: tab => (() => {
|
const _el$15 = _tmpl$3(),
|
_el$16 = _el$15.firstChild,
|
_el$17 = _el$16.nextSibling;
|
_el$15.$$click = () => setActiveTab(tab().type);
|
_$insert(_el$16, () => tab().name);
|
_$insert(_el$17, () => tab().count);
|
_$effect(() => _$className(_el$15, twMerge(activeTab() === tab().type && 'tab-active', 'tab tab-sm gap-2 sm:tab-md')));
|
return _el$15;
|
})()
|
}));
|
_el$7.addEventListener("change", e => setSourceIPFilter(e.target.value));
|
_$insert(_el$8, () => t('all'));
|
_$insert(_el$7, _$createComponent(Index, {
|
get each() {
|
return uniq(allConnections().map(({
|
metadata: {
|
sourceIP
|
}
|
}) => {
|
const tagged = clientSourceIPTags().find(tag => tag.sourceIP === sourceIP);
|
return tagged ? tagged.tagName : sourceIP;
|
})).sort();
|
},
|
children: sourceIP => (() => {
|
const _el$18 = _tmpl$4();
|
_$insert(_el$18, sourceIP);
|
_$effect(() => _el$18.value = sourceIP());
|
return _el$18;
|
})()
|
}), null);
|
_el$10.$$input = e => setGlobalFilter(e.target.value);
|
_$insert(_el$9, _$createComponent(Button, {
|
"class": "join-item btn-sm sm:btn-md",
|
onClick: () => setPaused(paused => !paused),
|
get icon() {
|
return _$memo(() => !!paused())() ? _$createComponent(IconPlayerPlay, {}) : _$createComponent(IconPlayerPause, {});
|
}
|
}), null);
|
_$insert(_el$9, _$createComponent(Button, {
|
"class": "join-item btn-sm sm:btn-md",
|
onClick: () => {
|
if (table.getState().globalFilter) {
|
table.getFilteredRowModel().rows.forEach(({
|
id
|
}) => closeSingleConnectionAPI(id));
|
} else {
|
closeAllConnectionsAPI();
|
}
|
},
|
get icon() {
|
return _$createComponent(IconX, {});
|
}
|
}), null);
|
_$insert(_el$9, _$createComponent(Button, {
|
"class": "btn join-item btn-sm sm:btn-md",
|
onClick: () => connectionsSettingsModalRef?.showModal(),
|
get icon() {
|
return _$createComponent(IconSettings, {});
|
}
|
}), null);
|
_$insert(_el$13, _$createComponent(For, {
|
get each() {
|
return table.getHeaderGroups();
|
},
|
children: headerGroup => (() => {
|
const _el$19 = _tmpl$5();
|
_$insert(_el$19, _$createComponent(For, {
|
get each() {
|
return headerGroup.headers;
|
},
|
children: header => (() => {
|
const _el$20 = _tmpl$6(),
|
_el$21 = _el$20.firstChild,
|
_el$22 = _el$21.firstChild;
|
_$insert(_el$21, (() => {
|
const _c$ = _$memo(() => !!header.column.getCanGroup());
|
return () => _c$() ? (() => {
|
const _el$23 = _tmpl$7();
|
_$addEventListener(_el$23, "click", header.column.getToggleGroupingHandler(), true);
|
_$insert(_el$23, (() => {
|
const _c$2 = _$memo(() => !!header.column.getIsGrouped());
|
return () => _c$2() ? _$createComponent(IconZoomOutFilled, {
|
size: 18
|
}) : _$createComponent(IconZoomInFilled, {
|
size: 18
|
});
|
})());
|
return _el$23;
|
})() : null;
|
})(), _el$22);
|
_$addEventListener(_el$22, "click", header.column.getToggleSortingHandler(), true);
|
_$insert(_el$22, () => flexRender(header.column.columnDef.header, header.getContext()));
|
_$insert(_el$21, () => ({
|
asc: _$createComponent(IconSortAscending, {}),
|
desc: _$createComponent(IconSortDescending, {})
|
})[header.column.getIsSorted()] ?? null, null);
|
_$effect(_p$ => {
|
const _v$3 = twMerge('flex items-center gap-2'),
|
_v$4 = twMerge(header.column.getCanSort() && 'cursor-pointer select-none', 'flex-1');
|
_v$3 !== _p$._v$3 && _$className(_el$21, _p$._v$3 = _v$3);
|
_v$4 !== _p$._v$4 && _$className(_el$22, _p$._v$4 = _v$4);
|
return _p$;
|
}, {
|
_v$3: undefined,
|
_v$4: undefined
|
});
|
return _el$20;
|
})()
|
}));
|
return _el$19;
|
})()
|
}));
|
_$insert(_el$14, _$createComponent(For, {
|
get each() {
|
return table.getRowModel().rows;
|
},
|
children: row => (() => {
|
const _el$24 = _tmpl$8();
|
_$insert(_el$24, _$createComponent(For, {
|
get each() {
|
return row.getVisibleCells();
|
},
|
children: cell => {
|
return (() => {
|
const _el$25 = _tmpl$9();
|
_el$25.$$contextmenu = e => {
|
e.preventDefault();
|
const value = cell.renderValue();
|
value && writeClipboard(value).catch(() => {});
|
};
|
_$insert(_el$25, (() => {
|
const _c$3 = _$memo(() => !!cell.getIsGrouped());
|
return () => _c$3() ? (() => {
|
const _el$26 = _tmpl$10(),
|
_el$27 = _el$26.firstChild,
|
_el$28 = _el$27.nextSibling,
|
_el$29 = _el$28.nextSibling,
|
_el$30 = _el$29.firstChild,
|
_el$32 = _el$30.nextSibling,
|
_el$31 = _el$32.nextSibling;
|
_$addEventListener(_el$26, "click", row.getToggleExpandedHandler(), true);
|
_$insert(_el$27, (() => {
|
const _c$6 = _$memo(() => !!row.getIsExpanded());
|
return () => _c$6() ? _$createComponent(IconZoomOutFilled, {
|
size: 18
|
}) : _$createComponent(IconZoomInFilled, {
|
size: 18
|
});
|
})());
|
_$insert(_el$28, () => flexRender(cell.column.columnDef.cell, cell.getContext()));
|
_$insert(_el$29, () => row.subRows.length, _el$32);
|
_$effect(() => _$className(_el$26, twMerge(row.getCanExpand() ? 'cursor-pointer' : 'cursor-normal', 'flex items-center gap-2')));
|
return _el$26;
|
})() : (() => {
|
const _c$4 = _$memo(() => !!cell.getIsAggregated());
|
return () => _c$4() ? flexRender(cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell, cell.getContext()) : (() => {
|
const _c$5 = _$memo(() => !!cell.getIsPlaceholder());
|
return () => _c$5() ? null : flexRender(cell.column.columnDef.cell, cell.getContext());
|
})();
|
})();
|
})());
|
return _el$25;
|
})();
|
}
|
}));
|
return _el$24;
|
})()
|
}));
|
_$insert(_el$3, _$createComponent(ConnectionsSettingsModal, {
|
ref: el => connectionsSettingsModalRef = el,
|
get order() {
|
return connectionsTableColumnOrder();
|
},
|
get visible() {
|
return connectionsTableColumnVisibility();
|
},
|
onOrderChange: data => setConnectionsTableColumnOrder(data),
|
onVisibleChange: data => setConnectionsTableColumnVisibility({
|
...data
|
})
|
}), null);
|
_$insert(_el$3, _$createComponent(ConnectionsTableDetailsModal, {
|
ref: el => connectionsDetailsModalRef = el,
|
get selectedConnectionID() {
|
return selectedConnectionID();
|
}
|
}), null);
|
_$effect(_p$ => {
|
const _v$ = t('search'),
|
_v$2 = twMerge(tableSizeClassName(connectionsTableSize()), 'table table-zebra relative rounded-none');
|
_v$ !== _p$._v$ && _$setAttribute(_el$10, "placeholder", _p$._v$ = _v$);
|
_v$2 !== _p$._v$2 && _$className(_el$12, _p$._v$2 = _v$2);
|
return _p$;
|
}, {
|
_v$: undefined,
|
_v$2: undefined
|
});
|
return _el$3;
|
})();
|
});
|
_$delegateEvents(["input", "click", "contextmenu"]);
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3cml0ZUNsaXBib2FyZCIsIm1ha2VQZXJzaXN0ZWQiLCJJY29uSW5mb1NtYWxsIiwiSWNvblBsYXllclBhdXNlIiwiSWNvblBsYXllclBsYXkiLCJJY29uU2V0dGluZ3MiLCJJY29uU29ydEFzY2VuZGluZyIsIkljb25Tb3J0RGVzY2VuZGluZyIsIkljb25YIiwiSWNvblpvb21JbkZpbGxlZCIsIkljb25ab29tT3V0RmlsbGVkIiwicmFua0l0ZW0iLCJjcmVhdGVTb2xpZFRhYmxlIiwiZmxleFJlbmRlciIsImdldENvcmVSb3dNb2RlbCIsImdldEV4cGFuZGVkUm93TW9kZWwiLCJnZXRGaWx0ZXJlZFJvd01vZGVsIiwiZ2V0R3JvdXBlZFJvd01vZGVsIiwiZ2V0U29ydGVkUm93TW9kZWwiLCJieXRlU2l6ZSIsImRheWpzIiwidW5pcSIsIkZvciIsIkluZGV4IiwiY3JlYXRlRWZmZWN0IiwiY3JlYXRlTWVtbyIsImNyZWF0ZVNpZ25hbCIsIm9uIiwidHdNZXJnZSIsImNsb3NlQWxsQ29ubmVjdGlvbnNBUEkiLCJjbG9zZVNpbmdsZUNvbm5lY3Rpb25BUEkiLCJCdXR0b24iLCJDb25uZWN0aW9uc1NldHRpbmdzTW9kYWwiLCJDb25uZWN0aW9uc1RhYmxlRGV0YWlsc01vZGFsIiwiQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZIiwidXNlSTE4biIsImFsbENvbm5lY3Rpb25zIiwiY2xpZW50U291cmNlSVBUYWdzIiwiY29ubmVjdGlvbnNUYWJsZUNvbHVtbk9yZGVyIiwiY29ubmVjdGlvbnNUYWJsZUNvbHVtblZpc2liaWxpdHkiLCJjb25uZWN0aW9uc1RhYmxlU2l6ZSIsImZvcm1hdFRpbWVGcm9tTm93Iiwic2V0Q29ubmVjdGlvbnNUYWJsZUNvbHVtbk9yZGVyIiwic2V0Q29ubmVjdGlvbnNUYWJsZUNvbHVtblZpc2liaWxpdHkiLCJ0YWJsZVNpemVDbGFzc05hbWUiLCJ1c2VDb25uZWN0aW9ucyIsIkFjdGl2ZVRhYiIsImZ1enp5RmlsdGVyIiwicm93IiwiY29sdW1uSWQiLCJ2YWx1ZSIsImFkZE1ldGEiLCJpdGVtUmFuayIsImdldFZhbHVlIiwicGFzc2VkIiwiY29ubmVjdGlvbnNTZXR0aW5nc01vZGFsUmVmIiwiY29ubmVjdGlvbnNEZXRhaWxzTW9kYWxSZWYiLCJ0IiwiYWN0aXZlVGFiIiwic2V0QWN0aXZlVGFiIiwiYWN0aXZlQ29ubmVjdGlvbnMiLCJjbG9zZWRDb25uZWN0aW9ucyIsInBhdXNlZCIsInNldFBhdXNlZCIsImdsb2JhbEZpbHRlciIsInNldEdsb2JhbEZpbHRlciIsInNlbGVjdGVkQ29ubmVjdGlvbklEIiwic2V0U2VsZWN0ZWRDb25uZWN0aW9uSUQiLCJjb2x1bW5zIiwiaGVhZGVyIiwiZW5hYmxlR3JvdXBpbmciLCJlbmFibGVTb3J0aW5nIiwiZW5hYmxlQ29sdW1uRmlsdGVyIiwiZW5hYmxlR2xvYmFsRmlsdGVyIiwiYWNjZXNzb3JLZXkiLCJEZXRhaWxzIiwiY2VsbCIsIl9lbCQiLCJfdG1wbCQiLCJfJGluc2VydCIsIl8kY3JlYXRlQ29tcG9uZW50Iiwib25DbGljayIsIm9yaWdpbmFsIiwiaWQiLCJzaG93TW9kYWwiLCJpY29uIiwic2l6ZSIsIkNsb3NlIiwiX2VsJDIiLCJJRCIsImFjY2Vzc29yRm4iLCJUeXBlIiwibWV0YWRhdGEiLCJ0eXBlIiwibmV0d29yayIsIlByb2Nlc3MiLCJwcm9jZXNzIiwicHJvY2Vzc1BhdGgiLCJyZXBsYWNlIiwiSG9zdCIsImhvc3QiLCJkZXN0aW5hdGlvbklQIiwiZGVzdGluYXRpb25Qb3J0IiwiU25pZmZIb3N0Iiwic25pZmZIb3N0IiwiUnVsZSIsInJ1bGVQYXlsb2FkIiwicnVsZSIsIkNoYWlucyIsImNoYWlucyIsInNsaWNlIiwicmV2ZXJzZSIsImpvaW4iLCJDb25uZWN0VGltZSIsInN0YXJ0Iiwic29ydGluZ0ZuIiwicHJldiIsIm5leHQiLCJ2YWx1ZU9mIiwiRGxTcGVlZCIsImRvd25sb2FkU3BlZWQiLCJVTFNwZWVkIiwidXBsb2FkU3BlZWQiLCJEb3dubG9hZCIsImRvd25sb2FkIiwiVXBsb2FkIiwidXBsb2FkIiwiU291cmNlSVAiLCJ0YWciLCJmaW5kIiwic291cmNlSVAiLCJ0YWdOYW1lIiwiU291cmNlUG9ydCIsInNvdXJjZVBvcnQiLCJEZXN0aW5hdGlvbiIsInJlbW90ZURlc3RpbmF0aW9uIiwiZ3JvdXBpbmciLCJzZXRHcm91cGluZyIsInNvcnRpbmciLCJzZXRTb3J0aW5nIiwiZGVzYyIsIm5hbWUiLCJzdG9yYWdlIiwibG9jYWxTdG9yYWdlIiwidGFibGUiLCJmaWx0ZXJGbnMiLCJmdXp6eSIsInN0YXRlIiwiY29sdW1uT3JkZXIiLCJjb2x1bW5WaXNpYmlsaXR5IiwiZGF0YSIsInNvcnREZXNjRmlyc3QiLCJlbmFibGVIaWRpbmciLCJvbkdsb2JhbEZpbHRlckNoYW5nZSIsImdsb2JhbEZpbHRlckZuIiwib25Hcm91cGluZ0NoYW5nZSIsIm9uU29ydGluZ0NoYW5nZSIsInNvdXJjZUlQSGVhZGVyIiwiZ2V0RmxhdEhlYWRlcnMiLCJzb3VyY2VJUEZpbHRlciIsInNldFNvdXJjZUlQRmlsdGVyIiwidGFnZ2VkIiwiY29sdW1uIiwic2V0RmlsdGVyVmFsdWUiLCJ0YWJzIiwiY291bnQiLCJsZW5ndGgiLCJfZWwkMyIsIl90bXBsJDIiLCJfZWwkNCIsImZpcnN0Q2hpbGQiLCJfZWwkNSIsIl9lbCQ2IiwiX2VsJDciLCJuZXh0U2libGluZyIsIl9lbCQ4IiwiX2VsJDkiLCJfZWwkMTAiLCJfZWwkMTEiLCJfZWwkMTIiLCJfZWwkMTMiLCJfZWwkMTQiLCJlYWNoIiwiY2hpbGRyZW4iLCJ0YWIiLCJfZWwkMTUiLCJfdG1wbCQzIiwiX2VsJDE2IiwiX2VsJDE3IiwiJCRjbGljayIsIl8kZWZmZWN0IiwiXyRjbGFzc05hbWUiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsIm1hcCIsInNvcnQiLCJfZWwkMTgiLCJfdG1wbCQ0IiwiJCRpbnB1dCIsIl8kbWVtbyIsImdldFN0YXRlIiwicm93cyIsImZvckVhY2giLCJnZXRIZWFkZXJHcm91cHMiLCJoZWFkZXJHcm91cCIsIl9lbCQxOSIsIl90bXBsJDUiLCJoZWFkZXJzIiwiX2VsJDIwIiwiX3RtcGwkNiIsIl9lbCQyMSIsIl9lbCQyMiIsIl9jJCIsImdldENhbkdyb3VwIiwiX2VsJDIzIiwiX3RtcGwkNyIsIl8kYWRkRXZlbnRMaXN0ZW5lciIsImdldFRvZ2dsZUdyb3VwaW5nSGFuZGxlciIsIl9jJDIiLCJnZXRJc0dyb3VwZWQiLCJnZXRUb2dnbGVTb3J0aW5nSGFuZGxlciIsImNvbHVtbkRlZiIsImdldENvbnRleHQiLCJhc2MiLCJnZXRJc1NvcnRlZCIsIl9wJCIsIl92JDMiLCJfdiQ0IiwiZ2V0Q2FuU29ydCIsInVuZGVmaW5lZCIsImdldFJvd01vZGVsIiwiX2VsJDI0IiwiX3RtcGwkOCIsImdldFZpc2libGVDZWxscyIsIl9lbCQyNSIsIl90bXBsJDkiLCIkJGNvbnRleHRtZW51IiwicHJldmVudERlZmF1bHQiLCJyZW5kZXJWYWx1ZSIsImNhdGNoIiwiX2MkMyIsIl9lbCQyNiIsIl90bXBsJDEwIiwiX2VsJDI3IiwiX2VsJDI4IiwiX2VsJDI5IiwiX2VsJDMwIiwiX2VsJDMyIiwiX2VsJDMxIiwiZ2V0VG9nZ2xlRXhwYW5kZWRIYW5kbGVyIiwiX2MkNiIsImdldElzRXhwYW5kZWQiLCJzdWJSb3dzIiwiZ2V0Q2FuRXhwYW5kIiwiX2MkNCIsImdldElzQWdncmVnYXRlZCIsImFnZ3JlZ2F0ZWRDZWxsIiwiX2MkNSIsImdldElzUGxhY2Vob2xkZXIiLCJyZWYiLCJlbCIsIm9yZGVyIiwidmlzaWJsZSIsIm9uT3JkZXJDaGFuZ2UiLCJvblZpc2libGVDaGFuZ2UiLCJfdiQiLCJfdiQyIiwiXyRzZXRBdHRyaWJ1dGUiLCJfJGRlbGVnYXRlRXZlbnRzIl0sInNvdXJjZXMiOlsiQ29ubmVjdGlvbnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdyaXRlQ2xpcGJvYXJkIH0gZnJvbSAnQHNvbGlkLXByaW1pdGl2ZXMvY2xpcGJvYXJkJ1xyXG5pbXBvcnQgeyBtYWtlUGVyc2lzdGVkIH0gZnJvbSAnQHNvbGlkLXByaW1pdGl2ZXMvc3RvcmFnZSdcclxuaW1wb3J0IHtcclxuICBJY29uSW5mb1NtYWxsLFxyXG4gIEljb25QbGF5ZXJQYXVzZSxcclxuICBJY29uUGxheWVyUGxheSxcclxuICBJY29uU2V0dGluZ3MsXHJcbiAgSWNvblNvcnRBc2NlbmRpbmcsXHJcbiAgSWNvblNvcnREZXNjZW5kaW5nLFxyXG4gIEljb25YLFxyXG4gIEljb25ab29tSW5GaWxsZWQsXHJcbiAgSWNvblpvb21PdXRGaWxsZWQsXHJcbn0gZnJvbSAnQHRhYmxlci9pY29ucy1zb2xpZGpzJ1xyXG5pbXBvcnQgeyByYW5rSXRlbSB9IGZyb20gJ0B0YW5zdGFjay9tYXRjaC1zb3J0ZXItdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgQ29sdW1uRGVmLFxyXG4gIEZpbHRlckZuLFxyXG4gIEdyb3VwaW5nU3RhdGUsXHJcbiAgU29ydGluZ1N0YXRlLFxyXG4gIGNyZWF0ZVNvbGlkVGFibGUsXHJcbiAgZmxleFJlbmRlcixcclxuICBnZXRDb3JlUm93TW9kZWwsXHJcbiAgZ2V0RXhwYW5kZWRSb3dNb2RlbCxcclxuICBnZXRGaWx0ZXJlZFJvd01vZGVsLFxyXG4gIGdldEdyb3VwZWRSb3dNb2RlbCxcclxuICBnZXRTb3J0ZWRSb3dNb2RlbCxcclxufSBmcm9tICdAdGFuc3RhY2svc29saWQtdGFibGUnXHJcbmltcG9ydCBieXRlU2l6ZSBmcm9tICdieXRlLXNpemUnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHtcclxuICBGb3IsXHJcbiAgSW5kZXgsXHJcbiAgY3JlYXRlRWZmZWN0LFxyXG4gIGNyZWF0ZU1lbW8sXHJcbiAgY3JlYXRlU2lnbmFsLFxyXG4gIG9uLFxyXG59IGZyb20gJ3NvbGlkLWpzJ1xyXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXHJcbmltcG9ydCB7IGNsb3NlQWxsQ29ubmVjdGlvbnNBUEksIGNsb3NlU2luZ2xlQ29ubmVjdGlvbkFQSSB9IGZyb20gJ34vYXBpcydcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ29ubmVjdGlvbnNTZXR0aW5nc01vZGFsLFxyXG4gIENvbm5lY3Rpb25zVGFibGVEZXRhaWxzTW9kYWwsXHJcbn0gZnJvbSAnfi9jb21wb25lbnRzJ1xyXG5pbXBvcnQgeyBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkgfSBmcm9tICd+L2NvbnN0YW50cydcclxuaW1wb3J0IHsgdXNlSTE4biB9IGZyb20gJ34vaTE4bidcclxuaW1wb3J0IHtcclxuICBhbGxDb25uZWN0aW9ucyxcclxuICBjbGllbnRTb3VyY2VJUFRhZ3MsXHJcbiAgY29ubmVjdGlvbnNUYWJsZUNvbHVtbk9yZGVyLFxyXG4gIGNvbm5lY3Rpb25zVGFibGVDb2x1bW5WaXNpYmlsaXR5LFxyXG4gIGNvbm5lY3Rpb25zVGFibGVTaXplLFxyXG4gIGZvcm1hdFRpbWVGcm9tTm93LFxyXG4gIHNldENvbm5lY3Rpb25zVGFibGVDb2x1bW5PcmRlcixcclxuICBzZXRDb25uZWN0aW9uc1RhYmxlQ29sdW1uVmlzaWJpbGl0eSxcclxuICB0YWJsZVNpemVDbGFzc05hbWUsXHJcbiAgdXNlQ29ubmVjdGlvbnMsXHJcbn0gZnJvbSAnfi9zaWduYWxzJ1xyXG5pbXBvcnQgdHlwZSB7IENvbm5lY3Rpb24gfSBmcm9tICd+L3R5cGVzJ1xyXG5cclxuZW51bSBBY3RpdmVUYWIge1xyXG4gIGFjdGl2ZUNvbm5lY3Rpb25zLFxyXG4gIGNsb3NlZENvbm5lY3Rpb25zLFxyXG59XHJcblxyXG5jb25zdCBmdXp6eUZpbHRlcjogRmlsdGVyRm48Q29ubmVjdGlvbj4gPSAocm93LCBjb2x1bW5JZCwgdmFsdWUsIGFkZE1ldGEpID0+IHtcclxuICAvLyBSYW5rIHRoZSBpdGVtXHJcbiAgY29uc3QgaXRlbVJhbmsgPSByYW5rSXRlbShyb3cuZ2V0VmFsdWUoY29sdW1uSWQpLCB2YWx1ZSlcclxuXHJcbiAgLy8gU3RvcmUgdGhlIGl0ZW1SYW5rIGluZm9cclxuICBhZGRNZXRhKHtcclxuICAgIGl0ZW1SYW5rLFxyXG4gIH0pXHJcblxyXG4gIC8vIFJldHVybiBpZiB0aGUgaXRlbSBzaG91bGQgYmUgZmlsdGVyZWQgaW4vb3V0XHJcbiAgcmV0dXJuIGl0ZW1SYW5rLnBhc3NlZFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XHJcbiAgbGV0IGNvbm5lY3Rpb25zU2V0dGluZ3NNb2RhbFJlZjogSFRNTERpYWxvZ0VsZW1lbnQgfCB1bmRlZmluZWRcclxuICBsZXQgY29ubmVjdGlvbnNEZXRhaWxzTW9kYWxSZWY6IEhUTUxEaWFsb2dFbGVtZW50IHwgdW5kZWZpbmVkXHJcblxyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG5cclxuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gY3JlYXRlU2lnbmFsKEFjdGl2ZVRhYi5hY3RpdmVDb25uZWN0aW9ucylcclxuICBjb25zdCB7IGFjdGl2ZUNvbm5lY3Rpb25zLCBjbG9zZWRDb25uZWN0aW9ucywgcGF1c2VkLCBzZXRQYXVzZWQgfSA9XHJcbiAgICB1c2VDb25uZWN0aW9ucygpXHJcblxyXG4gIGNvbnN0IFtnbG9iYWxGaWx0ZXIsIHNldEdsb2JhbEZpbHRlcl0gPSBjcmVhdGVTaWduYWwoJycpXHJcblxyXG4gIGNvbnN0IFtzZWxlY3RlZENvbm5lY3Rpb25JRCwgc2V0U2VsZWN0ZWRDb25uZWN0aW9uSURdID0gY3JlYXRlU2lnbmFsPHN0cmluZz4oKVxyXG5cclxuICBjb25zdCBjb2x1bW5zOiBDb2x1bW5EZWY8Q29ubmVjdGlvbj5bXSA9IFtcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCdkZXRhaWxzJyksXHJcbiAgICAgIGVuYWJsZUdyb3VwaW5nOiBmYWxzZSxcclxuICAgICAgZW5hYmxlU29ydGluZzogZmFsc2UsXHJcbiAgICAgIGVuYWJsZUNvbHVtbkZpbHRlcjogZmFsc2UsXHJcbiAgICAgIGVuYWJsZUdsb2JhbEZpbHRlcjogZmFsc2UsXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuRGV0YWlscyxcclxuICAgICAgY2VsbDogKHsgcm93IH0pID0+IChcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTQgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNpcmNsZSBidG4teHNcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDb25uZWN0aW9uSUQocm93Lm9yaWdpbmFsLmlkKVxyXG5cclxuICAgICAgICAgICAgICBjb25uZWN0aW9uc0RldGFpbHNNb2RhbFJlZj8uc2hvd01vZGFsKClcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgaWNvbj17PEljb25JbmZvU21hbGwgc2l6ZT1cIjE2XCIgLz59XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCdjbG9zZScpLFxyXG4gICAgICBlbmFibGVHcm91cGluZzogZmFsc2UsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IGZhbHNlLFxyXG4gICAgICBlbmFibGVDb2x1bW5GaWx0ZXI6IGZhbHNlLFxyXG4gICAgICBlbmFibGVHbG9iYWxGaWx0ZXI6IGZhbHNlLFxyXG4gICAgICBhY2Nlc3NvcktleTogQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLkNsb3NlLFxyXG4gICAgICBjZWxsOiAoeyByb3cgfSkgPT4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtNCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2lyY2xlIGJ0bi14c1wiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlU2luZ2xlQ29ubmVjdGlvbkFQSShyb3cub3JpZ2luYWwuaWQpfVxyXG4gICAgICAgICAgICBpY29uPXs8SWNvblggc2l6ZT1cIjE2XCIgLz59XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCdJRCcpLFxyXG4gICAgICBlbmFibGVHcm91cGluZzogZmFsc2UsXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuSUQsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT4gb3JpZ2luYWwuaWQsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6ICgpID0+IHQoJ3R5cGUnKSxcclxuICAgICAgYWNjZXNzb3JLZXk6IENPTk5FQ1RJT05TX1RBQkxFX0FDQ0VTU09SX0tFWS5UeXBlLFxyXG4gICAgICBhY2Nlc3NvckZuOiAob3JpZ2luYWwpID0+XHJcbiAgICAgICAgYCR7b3JpZ2luYWwubWV0YWRhdGEudHlwZX0oJHtvcmlnaW5hbC5tZXRhZGF0YS5uZXR3b3JrfSlgLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCdwcm9jZXNzJyksXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuUHJvY2VzcyxcclxuICAgICAgYWNjZXNzb3JGbjogKG9yaWdpbmFsKSA9PlxyXG4gICAgICAgIG9yaWdpbmFsLm1ldGFkYXRhLnByb2Nlc3MgfHxcclxuICAgICAgICBvcmlnaW5hbC5tZXRhZGF0YS5wcm9jZXNzUGF0aC5yZXBsYWNlKC9eLipbL1xcXFxdKC4qKSQvLCAnJDEnKSB8fFxyXG4gICAgICAgICctJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgnaG9zdCcpLFxyXG4gICAgICBhY2Nlc3NvcktleTogQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLkhvc3QsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT5cclxuICAgICAgICBgJHtcclxuICAgICAgICAgIG9yaWdpbmFsLm1ldGFkYXRhLmhvc3RcclxuICAgICAgICAgICAgPyBvcmlnaW5hbC5tZXRhZGF0YS5ob3N0XHJcbiAgICAgICAgICAgIDogb3JpZ2luYWwubWV0YWRhdGEuZGVzdGluYXRpb25JUFxyXG4gICAgICAgIH06JHtvcmlnaW5hbC5tZXRhZGF0YS5kZXN0aW5hdGlvblBvcnR9YCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgnc25pZmZIb3N0JyksXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuU25pZmZIb3N0LFxyXG4gICAgICBhY2Nlc3NvckZuOiAob3JpZ2luYWwpID0+IG9yaWdpbmFsLm1ldGFkYXRhLnNuaWZmSG9zdCB8fCAnLScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6ICgpID0+IHQoJ3J1bGVzJyksXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuUnVsZSxcclxuICAgICAgYWNjZXNzb3JGbjogKG9yaWdpbmFsKSA9PlxyXG4gICAgICAgICFvcmlnaW5hbC5ydWxlUGF5bG9hZFxyXG4gICAgICAgICAgPyBvcmlnaW5hbC5ydWxlXHJcbiAgICAgICAgICA6IGAke29yaWdpbmFsLnJ1bGV9IDo6ICR7b3JpZ2luYWwucnVsZVBheWxvYWR9YCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgnY2hhaW5zJyksXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuQ2hhaW5zLFxyXG4gICAgICBhY2Nlc3NvckZuOiAob3JpZ2luYWwpID0+IG9yaWdpbmFsLmNoYWlucy5zbGljZSgpLnJldmVyc2UoKS5qb2luKCcgOjogJyksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6ICgpID0+IHQoJ2Nvbm5lY3RUaW1lJyksXHJcbiAgICAgIGVuYWJsZUdyb3VwaW5nOiBmYWxzZSxcclxuICAgICAgYWNjZXNzb3JLZXk6IENPTk5FQ1RJT05TX1RBQkxFX0FDQ0VTU09SX0tFWS5Db25uZWN0VGltZSxcclxuICAgICAgYWNjZXNzb3JGbjogKG9yaWdpbmFsKSA9PiBmb3JtYXRUaW1lRnJvbU5vdyhvcmlnaW5hbC5zdGFydCksXHJcbiAgICAgIHNvcnRpbmdGbjogKHByZXYsIG5leHQpID0+XHJcbiAgICAgICAgZGF5anMocHJldi5vcmlnaW5hbC5zdGFydCkudmFsdWVPZigpIC1cclxuICAgICAgICBkYXlqcyhuZXh0Lm9yaWdpbmFsLnN0YXJ0KS52YWx1ZU9mKCksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6ICgpID0+IHQoJ2RsU3BlZWQnKSxcclxuICAgICAgZW5hYmxlR3JvdXBpbmc6IGZhbHNlLFxyXG4gICAgICBhY2Nlc3NvcktleTogQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLkRsU3BlZWQsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT4gYCR7Ynl0ZVNpemUob3JpZ2luYWwuZG93bmxvYWRTcGVlZCl9L3NgLFxyXG4gICAgICBzb3J0aW5nRm46IChwcmV2LCBuZXh0KSA9PlxyXG4gICAgICAgIHByZXYub3JpZ2luYWwuZG93bmxvYWRTcGVlZCAtIG5leHQub3JpZ2luYWwuZG93bmxvYWRTcGVlZCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgndWxTcGVlZCcpLFxyXG4gICAgICBlbmFibGVHcm91cGluZzogZmFsc2UsXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuVUxTcGVlZCxcclxuICAgICAgYWNjZXNzb3JGbjogKG9yaWdpbmFsKSA9PiBgJHtieXRlU2l6ZShvcmlnaW5hbC51cGxvYWRTcGVlZCl9L3NgLFxyXG4gICAgICBzb3J0aW5nRm46IChwcmV2LCBuZXh0KSA9PlxyXG4gICAgICAgIHByZXYub3JpZ2luYWwudXBsb2FkU3BlZWQgLSBuZXh0Lm9yaWdpbmFsLnVwbG9hZFNwZWVkLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCdkbCcpLFxyXG4gICAgICBlbmFibGVHcm91cGluZzogZmFsc2UsXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuRG93bmxvYWQsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT4gYnl0ZVNpemUob3JpZ2luYWwuZG93bmxvYWQpLFxyXG4gICAgICBzb3J0aW5nRm46IChwcmV2LCBuZXh0KSA9PlxyXG4gICAgICAgIHByZXYub3JpZ2luYWwuZG93bmxvYWQgLSBuZXh0Lm9yaWdpbmFsLmRvd25sb2FkLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaGVhZGVyOiAoKSA9PiB0KCd1bCcpLFxyXG4gICAgICBlbmFibGVHcm91cGluZzogZmFsc2UsXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuVXBsb2FkLFxyXG4gICAgICBhY2Nlc3NvckZuOiAob3JpZ2luYWwpID0+IGJ5dGVTaXplKG9yaWdpbmFsLnVwbG9hZCksXHJcbiAgICAgIHNvcnRpbmdGbjogKHByZXYsIG5leHQpID0+IHByZXYub3JpZ2luYWwudXBsb2FkIC0gbmV4dC5vcmlnaW5hbC51cGxvYWQsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBoZWFkZXI6ICgpID0+IHQoJ3NvdXJjZUlQJyksXHJcbiAgICAgIGFjY2Vzc29yS2V5OiBDT05ORUNUSU9OU19UQUJMRV9BQ0NFU1NPUl9LRVkuU291cmNlSVAsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRhZyA9IGNsaWVudFNvdXJjZUlQVGFncygpLmZpbmQoXHJcbiAgICAgICAgICAodGFnKSA9PiB0YWcuc291cmNlSVAgPT09IG9yaWdpbmFsLm1ldGFkYXRhLnNvdXJjZUlQLFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgcmV0dXJuIHRhZyA/IHRhZy50YWdOYW1lIDogb3JpZ2luYWwubWV0YWRhdGEuc291cmNlSVBcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgnc291cmNlUG9ydCcpLFxyXG4gICAgICBhY2Nlc3NvcktleTogQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLlNvdXJjZVBvcnQsXHJcbiAgICAgIGFjY2Vzc29yRm46IChvcmlnaW5hbCkgPT4gb3JpZ2luYWwubWV0YWRhdGEuc291cmNlUG9ydCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGhlYWRlcjogKCkgPT4gdCgnZGVzdGluYXRpb24nKSxcclxuICAgICAgYWNjZXNzb3JLZXk6IENPTk5FQ1RJT05TX1RBQkxFX0FDQ0VTU09SX0tFWS5EZXN0aW5hdGlvbixcclxuICAgICAgYWNjZXNzb3JGbjogKG9yaWdpbmFsKSA9PlxyXG4gICAgICAgIG9yaWdpbmFsLm1ldGFkYXRhLnJlbW90ZURlc3RpbmF0aW9uIHx8XHJcbiAgICAgICAgb3JpZ2luYWwubWV0YWRhdGEuZGVzdGluYXRpb25JUCB8fFxyXG4gICAgICAgIG9yaWdpbmFsLm1ldGFkYXRhLmhvc3QsXHJcbiAgICB9LFxyXG4gIF1cclxuXHJcbiAgY29uc3QgW2dyb3VwaW5nLCBzZXRHcm91cGluZ10gPSBjcmVhdGVTaWduYWw8R3JvdXBpbmdTdGF0ZT4oW10pXHJcbiAgY29uc3QgW3NvcnRpbmcsIHNldFNvcnRpbmddID0gbWFrZVBlcnNpc3RlZChcclxuICAgIGNyZWF0ZVNpZ25hbDxTb3J0aW5nU3RhdGU+KFtcclxuICAgICAgeyBpZDogQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLkNvbm5lY3RUaW1lLCBkZXNjOiB0cnVlIH0sXHJcbiAgICBdKSxcclxuICAgIHsgbmFtZTogJ2Nvbm5lY3Rpb25zVGFibGVTb3J0aW5nJywgc3RvcmFnZTogbG9jYWxTdG9yYWdlIH0sXHJcbiAgKVxyXG5cclxuICBjb25zdCB0YWJsZSA9IGNyZWF0ZVNvbGlkVGFibGUoe1xyXG4gICAgZmlsdGVyRm5zOiB7XHJcbiAgICAgIGZ1enp5OiBmdXp6eUZpbHRlcixcclxuICAgIH0sXHJcbiAgICBzdGF0ZToge1xyXG4gICAgICBnZXQgY29sdW1uT3JkZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25zVGFibGVDb2x1bW5PcmRlcigpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBncm91cGluZygpIHtcclxuICAgICAgICByZXR1cm4gZ3JvdXBpbmcoKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgc29ydGluZygpIHtcclxuICAgICAgICByZXR1cm4gc29ydGluZygpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBjb2x1bW5WaXNpYmlsaXR5KCkge1xyXG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uc1RhYmxlQ29sdW1uVmlzaWJpbGl0eSgpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBnbG9iYWxGaWx0ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIGdsb2JhbEZpbHRlcigpXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgZ2V0IGRhdGEoKSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmVUYWIoKSA9PT0gQWN0aXZlVGFiLmFjdGl2ZUNvbm5lY3Rpb25zXHJcbiAgICAgICAgPyBhY3RpdmVDb25uZWN0aW9ucygpXHJcbiAgICAgICAgOiBjbG9zZWRDb25uZWN0aW9ucygpXHJcbiAgICB9LFxyXG4gICAgc29ydERlc2NGaXJzdDogdHJ1ZSxcclxuICAgIGVuYWJsZUhpZGluZzogdHJ1ZSxcclxuICAgIGNvbHVtbnMsXHJcbiAgICBvbkdsb2JhbEZpbHRlckNoYW5nZTogc2V0R2xvYmFsRmlsdGVyLFxyXG4gICAgZ2xvYmFsRmlsdGVyRm46IGZ1enp5RmlsdGVyLFxyXG4gICAgb25Hcm91cGluZ0NoYW5nZTogc2V0R3JvdXBpbmcsXHJcbiAgICBvblNvcnRpbmdDaGFuZ2U6IHNldFNvcnRpbmcsXHJcbiAgICBnZXRGaWx0ZXJlZFJvd01vZGVsOiBnZXRGaWx0ZXJlZFJvd01vZGVsKCksXHJcbiAgICBnZXRTb3J0ZWRSb3dNb2RlbDogZ2V0U29ydGVkUm93TW9kZWwoKSxcclxuICAgIGdldEV4cGFuZGVkUm93TW9kZWw6IGdldEV4cGFuZGVkUm93TW9kZWwoKSxcclxuICAgIGdldEdyb3VwZWRSb3dNb2RlbDogZ2V0R3JvdXBlZFJvd01vZGVsKCksXHJcbiAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHNvdXJjZUlQSGVhZGVyID0gdGFibGVcclxuICAgIC5nZXRGbGF0SGVhZGVycygpXHJcbiAgICAuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gQ09OTkVDVElPTlNfVEFCTEVfQUNDRVNTT1JfS0VZLlNvdXJjZUlQKVxyXG5cclxuICBjb25zdCBbc291cmNlSVBGaWx0ZXIsIHNldFNvdXJjZUlQRmlsdGVyXSA9IGNyZWF0ZVNpZ25hbCgnJylcclxuXHJcbiAgY3JlYXRlRWZmZWN0KFxyXG4gICAgb24oc291cmNlSVBGaWx0ZXIsICgpID0+IHtcclxuICAgICAgY29uc3QgdGFnZ2VkID0gY2xpZW50U291cmNlSVBUYWdzKCkuZmluZChcclxuICAgICAgICAodGFnKSA9PiB0YWcuc291cmNlSVAgPT09IHNvdXJjZUlQRmlsdGVyKCksXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHNvdXJjZUlQSGVhZGVyPy5jb2x1bW4uc2V0RmlsdGVyVmFsdWUoXHJcbiAgICAgICAgdGFnZ2VkID8gdGFnZ2VkLnRhZ05hbWUgOiBzb3VyY2VJUEZpbHRlcigpLFxyXG4gICAgICApXHJcbiAgICB9KSxcclxuICApXHJcblxyXG4gIGNvbnN0IHRhYnMgPSBjcmVhdGVNZW1vKCgpID0+IFtcclxuICAgIHtcclxuICAgICAgdHlwZTogQWN0aXZlVGFiLmFjdGl2ZUNvbm5lY3Rpb25zLFxyXG4gICAgICBuYW1lOiB0KCdhY3RpdmUnKSxcclxuICAgICAgY291bnQ6IGFjdGl2ZUNvbm5lY3Rpb25zKCkubGVuZ3RoLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogQWN0aXZlVGFiLmNsb3NlZENvbm5lY3Rpb25zLFxyXG4gICAgICBuYW1lOiB0KCdjbG9zZWQnKSxcclxuICAgICAgY291bnQ6IGNsb3NlZENvbm5lY3Rpb25zKCkubGVuZ3RoLFxyXG4gICAgfSxcclxuICBdKVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFicy1ib3hlZCB0YWJzIGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxJbmRleCBlYWNoPXt0YWJzKCl9PlxyXG4gICAgICAgICAgICAgIHsodGFiKSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPXt0d01lcmdlKFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVRhYigpID09PSB0YWIoKS50eXBlICYmICd0YWItYWN0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgICAndGFiIHRhYi1zbSBnYXAtMiBzbTp0YWItbWQnLFxyXG4gICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIodGFiKCkudHlwZSl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt0YWIoKS5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIGJhZGdlLXNtXCI+e3RhYigpLmNvdW50fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9JbmRleD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3Qgc2VsZWN0LWJvcmRlcmVkIHNlbGVjdC1wcmltYXJ5IHNlbGVjdC1zbSB3LWZ1bGwgbWF4LXctZnVsbCBmbGV4LTEgc206c2VsZWN0LW1kXCJcclxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTb3VyY2VJUEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57dCgnYWxsJyl9PC9vcHRpb24+XHJcblxyXG4gICAgICAgICAgICA8SW5kZXhcclxuICAgICAgICAgICAgICBlYWNoPXt1bmlxKFxyXG4gICAgICAgICAgICAgICAgYWxsQ29ubmVjdGlvbnMoKS5tYXAoKHsgbWV0YWRhdGE6IHsgc291cmNlSVAgfSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ2dlZCA9IGNsaWVudFNvdXJjZUlQVGFncygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKHRhZykgPT4gdGFnLnNvdXJjZUlQID09PSBzb3VyY2VJUCxcclxuICAgICAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhZ2dlZCA/IHRhZ2dlZC50YWdOYW1lIDogc291cmNlSVBcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICkuc29ydCgpfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgeyhzb3VyY2VJUCkgPT4gPG9wdGlvbiB2YWx1ZT17c291cmNlSVAoKX0+e3NvdXJjZUlQKCl9PC9vcHRpb24+fVxyXG4gICAgICAgICAgICA8L0luZGV4PlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJqb2luIGZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBtZDpmbGV4LTFcIj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dCBqb2luLWl0ZW0gaW5wdXQtcHJpbWFyeSBpbnB1dC1zbSBtaW4tdy0wIGZsZXgtMSBzbTppbnB1dC1tZFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdzZWFyY2gnKX1cclxuICAgICAgICAgICAgb25JbnB1dD17KGUpID0+IHNldEdsb2JhbEZpbHRlcihlLnRhcmdldC52YWx1ZSl9XHJcbiAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJqb2luLWl0ZW0gYnRuLXNtIHNtOmJ0bi1tZFwiXHJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFBhdXNlZCgocGF1c2VkKSA9PiAhcGF1c2VkKX1cclxuICAgICAgICAgICAgaWNvbj17cGF1c2VkKCkgPyA8SWNvblBsYXllclBsYXkgLz4gOiA8SWNvblBsYXllclBhdXNlIC8+fVxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiam9pbi1pdGVtIGJ0bi1zbSBzbTpidG4tbWRcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRhYmxlLmdldFN0YXRlKCkuZ2xvYmFsRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAuZ2V0RmlsdGVyZWRSb3dNb2RlbCgpXHJcbiAgICAgICAgICAgICAgICAgIC5yb3dzLmZvckVhY2goKHsgaWQgfSkgPT4gY2xvc2VTaW5nbGVDb25uZWN0aW9uQVBJKGlkKSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VBbGxDb25uZWN0aW9uc0FQSSgpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBpY29uPXs8SWNvblggLz59XHJcbiAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gam9pbi1pdGVtIGJ0bi1zbSBzbTpidG4tbWRcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb25uZWN0aW9uc1NldHRpbmdzTW9kYWxSZWY/LnNob3dNb2RhbCgpfVxyXG4gICAgICAgICAgICBpY29uPXs8SWNvblNldHRpbmdzIC8+fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3cteC1hdXRvIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgYmctYmFzZS0zMDBcIj5cclxuICAgICAgICA8dGFibGVcclxuICAgICAgICAgIGNsYXNzPXt0d01lcmdlKFxyXG4gICAgICAgICAgICB0YWJsZVNpemVDbGFzc05hbWUoY29ubmVjdGlvbnNUYWJsZVNpemUoKSksXHJcbiAgICAgICAgICAgICd0YWJsZSB0YWJsZS16ZWJyYSByZWxhdGl2ZSByb3VuZGVkLW5vbmUnLFxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJzdGlja3kgdG9wLTAgei0xMCBoLThcIj5cclxuICAgICAgICAgICAgPEZvciBlYWNoPXt0YWJsZS5nZXRIZWFkZXJHcm91cHMoKX0+XHJcbiAgICAgICAgICAgICAgeyhoZWFkZXJHcm91cCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8Rm9yIGVhY2g9e2hlYWRlckdyb3VwLmhlYWRlcnN9PlxyXG4gICAgICAgICAgICAgICAgICAgIHsoaGVhZGVyKSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJiZy1iYXNlLTIwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXt0d01lcmdlKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMicpfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aGVhZGVyLmNvbHVtbi5nZXRDYW5Hcm91cCgpID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGVhZGVyLmNvbHVtbi5nZXRUb2dnbGVHcm91cGluZ0hhbmRsZXIoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2hlYWRlci5jb2x1bW4uZ2V0SXNHcm91cGVkKCkgPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25ab29tT3V0RmlsbGVkIHNpemU9ezE4fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uWm9vbUluRmlsbGVkIHNpemU9ezE4fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPXt0d01lcmdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuY29sdW1uLmdldENhblNvcnQoKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbGV4LTEnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hlYWRlci5jb2x1bW4uZ2V0VG9nZ2xlU29ydGluZ0hhbmRsZXIoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZmxleFJlbmRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzYzogPEljb25Tb3J0QXNjZW5kaW5nIC8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogPEljb25Tb3J0RGVzY2VuZGluZyAvPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9W2hlYWRlci5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSBhcyBzdHJpbmddID8/IG51bGx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPEZvciBlYWNoPXt0YWJsZS5nZXRSb3dNb2RlbCgpLnJvd3N9PlxyXG4gICAgICAgICAgICAgIHsocm93KSA9PiAoXHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJob3ZlcjohYmctcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Rm9yIGVhY2g9e3Jvdy5nZXRWaXNpYmxlQ2VsbHMoKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgeyhjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB5LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGV4dE1lbnU9eyhlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNlbGwucmVuZGVyVmFsdWUoKSBhcyBudWxsIHwgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmJiB3cml0ZUNsaXBib2FyZCh2YWx1ZSkuY2F0Y2goKCkgPT4ge30pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjZWxsLmdldElzR3JvdXBlZCgpID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuZ2V0Q2FuRXhwYW5kKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLW5vcm1hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17cm93LmdldFRvZ2dsZUV4cGFuZGVkSGFuZGxlcigpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cuZ2V0SXNFeHBhbmRlZCgpID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25ab29tT3V0RmlsbGVkIHNpemU9ezE4fSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvblpvb21JbkZpbGxlZCBzaXplPXsxOH0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZsZXhSZW5kZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNvbHVtbi5jb2x1bW5EZWYuY2VsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4oe3Jvdy5zdWJSb3dzLmxlbmd0aH0pPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogY2VsbC5nZXRJc0FnZ3JlZ2F0ZWQoKSA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhSZW5kZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5hZ2dyZWdhdGVkQ2VsbCA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmdldENvbnRleHQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogY2VsbC5nZXRJc1BsYWNlaG9sZGVyKCkgPyBudWxsIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFJlbmRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jb2x1bW4uY29sdW1uRGVmLmNlbGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuZ2V0Q29udGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvRm9yPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxDb25uZWN0aW9uc1NldHRpbmdzTW9kYWxcclxuICAgICAgICByZWY9eyhlbCkgPT4gKGNvbm5lY3Rpb25zU2V0dGluZ3NNb2RhbFJlZiA9IGVsKX1cclxuICAgICAgICBvcmRlcj17Y29ubmVjdGlvbnNUYWJsZUNvbHVtbk9yZGVyKCl9XHJcbiAgICAgICAgdmlzaWJsZT17Y29ubmVjdGlvbnNUYWJsZUNvbHVtblZpc2liaWxpdHkoKX1cclxuICAgICAgICBvbk9yZGVyQ2hhbmdlPXsoZGF0YSkgPT4gc2V0Q29ubmVjdGlvbnNUYWJsZUNvbHVtbk9yZGVyKGRhdGEpfVxyXG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZT17KGRhdGEpID0+XHJcbiAgICAgICAgICBzZXRDb25uZWN0aW9uc1RhYmxlQ29sdW1uVmlzaWJpbGl0eSh7IC4uLmRhdGEgfSlcclxuICAgICAgICB9XHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8Q29ubmVjdGlvbnNUYWJsZURldGFpbHNNb2RhbFxyXG4gICAgICAgIHJlZj17KGVsKSA9PiAoY29ubmVjdGlvbnNEZXRhaWxzTW9kYWxSZWYgPSBlbCl9XHJcbiAgICAgICAgc2VsZWN0ZWRDb25uZWN0aW9uSUQ9e3NlbGVjdGVkQ29ubmVjdGlvbklEKCl9XHJcbiAgICAgIC8+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
|