@projectcor/people-microfront 1.0.10-1 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/lib/App.js +0 -28
- package/lib/App.stories.js +0 -134
- package/lib/Providers.js +0 -30
- package/lib/components/Backdrop/Background.interface.js +0 -2
- package/lib/components/Backdrop/Background.js +0 -12
- package/lib/components/Backdrop/Background.style.js +0 -9
- package/lib/components/Backdrop/index.js +0 -2
- package/lib/components/DeleteTeamModal/DeleteTeamModal.js +0 -69
- package/lib/components/DeleteTeamModal/DeleteTeamModal.styles.js +0 -55
- package/lib/components/DeleteTeamModal/DeleteTeamModal.types.js +0 -2
- package/lib/components/DeleteTeamModal/index.js +0 -2
- package/lib/components/DeletedUserIcon/DeletedUserIcon.js +0 -22
- package/lib/components/DeletedUserIcon/DeletedUserIcon.styles.js +0 -7
- package/lib/components/DeletedUserIcon/index.js +0 -2
- package/lib/components/DisabledUserIcon/DisabledUserIcon.js +0 -25
- package/lib/components/DisabledUserIcon/DisabledUserIcon.styles.js +0 -7
- package/lib/components/DisabledUserIcon/index.js +0 -2
- package/lib/components/EmptyStateTeams/EmptyStateTeams.js +0 -195
- package/lib/components/EmptyStateTeams/EmptyStateTeams.styles.js +0 -7
- package/lib/components/EmptyStateTeams/index.js +0 -2
- package/lib/components/EmptyUser/EmptyUser.js +0 -20
- package/lib/components/EmptyUser/EmptyUser.styles.js +0 -18
- package/lib/components/EmptyUser/index.js +0 -3
- package/lib/components/ErrorComponent/ErrorComponent.js +0 -24
- package/lib/components/ErrorComponent/ErrorComponent.spec.js +0 -30
- package/lib/components/ErrorComponent/ErrorComponent.styles.js +0 -19
- package/lib/components/ErrorComponent/index.js +0 -2
- package/lib/components/ErrorTeams/ErrorTeams.js +0 -118
- package/lib/components/ErrorTeams/ErrorTeams.styles.js +0 -7
- package/lib/components/ErrorTeams/index.js +0 -2
- package/lib/components/Filters/FilterChip/FilterChip.js +0 -165
- package/lib/components/Filters/FilterChip/FilterChip.styles.js +0 -6
- package/lib/components/Filters/FilterChip/index.js +0 -2
- package/lib/components/Filters/LabelFilter/LabelFilter.js +0 -89
- package/lib/components/Filters/LabelFilter/LabelFilter.styles.js +0 -32
- package/lib/components/Filters/SearchComponent/SearchComponent.js +0 -28
- package/lib/components/Filters/SearchComponent/SearchComponent.styles.js +0 -22
- package/lib/components/Filters/SearchComponent/index.js +0 -2
- package/lib/components/Filters/index.js +0 -2
- package/lib/components/HeaderTeams/HeaderTeams.js +0 -37
- package/lib/components/HeaderTeams/HeaderTeams.style.js +0 -15
- package/lib/components/HeaderTeams/index.js +0 -2
- package/lib/components/Icons/UserBlockIcon.js +0 -25
- package/lib/components/Icons/UserIconLock.js +0 -43
- package/lib/components/Icons/UserIconWithCross.js +0 -21
- package/lib/components/Icons/index.js +0 -4
- package/lib/components/Illustration/EmptyFilter.js +0 -67
- package/lib/components/Illustration/EmptyUser.js +0 -141
- package/lib/components/Illustration/index.js +0 -2
- package/lib/components/Layout/Layout.js +0 -37
- package/lib/components/Layout/Layout.styles.js +0 -26
- package/lib/components/Layout/index.js +0 -2
- package/lib/components/Loader/Loader.js +0 -11
- package/lib/components/Loader/Loader.styles.js +0 -6
- package/lib/components/Loader/index.js +0 -2
- package/lib/components/Loading/LoadingComponent.js +0 -19
- package/lib/components/Loading/LoadingComponent.style.js +0 -15
- package/lib/components/Loading/index.js +0 -2
- package/lib/components/MenuOptions/MenuOptions.js +0 -220
- package/lib/components/MenuOptions/MenuOptions.styles.js +0 -18
- package/lib/components/MenuOptions/index.js +0 -2
- package/lib/components/Modal/ModalLayout.interface.js +0 -2
- package/lib/components/Modal/ModalLayout.js +0 -25
- package/lib/components/Modal/ModalLayout.style.js +0 -26
- package/lib/components/Modal/index.js +0 -2
- package/lib/components/ModalBlockedUser/ModalBlockedUser.js +0 -47
- package/lib/components/ModalBlockedUser/ModalBlockedUser.styles.js +0 -14
- package/lib/components/ModalBlockedUser/index.js +0 -2
- package/lib/components/ModalEditUserPosition/ModalEditUserPosition.js +0 -136
- package/lib/components/ModalEditUserPosition/ModalEditUserPosition.styles.js +0 -37
- package/lib/components/ModalEditUserPosition/UserEditPositionRow.js +0 -216
- package/lib/components/ModalEditUserPosition/UserEditPositionRow.styles.js +0 -61
- package/lib/components/ModalEditUserPosition/index.js +0 -2
- package/lib/components/ModalOptionsWithSearch/ConfirmButton.js +0 -19
- package/lib/components/ModalOptionsWithSearch/ModalOptionsWithSearch.js +0 -177
- package/lib/components/ModalOptionsWithSearch/ModalOptionsWithSearch.styles.js +0 -46
- package/lib/components/ModalOptionsWithSearch/SearchInput.js +0 -20
- package/lib/components/Pagination/Pagination.styles.js +0 -26
- package/lib/components/Pagination/PaginationView.js +0 -83
- package/lib/components/Pagination/index.js +0 -2
- package/lib/components/Search/InputSearch.js +0 -23
- package/lib/components/Search/Search.js +0 -41
- package/lib/components/Search/Search.styles.js +0 -15
- package/lib/components/Search/index.js +0 -2
- package/lib/components/Snackbar/Snackbar.interface.js +0 -2
- package/lib/components/Snackbar/Snackbar.js +0 -35
- package/lib/components/Snackbar/Snackbar.styles.js +0 -18
- package/lib/components/Snackbar/index.js +0 -2
- package/lib/components/Table/Header/HeaderTable.js +0 -208
- package/lib/components/Table/Header/HeaderTable.styles.js +0 -15
- package/lib/components/Table/Header/index.js +0 -2
- package/lib/components/Table/Row/Row.js +0 -112
- package/lib/components/Table/Row/Row.styles.js +0 -91
- package/lib/components/Table/Row/index.js +0 -2
- package/lib/components/Table/TeamRow/AddMemberModal/AddMemberModal.js +0 -68
- package/lib/components/Table/TeamRow/AddMemberModal/AddMemberModal.styles.js +0 -39
- package/lib/components/Table/TeamRow/AddMemberModal/index.js +0 -2
- package/lib/components/Table/TeamRow/AddUsers/AddUsers.js +0 -246
- package/lib/components/Table/TeamRow/AddUsers/AddUsers.styles.js +0 -32
- package/lib/components/Table/TeamRow/AddUsers/index.js +0 -2
- package/lib/components/Table/TeamRow/RemoveMemberModal/RemoveMemberModal.js +0 -68
- package/lib/components/Table/TeamRow/RemoveMemberModal/RemoveMemberModal.styles.js +0 -39
- package/lib/components/Table/TeamRow/RemoveMemberModal/index.js +0 -2
- package/lib/components/Table/TeamRow/TeamRow.js +0 -131
- package/lib/components/Table/TeamRow/TeamRow.styles.js +0 -7
- package/lib/components/Table/TeamRow/UsersRow/UsersRow.js +0 -195
- package/lib/components/Table/TeamRow/UsersRow/UsersRow.styles.js +0 -41
- package/lib/components/Table/TeamRow/UsersRow/index.js +0 -2
- package/lib/components/Table/TeamRow/index.js +0 -2
- package/lib/components/TeamDetailsModal/MembersSelect.js +0 -181
- package/lib/components/TeamDetailsModal/TeamDetailsModal.js +0 -276
- package/lib/components/TeamDetailsModal/TeamDetailsModal.styles.js +0 -130
- package/lib/components/TeamDetailsModal/TeamDetailsModal.types.js +0 -2
- package/lib/components/TeamDetailsModal/index.js +0 -2
- package/lib/components/UserRow/UserRow.js +0 -83
- package/lib/components/UserRow/UserRow.stories.js +0 -17
- package/lib/components/UserRow/UserRow.styles.js +0 -51
- package/lib/constants/gqlClient.js +0 -4
- package/lib/constants/peopleFilterEventTypes.js +0 -9
- package/lib/container/Body/BodyContainer.js +0 -130
- package/lib/container/Body/BodyContainerViewTeams.js +0 -216
- package/lib/container/Filters/FiltersContainer.js +0 -494
- package/lib/container/Filters/FiltersTeamsContainer.js +0 -159
- package/lib/container/MainView/MainTeamsView.js +0 -69
- package/lib/container/MainView/MainUsersView.js +0 -159
- package/lib/container/MainView/MainUsersView.styles.js +0 -32
- package/lib/container/MainView/MainView.js +0 -139
- package/lib/container/Pagination/PaginationContainer.js +0 -32
- package/lib/container/Pagination/PaginationTeamsContainer.js +0 -32
- package/lib/container/RouterComponent/RouterComponent.js +0 -110
- package/lib/container/RouterComponent/RouterComponent.stories.js +0 -12
- package/lib/container/RouterComponent/RouterComponent.styles.js +0 -26
- package/lib/container/RouterComponent/index.js +0 -2
- package/lib/container/TableContainer/TableContainer.js +0 -62
- package/lib/container/index.js +0 -2
- package/lib/context/TeamsContext.js +0 -49
- package/lib/context/UsersContext.js +0 -220
- package/lib/hooks/useAbortController.js +0 -21
- package/lib/hooks/useAssignUserToTeam.js +0 -77
- package/lib/hooks/useAssignedWorkspacesFromHost.js +0 -103
- package/lib/hooks/useCreateTeams.js +0 -67
- package/lib/hooks/useDebounce.js +0 -18
- package/lib/hooks/useDebouncedCallback.js +0 -27
- package/lib/hooks/useDeleteTeam.js +0 -69
- package/lib/hooks/useGetTeams.js +0 -73
- package/lib/hooks/useGetTotalPositions.js +0 -24
- package/lib/hooks/useGetTotalTeams.js +0 -24
- package/lib/hooks/useGetUserPositionFilter.js +0 -32
- package/lib/hooks/useGetUsers.js +0 -128
- package/lib/hooks/useGetUsersForFilter.js +0 -51
- package/lib/hooks/useGraphAdapter.js +0 -71
- package/lib/hooks/useLoadMoreGuard.js +0 -16
- package/lib/hooks/useResize.js +0 -34
- package/lib/hooks/useSearchEvent.js +0 -18
- package/lib/hooks/useUnassignUserFromTeam.js +0 -67
- package/lib/hooks/useUnblockUser.js +0 -47
- package/lib/hooks/useUpdateTeam.js +0 -67
- package/lib/hooks/useUpdateUserPositions.js +0 -58
- package/lib/hooks/useUserPositionCategories.js +0 -38
- package/lib/index.css +0 -28
- package/lib/index.js +0 -10
- package/lib/lang/i18next.js +0 -19
- package/lib/lang/i18nextForWeb.js +0 -25
- package/lib/lang/resource.js +0 -11
- package/lib/lang/translation/br.json +0 -179
- package/lib/lang/translation/en.json +0 -180
- package/lib/lang/translation/es.json +0 -180
- package/lib/lang/translation/fr.json +0 -180
- package/lib/mocks/mockedUser.js +0 -101
- package/lib/query/assignUserToTeam.js +0 -5
- package/lib/query/createTeam.js +0 -5
- package/lib/query/deleteTeam.js +0 -5
- package/lib/query/getTeams.js +0 -5
- package/lib/query/getTotalPositions.js +0 -5
- package/lib/query/getTotalTeams.js +0 -5
- package/lib/query/getUserPositionCategory.js +0 -5
- package/lib/query/getUserPositionFilter.js +0 -5
- package/lib/query/getUsers.js +0 -5
- package/lib/query/getWorkspaces.js +0 -5
- package/lib/query/unassignUserFromTeam.js +0 -5
- package/lib/query/updateTeam.js +0 -5
- package/lib/query/updateUserPosition.js +0 -5
- package/lib/query/userUnblock.js +0 -5
- package/lib/types/global.d.js +0 -2
- package/lib/types/userType.d.js +0 -2
- package/lib/utils/ApolloMicroServiceClient.js +0 -3
- package/lib/utils/formatNumber.js +0 -55
- package/lib/utils/isCorWorkspacesFeatureEnabled.js +0 -15
- package/lib/utils/peopleFiltersStorage.js +0 -128
- package/lib/utils/peopleFiltersUrl.js +0 -147
- package/lib/utils/sanitizeHtml.js +0 -11
- package/lib/utils/tabUrl.js +0 -16
|
@@ -1,494 +0,0 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
-
/* eslint-disable @typescript-eslint/indent */
|
|
7
|
-
/* eslint-disable no-nested-ternary */
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
9
|
-
/* eslint-disable react/require-default-props */
|
|
10
|
-
/* eslint-disable no-undef */
|
|
11
|
-
import { memo, useEffect, useState, useRef, useCallback, useMemo } from 'react';
|
|
12
|
-
import { useTranslation } from 'react-i18next';
|
|
13
|
-
import { useUsersQuery } from '../../context/UsersContext';
|
|
14
|
-
import { FilterChip } from '../../components/Filters/FilterChip';
|
|
15
|
-
import { useGetTeams } from '../../hooks/useGetTeams';
|
|
16
|
-
import { useLoadMoreGuard } from '../../hooks/useLoadMoreGuard';
|
|
17
|
-
import { SEARCH_EVENT } from '../../hooks/useSearchEvent';
|
|
18
|
-
import { Search } from '../../components/Search/Search';
|
|
19
|
-
import { LayoutSearchUser } from '../../components/Layout/Layout';
|
|
20
|
-
import { useAssignedWorkspacesFromHost } from '../../hooks/useAssignedWorkspacesFromHost';
|
|
21
|
-
import { isCorWorkspacesFeatureEnabled } from '../../utils/isCorWorkspacesFeatureEnabled';
|
|
22
|
-
import { buildChipLabelMap, loadUsersFilters, optionLabelById, saveUsersFilters } from '../../utils/peopleFiltersStorage';
|
|
23
|
-
import { getEffectiveUsersFilters, writeUsersFiltersToUrl } from '../../utils/peopleFiltersUrl';
|
|
24
|
-
import { PEOPLE_FILTER_EVENT_TYPES } from '../../constants/peopleFilterEventTypes';
|
|
25
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
|
-
export var FiltersContainer = /*#__PURE__*/memo(function () {
|
|
27
|
-
var _useTranslation = useTranslation('people'),
|
|
28
|
-
t = _useTranslation.t;
|
|
29
|
-
var _useUsersQuery = useUsersQuery(),
|
|
30
|
-
handleGetUsers = _useUsersQuery.handleGetUsers,
|
|
31
|
-
positions = _useUsersQuery.positions;
|
|
32
|
-
var _useGetTeams = useGetTeams(),
|
|
33
|
-
handleGetTeams = _useGetTeams.handleGetTeams,
|
|
34
|
-
loading = _useGetTeams.loading,
|
|
35
|
-
error = _useGetTeams.error,
|
|
36
|
-
data = _useGetTeams.data,
|
|
37
|
-
currentPage = _useGetTeams.currentPage,
|
|
38
|
-
lastPage = _useGetTeams.lastPage;
|
|
39
|
-
var initialMerged = useMemo(function () {
|
|
40
|
-
return getEffectiveUsersFilters();
|
|
41
|
-
}, []);
|
|
42
|
-
var workspacesFeatureEnabled = isCorWorkspacesFeatureEnabled();
|
|
43
|
-
var _useAssignedWorkspace = useAssignedWorkspacesFromHost(workspacesFeatureEnabled),
|
|
44
|
-
workspacesList = _useAssignedWorkspace.workspacesList,
|
|
45
|
-
workspacesLoading = _useAssignedWorkspace.loading,
|
|
46
|
-
handleGetWorkspaces = _useAssignedWorkspace.handleGetWorkspaces,
|
|
47
|
-
workspaceCurrentPage = _useAssignedWorkspace.currentPage,
|
|
48
|
-
workspaceLastPage = _useAssignedWorkspace.lastPage;
|
|
49
|
-
var canLoadMoreWorkspaces = workspaceCurrentPage < workspaceLastPage;
|
|
50
|
-
var _useLoadMoreGuard = useLoadMoreGuard(workspacesLoading, canLoadMoreWorkspaces),
|
|
51
|
-
requestWorkspacesLoadMore = _useLoadMoreGuard.requestLoadMore;
|
|
52
|
-
var _useState = useState(''),
|
|
53
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
54
|
-
searchTermValue = _useState2[0],
|
|
55
|
-
setSearchTermValue = _useState2[1];
|
|
56
|
-
var _useState3 = useState([]),
|
|
57
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
58
|
-
teamOptions = _useState4[0],
|
|
59
|
-
setTeamOptions = _useState4[1];
|
|
60
|
-
var _useState5 = useState(positions || []),
|
|
61
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
62
|
-
positionOptions = _useState6[0],
|
|
63
|
-
setPositionOptions = _useState6[1];
|
|
64
|
-
var defaultPositionsRef = useRef(positions || []);
|
|
65
|
-
var _useState7 = useState(function () {
|
|
66
|
-
return initialMerged.selectedTeams;
|
|
67
|
-
}),
|
|
68
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
69
|
-
selectedTeams = _useState8[0],
|
|
70
|
-
setSelectedTeams = _useState8[1];
|
|
71
|
-
var _useState9 = useState(function () {
|
|
72
|
-
return initialMerged.selectedPositions;
|
|
73
|
-
}),
|
|
74
|
-
_useState0 = _slicedToArray(_useState9, 2),
|
|
75
|
-
selectedPositions = _useState0[0],
|
|
76
|
-
setSelectedPositions = _useState0[1];
|
|
77
|
-
var _useState1 = useState(function () {
|
|
78
|
-
return initialMerged.selectedWorkspaces;
|
|
79
|
-
}),
|
|
80
|
-
_useState10 = _slicedToArray(_useState1, 2),
|
|
81
|
-
selectedWorkspaces = _useState10[0],
|
|
82
|
-
setSelectedWorkspaces = _useState10[1];
|
|
83
|
-
var _useState11 = useState(''),
|
|
84
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
85
|
-
teamSearchTerm = _useState12[0],
|
|
86
|
-
setTeamSearchTerm = _useState12[1];
|
|
87
|
-
var _useState13 = useState(''),
|
|
88
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
89
|
-
positionSearchTerm = _useState14[0],
|
|
90
|
-
setPositionSearchTerm = _useState14[1];
|
|
91
|
-
var _useState15 = useState(''),
|
|
92
|
-
_useState16 = _slicedToArray(_useState15, 2),
|
|
93
|
-
workspaceSearchTerm = _useState16[0],
|
|
94
|
-
setWorkspaceSearchTerm = _useState16[1];
|
|
95
|
-
var _useState17 = useState(0),
|
|
96
|
-
_useState18 = _slicedToArray(_useState17, 2),
|
|
97
|
-
teamFilterSelectionResetKey = _useState18[0],
|
|
98
|
-
setTeamFilterSelectionResetKey = _useState18[1];
|
|
99
|
-
var _useState19 = useState(function () {
|
|
100
|
-
var _initialMerged$chipLa;
|
|
101
|
-
return (_initialMerged$chipLa = initialMerged.chipLabels) !== null && _initialMerged$chipLa !== void 0 ? _initialMerged$chipLa : {};
|
|
102
|
-
}),
|
|
103
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
|
104
|
-
persistedChipLabels = _useState20[0],
|
|
105
|
-
setPersistedChipLabels = _useState20[1];
|
|
106
|
-
var workspaceOptions = useMemo(function () {
|
|
107
|
-
return workspacesList.map(function (w) {
|
|
108
|
-
var _w$name;
|
|
109
|
-
return {
|
|
110
|
-
id: Number(w.id),
|
|
111
|
-
label: String((_w$name = w.name) !== null && _w$name !== void 0 ? _w$name : '')
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
}, [workspacesList]);
|
|
115
|
-
var canLoadMoreTeams = currentPage < lastPage;
|
|
116
|
-
var _useLoadMoreGuard2 = useLoadMoreGuard(loading, canLoadMoreTeams),
|
|
117
|
-
requestTeamsLoadMore = _useLoadMoreGuard2.requestLoadMore;
|
|
118
|
-
var buildAndSendUserRequest = function buildAndSendUserRequest() {
|
|
119
|
-
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
120
|
-
searchInputOverride = _ref.searchInputOverride,
|
|
121
|
-
teamsOverride = _ref.teamsOverride,
|
|
122
|
-
positionsOverride = _ref.positionsOverride,
|
|
123
|
-
workspacesOverride = _ref.workspacesOverride;
|
|
124
|
-
var positionsFilter = positionsOverride !== undefined ? positionsOverride.length ? {
|
|
125
|
-
positions: positionsOverride
|
|
126
|
-
} : {} : selectedPositions.length ? {
|
|
127
|
-
positions: selectedPositions
|
|
128
|
-
} : {};
|
|
129
|
-
var teamsFilter = teamsOverride !== undefined ? teamsOverride.length ? {
|
|
130
|
-
team: teamsOverride
|
|
131
|
-
} : {} : selectedTeams.length ? {
|
|
132
|
-
team: selectedTeams
|
|
133
|
-
} : {};
|
|
134
|
-
var workspacesFilter = workspacesOverride !== undefined ? workspacesOverride.length ? {
|
|
135
|
-
workspaceIds: workspacesOverride
|
|
136
|
-
} : {} : selectedWorkspaces.length ? {
|
|
137
|
-
workspaceIds: selectedWorkspaces
|
|
138
|
-
} : {};
|
|
139
|
-
var valuesToFilter = _objectSpread(_objectSpread(_objectSpread({}, positionsFilter), teamsFilter), workspacesFilter);
|
|
140
|
-
handleGetUsers({
|
|
141
|
-
searchInput: searchInputOverride !== undefined ? searchInputOverride : searchTermValue,
|
|
142
|
-
page: 1,
|
|
143
|
-
valuesToFilter: valuesToFilter
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
|
-
useEffect(function () {
|
|
147
|
-
var handleSearch = function handleSearch(event) {
|
|
148
|
-
var _event$detail = event.detail,
|
|
149
|
-
searchTerm = _event$detail.searchTerm,
|
|
150
|
-
type = _event$detail.type,
|
|
151
|
-
valuesToFilter = _event$detail.valuesToFilter;
|
|
152
|
-
if (type === PEOPLE_FILTER_EVENT_TYPES.SEARCH) {
|
|
153
|
-
setSearchTermValue(searchTerm);
|
|
154
|
-
buildAndSendUserRequest({
|
|
155
|
-
searchInputOverride: searchTerm
|
|
156
|
-
});
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (type === PEOPLE_FILTER_EVENT_TYPES.TEAM) {
|
|
160
|
-
if (Array.isArray(valuesToFilter)) {
|
|
161
|
-
if (valuesToFilter.length) {
|
|
162
|
-
var areTeamsEqual = valuesToFilter.length === selectedTeams.length && valuesToFilter.every(function (value, index) {
|
|
163
|
-
return value === selectedTeams[index];
|
|
164
|
-
});
|
|
165
|
-
if (areTeamsEqual) return;
|
|
166
|
-
setSelectedTeams(valuesToFilter);
|
|
167
|
-
buildAndSendUserRequest({
|
|
168
|
-
teamsOverride: valuesToFilter
|
|
169
|
-
});
|
|
170
|
-
} else {
|
|
171
|
-
setSelectedTeams([]);
|
|
172
|
-
buildAndSendUserRequest({
|
|
173
|
-
teamsOverride: []
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
} else {
|
|
177
|
-
setTeamSearchTerm(searchTerm !== null && searchTerm !== void 0 ? searchTerm : '');
|
|
178
|
-
var term = (searchTerm !== null && searchTerm !== void 0 ? searchTerm : '').trim();
|
|
179
|
-
var teamListFilter = {};
|
|
180
|
-
if (term) teamListFilter.name = term;
|
|
181
|
-
if (selectedWorkspaces.length) teamListFilter.workspaceIds = selectedWorkspaces;
|
|
182
|
-
handleGetTeams(_objectSpread({
|
|
183
|
-
page: 1
|
|
184
|
-
}, Object.keys(teamListFilter).length ? {
|
|
185
|
-
filter: teamListFilter
|
|
186
|
-
} : {}));
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (type === PEOPLE_FILTER_EVENT_TYPES.POSITION) {
|
|
190
|
-
if (Array.isArray(valuesToFilter)) {
|
|
191
|
-
if (!valuesToFilter.length) {
|
|
192
|
-
setSelectedPositions([]);
|
|
193
|
-
buildAndSendUserRequest({
|
|
194
|
-
positionsOverride: []
|
|
195
|
-
});
|
|
196
|
-
} else {
|
|
197
|
-
var arePositionsEqual = valuesToFilter.length === selectedPositions.length && valuesToFilter.every(function (value, index) {
|
|
198
|
-
return value === selectedPositions[index];
|
|
199
|
-
});
|
|
200
|
-
if (arePositionsEqual) return;
|
|
201
|
-
setSelectedPositions(valuesToFilter);
|
|
202
|
-
buildAndSendUserRequest({
|
|
203
|
-
positionsOverride: valuesToFilter
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
} else {
|
|
207
|
-
setPositionSearchTerm(searchTerm !== null && searchTerm !== void 0 ? searchTerm : '');
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
if (type === PEOPLE_FILTER_EVENT_TYPES.WORKSPACE) {
|
|
211
|
-
if (Array.isArray(valuesToFilter)) {
|
|
212
|
-
if (!valuesToFilter.length) {
|
|
213
|
-
setSelectedWorkspaces([]);
|
|
214
|
-
buildAndSendUserRequest({
|
|
215
|
-
workspacesOverride: []
|
|
216
|
-
});
|
|
217
|
-
var _term = teamSearchTerm.trim();
|
|
218
|
-
handleGetTeams(_objectSpread({
|
|
219
|
-
page: 1
|
|
220
|
-
}, _term ? {
|
|
221
|
-
filter: {
|
|
222
|
-
name: _term
|
|
223
|
-
}
|
|
224
|
-
} : {}));
|
|
225
|
-
} else {
|
|
226
|
-
var areWorkspacesEqual = valuesToFilter.length === selectedWorkspaces.length && valuesToFilter.every(function (value, index) {
|
|
227
|
-
return value === selectedWorkspaces[index];
|
|
228
|
-
});
|
|
229
|
-
if (areWorkspacesEqual) return;
|
|
230
|
-
setSelectedWorkspaces(valuesToFilter);
|
|
231
|
-
setSelectedTeams([]);
|
|
232
|
-
setTeamFilterSelectionResetKey(function (k) {
|
|
233
|
-
return k + 1;
|
|
234
|
-
});
|
|
235
|
-
buildAndSendUserRequest({
|
|
236
|
-
workspacesOverride: valuesToFilter,
|
|
237
|
-
teamsOverride: []
|
|
238
|
-
});
|
|
239
|
-
var _term2 = teamSearchTerm.trim();
|
|
240
|
-
var _teamListFilter = {
|
|
241
|
-
workspaceIds: valuesToFilter
|
|
242
|
-
};
|
|
243
|
-
if (_term2) _teamListFilter.name = _term2;
|
|
244
|
-
handleGetTeams({
|
|
245
|
-
page: 1,
|
|
246
|
-
filter: _teamListFilter
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
} else {
|
|
250
|
-
var _term3 = searchTerm !== null && searchTerm !== void 0 ? searchTerm : '';
|
|
251
|
-
setWorkspaceSearchTerm(_term3);
|
|
252
|
-
handleGetWorkspaces(_objectSpread({
|
|
253
|
-
page: 1
|
|
254
|
-
}, _term3.trim() ? {
|
|
255
|
-
filter: {
|
|
256
|
-
name: _term3.trim()
|
|
257
|
-
}
|
|
258
|
-
} : {}));
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
window.addEventListener(SEARCH_EVENT, handleSearch);
|
|
263
|
-
return function () {
|
|
264
|
-
window.removeEventListener(SEARCH_EVENT, handleSearch);
|
|
265
|
-
};
|
|
266
|
-
}, [handleGetUsers, handleGetTeams, handleGetWorkspaces, searchTermValue, selectedTeams, selectedPositions, selectedWorkspaces, teamSearchTerm]);
|
|
267
|
-
useEffect(function () {
|
|
268
|
-
if (!workspacesFeatureEnabled) return;
|
|
269
|
-
handleGetWorkspaces({
|
|
270
|
-
page: 1
|
|
271
|
-
});
|
|
272
|
-
}, [workspacesFeatureEnabled, handleGetWorkspaces]);
|
|
273
|
-
useEffect(function () {
|
|
274
|
-
var _persisted$selectedTe, _persisted$selectedWo;
|
|
275
|
-
var persisted = getEffectiveUsersFilters();
|
|
276
|
-
if (!(persisted !== null && persisted !== void 0 && (_persisted$selectedTe = persisted.selectedTeams) !== null && _persisted$selectedTe !== void 0 && _persisted$selectedTe.length)) return;
|
|
277
|
-
var teamListFilter = {};
|
|
278
|
-
if ((_persisted$selectedWo = persisted.selectedWorkspaces) !== null && _persisted$selectedWo !== void 0 && _persisted$selectedWo.length) {
|
|
279
|
-
teamListFilter.workspaceIds = persisted.selectedWorkspaces;
|
|
280
|
-
}
|
|
281
|
-
handleGetTeams(_objectSpread({
|
|
282
|
-
page: 1
|
|
283
|
-
}, Object.keys(teamListFilter).length ? {
|
|
284
|
-
filter: teamListFilter
|
|
285
|
-
} : {}));
|
|
286
|
-
}, [handleGetTeams]);
|
|
287
|
-
useEffect(function () {
|
|
288
|
-
if (!(data !== null && data !== void 0 && data.teamsUsers) || error) return;
|
|
289
|
-
var mapped = data.teamsUsers.data.map(function (team) {
|
|
290
|
-
var _team$name;
|
|
291
|
-
return {
|
|
292
|
-
id: Number(team.id),
|
|
293
|
-
label: String((_team$name = team.name) !== null && _team$name !== void 0 ? _team$name : '')
|
|
294
|
-
};
|
|
295
|
-
});
|
|
296
|
-
if (data.teamsUsers.page === 1) {
|
|
297
|
-
setTeamOptions(mapped);
|
|
298
|
-
} else {
|
|
299
|
-
setTeamOptions(function (prev) {
|
|
300
|
-
var existingIds = new Set(prev.map(function (o) {
|
|
301
|
-
return o.id;
|
|
302
|
-
}));
|
|
303
|
-
var newOnes = mapped.filter(function (o) {
|
|
304
|
-
return !existingIds.has(Number(o.id));
|
|
305
|
-
});
|
|
306
|
-
return newOnes.length ? [].concat(_toConsumableArray(prev), _toConsumableArray(newOnes)) : prev;
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
}, [data, error]);
|
|
310
|
-
useEffect(function () {
|
|
311
|
-
if (positions) {
|
|
312
|
-
setPositionOptions(positions);
|
|
313
|
-
if (positions.length) {
|
|
314
|
-
defaultPositionsRef.current = positions;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}, [positions]);
|
|
318
|
-
var handleTeamsLoadMore = useCallback(function () {
|
|
319
|
-
requestTeamsLoadMore(function () {
|
|
320
|
-
var term = teamSearchTerm === null || teamSearchTerm === void 0 ? void 0 : teamSearchTerm.trim();
|
|
321
|
-
var teamListFilter = {};
|
|
322
|
-
if (term) teamListFilter.name = term;
|
|
323
|
-
if (selectedWorkspaces.length) teamListFilter.workspaceIds = selectedWorkspaces;
|
|
324
|
-
handleGetTeams(_objectSpread({
|
|
325
|
-
page: currentPage + 1
|
|
326
|
-
}, Object.keys(teamListFilter).length ? {
|
|
327
|
-
filter: teamListFilter
|
|
328
|
-
} : {}));
|
|
329
|
-
});
|
|
330
|
-
}, [requestTeamsLoadMore, currentPage, teamSearchTerm, selectedWorkspaces, handleGetTeams]);
|
|
331
|
-
var handleWorkspacesLoadMore = useCallback(function () {
|
|
332
|
-
requestWorkspacesLoadMore(function () {
|
|
333
|
-
return handleGetWorkspaces(_objectSpread({
|
|
334
|
-
page: workspaceCurrentPage + 1
|
|
335
|
-
}, workspaceSearchTerm !== null && workspaceSearchTerm !== void 0 && workspaceSearchTerm.trim() ? {
|
|
336
|
-
filter: {
|
|
337
|
-
name: workspaceSearchTerm.trim()
|
|
338
|
-
}
|
|
339
|
-
} : {}));
|
|
340
|
-
});
|
|
341
|
-
}, [requestWorkspacesLoadMore, workspaceCurrentPage, workspaceSearchTerm, handleGetWorkspaces]);
|
|
342
|
-
var positionOptionsToShow = !positionSearchTerm.trim() ? positionOptions : function () {
|
|
343
|
-
var term = positionSearchTerm.trim().toLowerCase();
|
|
344
|
-
var posWithCategory = positionOptions;
|
|
345
|
-
var selectedOpts = posWithCategory.filter(function (p) {
|
|
346
|
-
return selectedPositions.includes(p.id);
|
|
347
|
-
});
|
|
348
|
-
var filteredOpts = posWithCategory.filter(function (p) {
|
|
349
|
-
return p.label.toLowerCase().includes(term) || p.categoryName && p.categoryName.toLowerCase().includes(term);
|
|
350
|
-
});
|
|
351
|
-
var filteredIds = new Set(filteredOpts.map(function (o) {
|
|
352
|
-
return o.id;
|
|
353
|
-
}));
|
|
354
|
-
var selectedNotInFiltered = selectedOpts.filter(function (o) {
|
|
355
|
-
return !filteredIds.has(o.id);
|
|
356
|
-
});
|
|
357
|
-
return [].concat(_toConsumableArray(selectedNotInFiltered), _toConsumableArray(filteredOpts));
|
|
358
|
-
}();
|
|
359
|
-
var workspaceOptionsToShow = !workspaceSearchTerm.trim() ? workspaceOptions : function () {
|
|
360
|
-
var term = workspaceSearchTerm.trim().toLowerCase();
|
|
361
|
-
var selectedOpts = workspaceOptions.filter(function (p) {
|
|
362
|
-
return selectedWorkspaces.includes(p.id);
|
|
363
|
-
});
|
|
364
|
-
var filteredOpts = workspaceOptions.filter(function (p) {
|
|
365
|
-
return p.label.toLowerCase().includes(term);
|
|
366
|
-
});
|
|
367
|
-
var filteredIds = new Set(filteredOpts.map(function (o) {
|
|
368
|
-
return o.id;
|
|
369
|
-
}));
|
|
370
|
-
var selectedNotInFiltered = selectedOpts.filter(function (o) {
|
|
371
|
-
return !filteredIds.has(o.id);
|
|
372
|
-
});
|
|
373
|
-
return [].concat(_toConsumableArray(selectedNotInFiltered), _toConsumableArray(filteredOpts));
|
|
374
|
-
}();
|
|
375
|
-
var handleTeamFilterOpen = useCallback(function () {
|
|
376
|
-
var term = teamSearchTerm.trim();
|
|
377
|
-
var teamListFilter = {};
|
|
378
|
-
if (term) teamListFilter.name = term;
|
|
379
|
-
if (selectedWorkspaces.length) teamListFilter.workspaceIds = selectedWorkspaces;
|
|
380
|
-
handleGetTeams(_objectSpread({
|
|
381
|
-
page: 1
|
|
382
|
-
}, Object.keys(teamListFilter).length ? {
|
|
383
|
-
filter: teamListFilter
|
|
384
|
-
} : {}));
|
|
385
|
-
}, [teamSearchTerm, selectedWorkspaces, handleGetTeams]);
|
|
386
|
-
useEffect(function () {
|
|
387
|
-
var _prev$chipLabels, _prev$chipLabels2, _prev$chipLabels3;
|
|
388
|
-
var prev = loadUsersFilters();
|
|
389
|
-
var chipLabels = {};
|
|
390
|
-
var teams = buildChipLabelMap(selectedTeams, teamOptions, prev === null || prev === void 0 || (_prev$chipLabels = prev.chipLabels) === null || _prev$chipLabels === void 0 ? void 0 : _prev$chipLabels.teams);
|
|
391
|
-
var workspaces = buildChipLabelMap(selectedWorkspaces, workspaceOptions, prev === null || prev === void 0 || (_prev$chipLabels2 = prev.chipLabels) === null || _prev$chipLabels2 === void 0 ? void 0 : _prev$chipLabels2.workspaces);
|
|
392
|
-
var positionsMap = buildChipLabelMap(selectedPositions, positionOptions, prev === null || prev === void 0 || (_prev$chipLabels3 = prev.chipLabels) === null || _prev$chipLabels3 === void 0 ? void 0 : _prev$chipLabels3.positions);
|
|
393
|
-
if (teams) chipLabels.teams = teams;
|
|
394
|
-
if (workspaces) chipLabels.workspaces = workspaces;
|
|
395
|
-
if (positionsMap) chipLabels.positions = positionsMap;
|
|
396
|
-
setPersistedChipLabels(chipLabels);
|
|
397
|
-
var payload = _objectSpread({
|
|
398
|
-
searchInput: searchTermValue,
|
|
399
|
-
selectedTeams: selectedTeams,
|
|
400
|
-
selectedPositions: selectedPositions,
|
|
401
|
-
selectedWorkspaces: selectedWorkspaces
|
|
402
|
-
}, Object.keys(chipLabels).length ? {
|
|
403
|
-
chipLabels: chipLabels
|
|
404
|
-
} : {});
|
|
405
|
-
saveUsersFilters(payload);
|
|
406
|
-
writeUsersFiltersToUrl(payload);
|
|
407
|
-
}, [searchTermValue, selectedTeams, selectedPositions, selectedWorkspaces, teamOptions, workspaceOptions, positionOptions]);
|
|
408
|
-
var workspaceInitialSelection = useMemo(function () {
|
|
409
|
-
if (!selectedWorkspaces.length) return undefined;
|
|
410
|
-
var fromStorage = persistedChipLabels === null || persistedChipLabels === void 0 ? void 0 : persistedChipLabels.workspaces;
|
|
411
|
-
return selectedWorkspaces.map(function (id) {
|
|
412
|
-
var _ref2, _optionLabelById;
|
|
413
|
-
return {
|
|
414
|
-
id: id,
|
|
415
|
-
label: (_ref2 = (_optionLabelById = optionLabelById(id, workspaceOptions)) !== null && _optionLabelById !== void 0 ? _optionLabelById : fromStorage === null || fromStorage === void 0 ? void 0 : fromStorage[String(id)]) !== null && _ref2 !== void 0 ? _ref2 : "#".concat(id)
|
|
416
|
-
};
|
|
417
|
-
});
|
|
418
|
-
}, [selectedWorkspaces, workspaceOptions, persistedChipLabels]);
|
|
419
|
-
var teamInitialSelection = useMemo(function () {
|
|
420
|
-
if (!selectedTeams.length) return undefined;
|
|
421
|
-
var fromStorage = persistedChipLabels === null || persistedChipLabels === void 0 ? void 0 : persistedChipLabels.teams;
|
|
422
|
-
return selectedTeams.map(function (id) {
|
|
423
|
-
var _ref3, _optionLabelById2;
|
|
424
|
-
return {
|
|
425
|
-
id: id,
|
|
426
|
-
label: (_ref3 = (_optionLabelById2 = optionLabelById(id, teamOptions)) !== null && _optionLabelById2 !== void 0 ? _optionLabelById2 : fromStorage === null || fromStorage === void 0 ? void 0 : fromStorage[String(id)]) !== null && _ref3 !== void 0 ? _ref3 : "#".concat(id)
|
|
427
|
-
};
|
|
428
|
-
});
|
|
429
|
-
}, [selectedTeams, teamOptions, persistedChipLabels]);
|
|
430
|
-
var positionInitialSelection = useMemo(function () {
|
|
431
|
-
if (!selectedPositions.length) return undefined;
|
|
432
|
-
var fromStorage = persistedChipLabels === null || persistedChipLabels === void 0 ? void 0 : persistedChipLabels.positions;
|
|
433
|
-
return selectedPositions.map(function (id) {
|
|
434
|
-
var _ref4, _optionLabelById3;
|
|
435
|
-
return {
|
|
436
|
-
id: id,
|
|
437
|
-
label: (_ref4 = (_optionLabelById3 = optionLabelById(id, positionOptions)) !== null && _optionLabelById3 !== void 0 ? _optionLabelById3 : fromStorage === null || fromStorage === void 0 ? void 0 : fromStorage[String(id)]) !== null && _ref4 !== void 0 ? _ref4 : "#".concat(id)
|
|
438
|
-
};
|
|
439
|
-
});
|
|
440
|
-
}, [selectedPositions, positionOptions, persistedChipLabels]);
|
|
441
|
-
var workspaceFilterChipKey = useMemo(function () {
|
|
442
|
-
var _workspaceInitialSele;
|
|
443
|
-
return "ws-".concat(selectedWorkspaces.join('-'), "_").concat((_workspaceInitialSele = workspaceInitialSelection === null || workspaceInitialSelection === void 0 ? void 0 : workspaceInitialSelection.map(function (x) {
|
|
444
|
-
return "".concat(x.id, ":").concat(x.label);
|
|
445
|
-
}).join('|')) !== null && _workspaceInitialSele !== void 0 ? _workspaceInitialSele : '');
|
|
446
|
-
}, [selectedWorkspaces, workspaceInitialSelection]);
|
|
447
|
-
var teamFilterChipKey = useMemo(function () {
|
|
448
|
-
var _teamInitialSelection;
|
|
449
|
-
return "tm-".concat(selectedTeams.join('-'), "_").concat((_teamInitialSelection = teamInitialSelection === null || teamInitialSelection === void 0 ? void 0 : teamInitialSelection.map(function (x) {
|
|
450
|
-
return "".concat(x.id, ":").concat(x.label);
|
|
451
|
-
}).join('|')) !== null && _teamInitialSelection !== void 0 ? _teamInitialSelection : '');
|
|
452
|
-
}, [selectedTeams, teamInitialSelection]);
|
|
453
|
-
var positionFilterChipKey = useMemo(function () {
|
|
454
|
-
var _positionInitialSelec;
|
|
455
|
-
return "pos-".concat(selectedPositions.join('-'), "_").concat((_positionInitialSelec = positionInitialSelection === null || positionInitialSelection === void 0 ? void 0 : positionInitialSelection.map(function (x) {
|
|
456
|
-
return "".concat(x.id, ":").concat(x.label);
|
|
457
|
-
}).join('|')) !== null && _positionInitialSelec !== void 0 ? _positionInitialSelec : '');
|
|
458
|
-
}, [selectedPositions, positionInitialSelection]);
|
|
459
|
-
return /*#__PURE__*/_jsxs(LayoutSearchUser, {
|
|
460
|
-
children: [/*#__PURE__*/_jsx(Search, {}), workspacesFeatureEnabled && /*#__PURE__*/_jsx(FilterChip, {
|
|
461
|
-
id: PEOPLE_FILTER_EVENT_TYPES.WORKSPACE,
|
|
462
|
-
label: t('filters.workspace'),
|
|
463
|
-
options: workspaceOptionsToShow,
|
|
464
|
-
emptyMessage: t('users.emptyFilterMessage'),
|
|
465
|
-
dispatchSearchOnClose: false,
|
|
466
|
-
onLoadMore: handleWorkspacesLoadMore,
|
|
467
|
-
hasMorePages: canLoadMoreWorkspaces,
|
|
468
|
-
loadMoreLoading: workspacesLoading && workspacesList.length > 0,
|
|
469
|
-
optionsLoading: workspacesLoading && workspacesList.length === 0,
|
|
470
|
-
loadingMessage: t('users.loadingWorkspaces'),
|
|
471
|
-
initialResolvedSelection: workspaceInitialSelection
|
|
472
|
-
}, workspaceFilterChipKey), /*#__PURE__*/_jsx(FilterChip, {
|
|
473
|
-
id: PEOPLE_FILTER_EVENT_TYPES.TEAM,
|
|
474
|
-
label: t('filters.team'),
|
|
475
|
-
options: teamOptions,
|
|
476
|
-
emptyMessage: t('users.emptyFilterMessage'),
|
|
477
|
-
selectionResetKey: teamFilterSelectionResetKey,
|
|
478
|
-
onOpen: handleTeamFilterOpen,
|
|
479
|
-
onLoadMore: handleTeamsLoadMore,
|
|
480
|
-
hasMorePages: canLoadMoreTeams,
|
|
481
|
-
loadMoreLoading: loading,
|
|
482
|
-
dispatchSearchOnClose: false,
|
|
483
|
-
initialResolvedSelection: teamInitialSelection
|
|
484
|
-
}, teamFilterChipKey), /*#__PURE__*/_jsx(FilterChip, {
|
|
485
|
-
id: PEOPLE_FILTER_EVENT_TYPES.POSITION,
|
|
486
|
-
label: t('filters.position'),
|
|
487
|
-
options: positionOptionsToShow,
|
|
488
|
-
emptyMessage: t('users.emptyFilterMessage'),
|
|
489
|
-
dispatchSearchOnClose: true,
|
|
490
|
-
initialResolvedSelection: positionInitialSelection
|
|
491
|
-
}, positionFilterChipKey)]
|
|
492
|
-
});
|
|
493
|
-
});
|
|
494
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZW1vIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VUcmFuc2xhdGlvbiIsInVzZVVzZXJzUXVlcnkiLCJGaWx0ZXJDaGlwIiwidXNlR2V0VGVhbXMiLCJ1c2VMb2FkTW9yZUd1YXJkIiwiU0VBUkNIX0VWRU5UIiwiU2VhcmNoIiwiTGF5b3V0U2VhcmNoVXNlciIsInVzZUFzc2lnbmVkV29ya3NwYWNlc0Zyb21Ib3N0IiwiaXNDb3JXb3Jrc3BhY2VzRmVhdHVyZUVuYWJsZWQiLCJidWlsZENoaXBMYWJlbE1hcCIsImxvYWRVc2Vyc0ZpbHRlcnMiLCJvcHRpb25MYWJlbEJ5SWQiLCJzYXZlVXNlcnNGaWx0ZXJzIiwiZ2V0RWZmZWN0aXZlVXNlcnNGaWx0ZXJzIiwid3JpdGVVc2Vyc0ZpbHRlcnNUb1VybCIsIlBFT1BMRV9GSUxURVJfRVZFTlRfVFlQRVMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRmlsdGVyc0NvbnRhaW5lciIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlVXNlcnNRdWVyeSIsImhhbmRsZUdldFVzZXJzIiwicG9zaXRpb25zIiwiX3VzZUdldFRlYW1zIiwiaGFuZGxlR2V0VGVhbXMiLCJsb2FkaW5nIiwiZXJyb3IiLCJkYXRhIiwiY3VycmVudFBhZ2UiLCJsYXN0UGFnZSIsImluaXRpYWxNZXJnZWQiLCJ3b3Jrc3BhY2VzRmVhdHVyZUVuYWJsZWQiLCJfdXNlQXNzaWduZWRXb3Jrc3BhY2UiLCJ3b3Jrc3BhY2VzTGlzdCIsIndvcmtzcGFjZXNMb2FkaW5nIiwiaGFuZGxlR2V0V29ya3NwYWNlcyIsIndvcmtzcGFjZUN1cnJlbnRQYWdlIiwid29ya3NwYWNlTGFzdFBhZ2UiLCJjYW5Mb2FkTW9yZVdvcmtzcGFjZXMiLCJfdXNlTG9hZE1vcmVHdWFyZCIsInJlcXVlc3RXb3Jrc3BhY2VzTG9hZE1vcmUiLCJyZXF1ZXN0TG9hZE1vcmUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWFyY2hUZXJtVmFsdWUiLCJzZXRTZWFyY2hUZXJtVmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInRlYW1PcHRpb25zIiwic2V0VGVhbU9wdGlvbnMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInBvc2l0aW9uT3B0aW9ucyIsInNldFBvc2l0aW9uT3B0aW9ucyIsImRlZmF1bHRQb3NpdGlvbnNSZWYiLCJfdXNlU3RhdGU3Iiwic2VsZWN0ZWRUZWFtcyIsIl91c2VTdGF0ZTgiLCJzZXRTZWxlY3RlZFRlYW1zIiwiX3VzZVN0YXRlOSIsInNlbGVjdGVkUG9zaXRpb25zIiwiX3VzZVN0YXRlMCIsInNldFNlbGVjdGVkUG9zaXRpb25zIiwiX3VzZVN0YXRlMSIsInNlbGVjdGVkV29ya3NwYWNlcyIsIl91c2VTdGF0ZTEwIiwic2V0U2VsZWN0ZWRXb3Jrc3BhY2VzIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInRlYW1TZWFyY2hUZXJtIiwic2V0VGVhbVNlYXJjaFRlcm0iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwicG9zaXRpb25TZWFyY2hUZXJtIiwic2V0UG9zaXRpb25TZWFyY2hUZXJtIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsIndvcmtzcGFjZVNlYXJjaFRlcm0iLCJzZXRXb3Jrc3BhY2VTZWFyY2hUZXJtIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInRlYW1GaWx0ZXJTZWxlY3Rpb25SZXNldEtleSIsInNldFRlYW1GaWx0ZXJTZWxlY3Rpb25SZXNldEtleSIsIl91c2VTdGF0ZTE5IiwiX2luaXRpYWxNZXJnZWQkY2hpcExhIiwiY2hpcExhYmVscyIsIl91c2VTdGF0ZTIwIiwicGVyc2lzdGVkQ2hpcExhYmVscyIsInNldFBlcnNpc3RlZENoaXBMYWJlbHMiLCJ3b3Jrc3BhY2VPcHRpb25zIiwibWFwIiwidyIsIl93JG5hbWUiLCJpZCIsIk51bWJlciIsImxhYmVsIiwiU3RyaW5nIiwibmFtZSIsImNhbkxvYWRNb3JlVGVhbXMiLCJfdXNlTG9hZE1vcmVHdWFyZDIiLCJyZXF1ZXN0VGVhbXNMb2FkTW9yZSIsImJ1aWxkQW5kU2VuZFVzZXJSZXF1ZXN0IiwiX3JlZiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInNlYXJjaElucHV0T3ZlcnJpZGUiLCJ0ZWFtc092ZXJyaWRlIiwicG9zaXRpb25zT3ZlcnJpZGUiLCJ3b3Jrc3BhY2VzT3ZlcnJpZGUiLCJwb3NpdGlvbnNGaWx0ZXIiLCJ0ZWFtc0ZpbHRlciIsInRlYW0iLCJ3b3Jrc3BhY2VzRmlsdGVyIiwid29ya3NwYWNlSWRzIiwidmFsdWVzVG9GaWx0ZXIiLCJfb2JqZWN0U3ByZWFkIiwic2VhcmNoSW5wdXQiLCJwYWdlIiwiaGFuZGxlU2VhcmNoIiwiZXZlbnQiLCJfZXZlbnQkZGV0YWlsIiwiZGV0YWlsIiwic2VhcmNoVGVybSIsInR5cGUiLCJTRUFSQ0giLCJURUFNIiwiQXJyYXkiLCJpc0FycmF5IiwiYXJlVGVhbXNFcXVhbCIsImV2ZXJ5IiwidmFsdWUiLCJpbmRleCIsInRlcm0iLCJ0cmltIiwidGVhbUxpc3RGaWx0ZXIiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiUE9TSVRJT04iLCJhcmVQb3NpdGlvbnNFcXVhbCIsIldPUktTUEFDRSIsImFyZVdvcmtzcGFjZXNFcXVhbCIsImsiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9wZXJzaXN0ZWQkc2VsZWN0ZWRUZSIsIl9wZXJzaXN0ZWQkc2VsZWN0ZWRXbyIsInBlcnNpc3RlZCIsInRlYW1zVXNlcnMiLCJtYXBwZWQiLCJfdGVhbSRuYW1lIiwicHJldiIsImV4aXN0aW5nSWRzIiwiU2V0IiwibyIsIm5ld09uZXMiLCJoYXMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJjdXJyZW50IiwiaGFuZGxlVGVhbXNMb2FkTW9yZSIsImhhbmRsZVdvcmtzcGFjZXNMb2FkTW9yZSIsInBvc2l0aW9uT3B0aW9uc1RvU2hvdyIsInRvTG93ZXJDYXNlIiwicG9zV2l0aENhdGVnb3J5Iiwic2VsZWN0ZWRPcHRzIiwicCIsImluY2x1ZGVzIiwiZmlsdGVyZWRPcHRzIiwiY2F0ZWdvcnlOYW1lIiwiZmlsdGVyZWRJZHMiLCJzZWxlY3RlZE5vdEluRmlsdGVyZWQiLCJ3b3Jrc3BhY2VPcHRpb25zVG9TaG93IiwiaGFuZGxlVGVhbUZpbHRlck9wZW4iLCJfcHJldiRjaGlwTGFiZWxzIiwiX3ByZXYkY2hpcExhYmVsczIiLCJfcHJldiRjaGlwTGFiZWxzMyIsInRlYW1zIiwid29ya3NwYWNlcyIsInBvc2l0aW9uc01hcCIsInBheWxvYWQiLCJ3b3Jrc3BhY2VJbml0aWFsU2VsZWN0aW9uIiwiZnJvbVN0b3JhZ2UiLCJfcmVmMiIsIl9vcHRpb25MYWJlbEJ5SWQiLCJ0ZWFtSW5pdGlhbFNlbGVjdGlvbiIsIl9yZWYzIiwiX29wdGlvbkxhYmVsQnlJZDIiLCJwb3NpdGlvbkluaXRpYWxTZWxlY3Rpb24iLCJfcmVmNCIsIl9vcHRpb25MYWJlbEJ5SWQzIiwid29ya3NwYWNlRmlsdGVyQ2hpcEtleSIsIl93b3Jrc3BhY2VJbml0aWFsU2VsZSIsImpvaW4iLCJ4IiwidGVhbUZpbHRlckNoaXBLZXkiLCJfdGVhbUluaXRpYWxTZWxlY3Rpb24iLCJwb3NpdGlvbkZpbHRlckNoaXBLZXkiLCJfcG9zaXRpb25Jbml0aWFsU2VsZWMiLCJjaGlsZHJlbiIsIm9wdGlvbnMiLCJlbXB0eU1lc3NhZ2UiLCJkaXNwYXRjaFNlYXJjaE9uQ2xvc2UiLCJvbkxvYWRNb3JlIiwiaGFzTW9yZVBhZ2VzIiwibG9hZE1vcmVMb2FkaW5nIiwib3B0aW9uc0xvYWRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImluaXRpYWxSZXNvbHZlZFNlbGVjdGlvbiIsInNlbGVjdGlvblJlc2V0S2V5Iiwib25PcGVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRhaW5lci9GaWx0ZXJzL0ZpbHRlcnNDb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmltcG9ydCB7IG1lbW8sIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXJzUXVlcnkgfSBmcm9tICcuLi8uLi9jb250ZXh0L1VzZXJzQ29udGV4dCdcbmltcG9ydCB7IEZpbHRlckNoaXAgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0ZpbHRlcnMvRmlsdGVyQ2hpcCdcbmltcG9ydCB7IHVzZUdldFRlYW1zIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlR2V0VGVhbXMnXG5pbXBvcnQgeyB1c2VMb2FkTW9yZUd1YXJkIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlTG9hZE1vcmVHdWFyZCdcbmltcG9ydCB7IFNFQVJDSF9FVkVOVCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNlYXJjaEV2ZW50J1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9TZWFyY2gvU2VhcmNoJ1xuaW1wb3J0IHsgTGF5b3V0U2VhcmNoVXNlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dCdcbmltcG9ydCB7IHVzZUFzc2lnbmVkV29ya3NwYWNlc0Zyb21Ib3N0IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlQXNzaWduZWRXb3Jrc3BhY2VzRnJvbUhvc3QnXG5pbXBvcnQgeyBpc0NvcldvcmtzcGFjZXNGZWF0dXJlRW5hYmxlZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lzQ29yV29ya3NwYWNlc0ZlYXR1cmVFbmFibGVkJ1xuaW1wb3J0IHtcbiAgYnVpbGRDaGlwTGFiZWxNYXAsXG4gIGxvYWRVc2Vyc0ZpbHRlcnMsXG4gIG9wdGlvbkxhYmVsQnlJZCxcbiAgc2F2ZVVzZXJzRmlsdGVycyxcbiAgdHlwZSBDaGlwTGFiZWxzUGVyc2lzdGVkLFxufSBmcm9tICcuLi8uLi91dGlscy9wZW9wbGVGaWx0ZXJzU3RvcmFnZSdcbmltcG9ydCB7IGdldEVmZmVjdGl2ZVVzZXJzRmlsdGVycywgd3JpdGVVc2Vyc0ZpbHRlcnNUb1VybCB9IGZyb20gJy4uLy4uL3V0aWxzL3Blb3BsZUZpbHRlcnNVcmwnXG5pbXBvcnQgeyBQRU9QTEVfRklMVEVSX0VWRU5UX1RZUEVTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Blb3BsZUZpbHRlckV2ZW50VHlwZXMnXG5cbmV4cG9ydCBjb25zdCBGaWx0ZXJzQ29udGFpbmVyID0gbWVtbygoKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ3Blb3BsZScpXG4gIGNvbnN0IHsgaGFuZGxlR2V0VXNlcnMsIHBvc2l0aW9ucyB9ID0gdXNlVXNlcnNRdWVyeSgpXG4gIGNvbnN0IHsgaGFuZGxlR2V0VGVhbXMsIGxvYWRpbmcsIGVycm9yLCBkYXRhLCBjdXJyZW50UGFnZSwgbGFzdFBhZ2UgfSA9IHVzZUdldFRlYW1zKClcblxuICBjb25zdCBpbml0aWFsTWVyZ2VkID0gdXNlTWVtbygoKSA9PiBnZXRFZmZlY3RpdmVVc2Vyc0ZpbHRlcnMoKSwgW10pXG5cbiAgY29uc3Qgd29ya3NwYWNlc0ZlYXR1cmVFbmFibGVkID0gaXNDb3JXb3Jrc3BhY2VzRmVhdHVyZUVuYWJsZWQoKVxuICBjb25zdCB7XG4gICAgd29ya3NwYWNlc0xpc3QsXG4gICAgbG9hZGluZzogd29ya3NwYWNlc0xvYWRpbmcsXG4gICAgaGFuZGxlR2V0V29ya3NwYWNlcyxcbiAgICBjdXJyZW50UGFnZTogd29ya3NwYWNlQ3VycmVudFBhZ2UsXG4gICAgbGFzdFBhZ2U6IHdvcmtzcGFjZUxhc3RQYWdlLFxuICB9ID0gdXNlQXNzaWduZWRXb3Jrc3BhY2VzRnJvbUhvc3Qod29ya3NwYWNlc0ZlYXR1cmVFbmFibGVkKVxuXG4gIGNvbnN0IGNhbkxvYWRNb3JlV29ya3NwYWNlcyA9IHdvcmtzcGFjZUN1cnJlbnRQYWdlIDwgd29ya3NwYWNlTGFzdFBhZ2VcbiAgY29uc3QgeyByZXF1ZXN0TG9hZE1vcmU6IHJlcXVlc3RXb3Jrc3BhY2VzTG9hZE1vcmUgfSA9IHVzZUxvYWRNb3JlR3VhcmQod29ya3NwYWNlc0xvYWRpbmcsIGNhbkxvYWRNb3JlV29ya3NwYWNlcylcblxuICBjb25zdCBbc2VhcmNoVGVybVZhbHVlLCBzZXRTZWFyY2hUZXJtVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFt0ZWFtT3B0aW9ucywgc2V0VGVhbU9wdGlvbnNdID0gdXNlU3RhdGU8eyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXT4oW10pXG4gIGNvbnN0IFtwb3NpdGlvbk9wdGlvbnMsIHNldFBvc2l0aW9uT3B0aW9uc10gPSB1c2VTdGF0ZTx7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfVtdPihwb3NpdGlvbnMgfHwgW10pXG4gIGNvbnN0IGRlZmF1bHRQb3NpdGlvbnNSZWYgPSB1c2VSZWY8eyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBjYXRlZ29yeU5hbWU/OiBzdHJpbmcgfVtdPihwb3NpdGlvbnMgfHwgW10pXG5cbiAgY29uc3QgW3NlbGVjdGVkVGVhbXMsIHNldFNlbGVjdGVkVGVhbXNdID0gdXNlU3RhdGU8bnVtYmVyW10+KCgpID0+IGluaXRpYWxNZXJnZWQuc2VsZWN0ZWRUZWFtcylcbiAgY29uc3QgW3NlbGVjdGVkUG9zaXRpb25zLCBzZXRTZWxlY3RlZFBvc2l0aW9uc10gPSB1c2VTdGF0ZTxudW1iZXJbXT4oKCkgPT4gaW5pdGlhbE1lcmdlZC5zZWxlY3RlZFBvc2l0aW9ucylcbiAgY29uc3QgW3NlbGVjdGVkV29ya3NwYWNlcywgc2V0U2VsZWN0ZWRXb3Jrc3BhY2VzXSA9IHVzZVN0YXRlPG51bWJlcltdPigoKSA9PiBpbml0aWFsTWVyZ2VkLnNlbGVjdGVkV29ya3NwYWNlcylcbiAgY29uc3QgW3RlYW1TZWFyY2hUZXJtLCBzZXRUZWFtU2VhcmNoVGVybV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3Bvc2l0aW9uU2VhcmNoVGVybSwgc2V0UG9zaXRpb25TZWFyY2hUZXJtXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbd29ya3NwYWNlU2VhcmNoVGVybSwgc2V0V29ya3NwYWNlU2VhcmNoVGVybV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW3RlYW1GaWx0ZXJTZWxlY3Rpb25SZXNldEtleSwgc2V0VGVhbUZpbHRlclNlbGVjdGlvblJlc2V0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtwZXJzaXN0ZWRDaGlwTGFiZWxzLCBzZXRQZXJzaXN0ZWRDaGlwTGFiZWxzXSA9IHVzZVN0YXRlKCgpID0+IGluaXRpYWxNZXJnZWQuY2hpcExhYmVscyA/PyB7fSlcblxuICBjb25zdCB3b3Jrc3BhY2VPcHRpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiB3b3Jrc3BhY2VzTGlzdC5tYXAodyA9PiAoeyBpZDogTnVtYmVyKHcuaWQpLCBsYWJlbDogU3RyaW5nKHcubmFtZSA/PyAnJykgfSkpLFxuICAgIFt3b3Jrc3BhY2VzTGlzdF1cbiAgKVxuXG4gIGNvbnN0IGNhbkxvYWRNb3JlVGVhbXMgPSBjdXJyZW50UGFnZSA8IGxhc3RQYWdlXG4gIGNvbnN0IHsgcmVxdWVzdExvYWRNb3JlOiByZXF1ZXN0VGVhbXNMb2FkTW9yZSB9ID0gdXNlTG9hZE1vcmVHdWFyZChsb2FkaW5nLCBjYW5Mb2FkTW9yZVRlYW1zKVxuXG4gIGNvbnN0IGJ1aWxkQW5kU2VuZFVzZXJSZXF1ZXN0ID0gKHtcbiAgICBzZWFyY2hJbnB1dE92ZXJyaWRlLFxuICAgIHRlYW1zT3ZlcnJpZGUsXG4gICAgcG9zaXRpb25zT3ZlcnJpZGUsXG4gICAgd29ya3NwYWNlc092ZXJyaWRlLFxuICB9OiB7XG4gICAgc2VhcmNoSW5wdXRPdmVycmlkZT86IHN0cmluZ1xuICAgIHRlYW1zT3ZlcnJpZGU/OiBudW1iZXJbXVxuICAgIHBvc2l0aW9uc092ZXJyaWRlPzogbnVtYmVyW11cbiAgICB3b3Jrc3BhY2VzT3ZlcnJpZGU/OiBudW1iZXJbXVxuICB9ID0ge30pID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnNGaWx0ZXIgPVxuICAgICAgcG9zaXRpb25zT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHBvc2l0aW9uc092ZXJyaWRlLmxlbmd0aFxuICAgICAgICAgID8geyBwb3NpdGlvbnM6IHBvc2l0aW9uc092ZXJyaWRlIH1cbiAgICAgICAgICA6IHt9XG4gICAgICAgIDogc2VsZWN0ZWRQb3NpdGlvbnMubGVuZ3RoXG4gICAgICAgID8geyBwb3NpdGlvbnM6IHNlbGVjdGVkUG9zaXRpb25zIH1cbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IHRlYW1zRmlsdGVyID1cbiAgICAgIHRlYW1zT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRlYW1zT3ZlcnJpZGUubGVuZ3RoXG4gICAgICAgICAgPyB7IHRlYW06IHRlYW1zT3ZlcnJpZGUgfVxuICAgICAgICAgIDoge31cbiAgICAgICAgOiBzZWxlY3RlZFRlYW1zLmxlbmd0aFxuICAgICAgICA/IHsgdGVhbTogc2VsZWN0ZWRUZWFtcyB9XG4gICAgICAgIDoge31cbiAgICBjb25zdCB3b3Jrc3BhY2VzRmlsdGVyID1cbiAgICAgIHdvcmtzcGFjZXNPdmVycmlkZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gd29ya3NwYWNlc092ZXJyaWRlLmxlbmd0aFxuICAgICAgICAgID8geyB3b3Jrc3BhY2VJZHM6IHdvcmtzcGFjZXNPdmVycmlkZSB9XG4gICAgICAgICAgOiB7fVxuICAgICAgICA6IHNlbGVjdGVkV29ya3NwYWNlcy5sZW5ndGhcbiAgICAgICAgPyB7IHdvcmtzcGFjZUlkczogc2VsZWN0ZWRXb3Jrc3BhY2VzIH1cbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IHZhbHVlc1RvRmlsdGVyID0geyAuLi5wb3NpdGlvbnNGaWx0ZXIsIC4uLnRlYW1zRmlsdGVyLCAuLi53b3Jrc3BhY2VzRmlsdGVyIH1cblxuICAgIGhhbmRsZUdldFVzZXJzKHtcbiAgICAgIHNlYXJjaElucHV0OiBzZWFyY2hJbnB1dE92ZXJyaWRlICE9PSB1bmRlZmluZWQgPyBzZWFyY2hJbnB1dE92ZXJyaWRlIDogc2VhcmNoVGVybVZhbHVlLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHZhbHVlc1RvRmlsdGVyOiB2YWx1ZXNUb0ZpbHRlciBhcyBhbnksXG4gICAgfSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2VhcmNoID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBzZWFyY2hUZXJtLCB0eXBlLCB2YWx1ZXNUb0ZpbHRlciB9ID0gZXZlbnQuZGV0YWlsXG4gICAgICBpZiAodHlwZSA9PT0gUEVPUExFX0ZJTFRFUl9FVkVOVF9UWVBFUy5TRUFSQ0gpIHtcbiAgICAgICAgc2V0U2VhcmNoVGVybVZhbHVlKHNlYXJjaFRlcm0pXG4gICAgICAgIGJ1aWxkQW5kU2VuZFVzZXJSZXF1ZXN0KHsgc2VhcmNoSW5wdXRPdmVycmlkZTogc2VhcmNoVGVybSB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFBFT1BMRV9GSUxURVJfRVZFTlRfVFlQRVMuVEVBTSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXNUb0ZpbHRlcikpIHtcbiAgICAgICAgICBpZiAodmFsdWVzVG9GaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhcmVUZWFtc0VxdWFsID1cbiAgICAgICAgICAgICAgdmFsdWVzVG9GaWx0ZXIubGVuZ3RoID09PSBzZWxlY3RlZFRlYW1zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB2YWx1ZXNUb0ZpbHRlci5ldmVyeSgodmFsdWUsIGluZGV4OiBudW1iZXIpID0+IHZhbHVlID09PSBzZWxlY3RlZFRlYW1zW2luZGV4XSlcbiAgICAgICAgICAgIGlmIChhcmVUZWFtc0VxdWFsKSByZXR1cm5cbiAgICAgICAgICAgIHNldFNlbGVjdGVkVGVhbXModmFsdWVzVG9GaWx0ZXIpXG4gICAgICAgICAgICBidWlsZEFuZFNlbmRVc2VyUmVxdWVzdCh7IHRlYW1zT3ZlcnJpZGU6IHZhbHVlc1RvRmlsdGVyIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkVGVhbXMoW10pXG4gICAgICAgICAgICBidWlsZEFuZFNlbmRVc2VyUmVxdWVzdCh7IHRlYW1zT3ZlcnJpZGU6IFtdIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRlYW1TZWFyY2hUZXJtKHNlYXJjaFRlcm0gPz8gJycpXG4gICAgICAgICAgY29uc3QgdGVybSA9IChzZWFyY2hUZXJtID8/ICcnKS50cmltKClcbiAgICAgICAgICBjb25zdCB0ZWFtTGlzdEZpbHRlcjogeyBuYW1lPzogc3RyaW5nOyB3b3Jrc3BhY2VJZHM/OiBudW1iZXJbXSB9ID0ge31cbiAgICAgICAgICBpZiAodGVybSkgdGVhbUxpc3RGaWx0ZXIubmFtZSA9IHRlcm1cbiAgICAgICAgICBpZiAoc2VsZWN0ZWRXb3Jrc3BhY2VzLmxlbmd0aCkgdGVhbUxpc3RGaWx0ZXIud29ya3NwYWNlSWRzID0gc2VsZWN0ZWRXb3Jrc3BhY2VzXG4gICAgICAgICAgaGFuZGxlR2V0VGVhbXMoe1xuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyh0ZWFtTGlzdEZpbHRlcikubGVuZ3RoID8geyBmaWx0ZXI6IHRlYW1MaXN0RmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gUEVPUExFX0ZJTFRFUl9FVkVOVF9UWVBFUy5QT1NJVElPTikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXNUb0ZpbHRlcikpIHtcbiAgICAgICAgICBpZiAoIXZhbHVlc1RvRmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRQb3NpdGlvbnMoW10pXG4gICAgICAgICAgICBidWlsZEFuZFNlbmRVc2VyUmVxdWVzdCh7IHBvc2l0aW9uc092ZXJyaWRlOiBbXSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcmVQb3NpdGlvbnNFcXVhbCA9XG4gICAgICAgICAgICAgIHZhbHVlc1RvRmlsdGVyLmxlbmd0aCA9PT0gc2VsZWN0ZWRQb3NpdGlvbnMubGVuZ3RoICYmXG4gICAgICAgICAgICAgIHZhbHVlc1RvRmlsdGVyLmV2ZXJ5KCh2YWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gdmFsdWUgPT09IHNlbGVjdGVkUG9zaXRpb25zW2luZGV4XSlcbiAgICAgICAgICAgIGlmIChhcmVQb3NpdGlvbnNFcXVhbCkgcmV0dXJuXG4gICAgICAgICAgICBzZXRTZWxlY3RlZFBvc2l0aW9ucyh2YWx1ZXNUb0ZpbHRlcilcbiAgICAgICAgICAgIGJ1aWxkQW5kU2VuZFVzZXJSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgcG9zaXRpb25zT3ZlcnJpZGU6IHZhbHVlc1RvRmlsdGVyLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0UG9zaXRpb25TZWFyY2hUZXJtKHNlYXJjaFRlcm0gPz8gJycpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09IFBFT1BMRV9GSUxURVJfRVZFTlRfVFlQRVMuV09SS1NQQUNFKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlc1RvRmlsdGVyKSkge1xuICAgICAgICAgIGlmICghdmFsdWVzVG9GaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZFdvcmtzcGFjZXMoW10pXG4gICAgICAgICAgICBidWlsZEFuZFNlbmRVc2VyUmVxdWVzdCh7IHdvcmtzcGFjZXNPdmVycmlkZTogW10gfSlcbiAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZWFtU2VhcmNoVGVybS50cmltKClcbiAgICAgICAgICAgIGhhbmRsZUdldFRlYW1zKHsgcGFnZTogMSwgLi4uKHRlcm0gPyB7IGZpbHRlcjogeyBuYW1lOiB0ZXJtIH0gfSA6IHt9KSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcmVXb3Jrc3BhY2VzRXF1YWwgPVxuICAgICAgICAgICAgICB2YWx1ZXNUb0ZpbHRlci5sZW5ndGggPT09IHNlbGVjdGVkV29ya3NwYWNlcy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgdmFsdWVzVG9GaWx0ZXIuZXZlcnkoKHZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiB2YWx1ZSA9PT0gc2VsZWN0ZWRXb3Jrc3BhY2VzW2luZGV4XSlcbiAgICAgICAgICAgIGlmIChhcmVXb3Jrc3BhY2VzRXF1YWwpIHJldHVyblxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRXb3Jrc3BhY2VzKHZhbHVlc1RvRmlsdGVyKVxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRUZWFtcyhbXSlcbiAgICAgICAgICAgIHNldFRlYW1GaWx0ZXJTZWxlY3Rpb25SZXNldEtleShrID0+IGsgKyAxKVxuICAgICAgICAgICAgYnVpbGRBbmRTZW5kVXNlclJlcXVlc3QoeyB3b3Jrc3BhY2VzT3ZlcnJpZGU6IHZhbHVlc1RvRmlsdGVyLCB0ZWFtc092ZXJyaWRlOiBbXSB9KVxuICAgICAgICAgICAgY29uc3QgdGVybSA9IHRlYW1TZWFyY2hUZXJtLnRyaW0oKVxuICAgICAgICAgICAgY29uc3QgdGVhbUxpc3RGaWx0ZXI6IHsgbmFtZT86IHN0cmluZzsgd29ya3NwYWNlSWRzOiBudW1iZXJbXSB9ID0ge1xuICAgICAgICAgICAgICB3b3Jrc3BhY2VJZHM6IHZhbHVlc1RvRmlsdGVyLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlcm0pIHRlYW1MaXN0RmlsdGVyLm5hbWUgPSB0ZXJtXG4gICAgICAgICAgICBoYW5kbGVHZXRUZWFtcyh7IHBhZ2U6IDEsIGZpbHRlcjogdGVhbUxpc3RGaWx0ZXIgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGVybSA9IHNlYXJjaFRlcm0gPz8gJydcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VTZWFyY2hUZXJtKHRlcm0pXG4gICAgICAgICAgaGFuZGxlR2V0V29ya3NwYWNlcyh7XG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgLi4uKHRlcm0udHJpbSgpID8geyBmaWx0ZXI6IHsgbmFtZTogdGVybS50cmltKCkgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihTRUFSQ0hfRVZFTlQsIGhhbmRsZVNlYXJjaCBhcyB1bmtub3duIGFzIEV2ZW50TGlzdGVuZXIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFNFQVJDSF9FVkVOVCwgaGFuZGxlU2VhcmNoIGFzIHVua25vd24gYXMgRXZlbnRMaXN0ZW5lcilcbiAgICB9XG4gIH0sIFtcbiAgICBoYW5kbGVHZXRVc2VycyxcbiAgICBoYW5kbGVHZXRUZWFtcyxcbiAgICBoYW5kbGVHZXRXb3Jrc3BhY2VzLFxuICAgIHNlYXJjaFRlcm1WYWx1ZSxcbiAgICBzZWxlY3RlZFRlYW1zLFxuICAgIHNlbGVjdGVkUG9zaXRpb25zLFxuICAgIHNlbGVjdGVkV29ya3NwYWNlcyxcbiAgICB0ZWFtU2VhcmNoVGVybSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd29ya3NwYWNlc0ZlYXR1cmVFbmFibGVkKSByZXR1cm5cbiAgICBoYW5kbGVHZXRXb3Jrc3BhY2VzKHsgcGFnZTogMSB9KVxuICB9LCBbd29ya3NwYWNlc0ZlYXR1cmVFbmFibGVkLCBoYW5kbGVHZXRXb3Jrc3BhY2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHBlcnNpc3RlZCA9IGdldEVmZmVjdGl2ZVVzZXJzRmlsdGVycygpXG4gICAgaWYgKCFwZXJzaXN0ZWQ/LnNlbGVjdGVkVGVhbXM/Lmxlbmd0aCkgcmV0dXJuXG5cbiAgICBjb25zdCB0ZWFtTGlzdEZpbHRlcjogeyBuYW1lPzogc3RyaW5nOyB3b3Jrc3BhY2VJZHM/OiBudW1iZXJbXSB9ID0ge31cbiAgICBpZiAocGVyc2lzdGVkLnNlbGVjdGVkV29ya3NwYWNlcz8ubGVuZ3RoKSB7XG4gICAgICB0ZWFtTGlzdEZpbHRlci53b3Jrc3BhY2VJZHMgPSBwZXJzaXN0ZWQuc2VsZWN0ZWRXb3Jrc3BhY2VzXG4gICAgfVxuICAgIGhhbmRsZUdldFRlYW1zKHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICAuLi4oT2JqZWN0LmtleXModGVhbUxpc3RGaWx0ZXIpLmxlbmd0aCA/IHsgZmlsdGVyOiB0ZWFtTGlzdEZpbHRlciB9IDoge30pLFxuICAgIH0pXG4gIH0sIFtoYW5kbGVHZXRUZWFtc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRhdGE/LnRlYW1zVXNlcnMgfHwgZXJyb3IpIHJldHVyblxuICAgIGNvbnN0IG1hcHBlZCA9IGRhdGEudGVhbXNVc2Vycy5kYXRhLm1hcCgodGVhbTogeyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9KSA9PiAoe1xuICAgICAgaWQ6IE51bWJlcih0ZWFtLmlkKSxcbiAgICAgIGxhYmVsOiBTdHJpbmcodGVhbS5uYW1lID8/ICcnKSxcbiAgICB9KSlcbiAgICBpZiAoZGF0YS50ZWFtc1VzZXJzLnBhZ2UgPT09IDEpIHtcbiAgICAgIHNldFRlYW1PcHRpb25zKG1hcHBlZClcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGVhbU9wdGlvbnMocHJldiA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2Lm1hcChvID0+IG8uaWQpKVxuICAgICAgICBjb25zdCBuZXdPbmVzID0gbWFwcGVkLmZpbHRlcigobzogeyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0pID0+ICFleGlzdGluZ0lkcy5oYXMoTnVtYmVyKG8uaWQpKSlcbiAgICAgICAgcmV0dXJuIG5ld09uZXMubGVuZ3RoID8gWy4uLnByZXYsIC4uLm5ld09uZXNdIDogcHJldlxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtkYXRhLCBlcnJvcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocG9zaXRpb25zKSB7XG4gICAgICBzZXRQb3NpdGlvbk9wdGlvbnMocG9zaXRpb25zKVxuICAgICAgaWYgKHBvc2l0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZGVmYXVsdFBvc2l0aW9uc1JlZi5jdXJyZW50ID0gcG9zaXRpb25zXG4gICAgICB9XG4gICAgfVxuICB9LCBbcG9zaXRpb25zXSlcblxuICBjb25zdCBoYW5kbGVUZWFtc0xvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJlcXVlc3RUZWFtc0xvYWRNb3JlKCgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm0gPSB0ZWFtU2VhcmNoVGVybT8udHJpbSgpXG4gICAgICBjb25zdCB0ZWFtTGlzdEZpbHRlcjogeyBuYW1lPzogc3RyaW5nOyB3b3Jrc3BhY2VJZHM/OiBudW1iZXJbXSB9ID0ge31cbiAgICAgIGlmICh0ZXJtKSB0ZWFtTGlzdEZpbHRlci5uYW1lID0gdGVybVxuICAgICAgaWYgKHNlbGVjdGVkV29ya3NwYWNlcy5sZW5ndGgpIHRlYW1MaXN0RmlsdGVyLndvcmtzcGFjZUlkcyA9IHNlbGVjdGVkV29ya3NwYWNlc1xuICAgICAgaGFuZGxlR2V0VGVhbXMoe1xuICAgICAgICBwYWdlOiBjdXJyZW50UGFnZSArIDEsXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyh0ZWFtTGlzdEZpbHRlcikubGVuZ3RoID8geyBmaWx0ZXI6IHRlYW1MaXN0RmlsdGVyIH0gOiB7fSksXG4gICAgICB9KVxuICAgIH0pXG4gIH0sIFtyZXF1ZXN0VGVhbXNMb2FkTW9yZSwgY3VycmVudFBhZ2UsIHRlYW1TZWFyY2hUZXJtLCBzZWxlY3RlZFdvcmtzcGFjZXMsIGhhbmRsZUdldFRlYW1zXSlcblxuICBjb25zdCBoYW5kbGVXb3Jrc3BhY2VzTG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmVxdWVzdFdvcmtzcGFjZXNMb2FkTW9yZSgoKSA9PlxuICAgICAgaGFuZGxlR2V0V29ya3NwYWNlcyh7XG4gICAgICAgIHBhZ2U6IHdvcmtzcGFjZUN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgLi4uKHdvcmtzcGFjZVNlYXJjaFRlcm0/LnRyaW0oKSA/IHsgZmlsdGVyOiB7IG5hbWU6IHdvcmtzcGFjZVNlYXJjaFRlcm0udHJpbSgpIH0gfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgKVxuICB9LCBbcmVxdWVzdFdvcmtzcGFjZXNMb2FkTW9yZSwgd29ya3NwYWNlQ3VycmVudFBhZ2UsIHdvcmtzcGFjZVNlYXJjaFRlcm0sIGhhbmRsZUdldFdvcmtzcGFjZXNdKVxuXG4gIGNvbnN0IHBvc2l0aW9uT3B0aW9uc1RvU2hvdyA9ICFwb3NpdGlvblNlYXJjaFRlcm0udHJpbSgpXG4gICAgPyBwb3NpdGlvbk9wdGlvbnNcbiAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSBwb3NpdGlvblNlYXJjaFRlcm0udHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgY29uc3QgcG9zV2l0aENhdGVnb3J5ID0gcG9zaXRpb25PcHRpb25zIGFzIHsgaWQ6IG51bWJlcjsgbGFiZWw6IHN0cmluZzsgY2F0ZWdvcnlOYW1lPzogc3RyaW5nIH1bXVxuICAgICAgICBjb25zdCBzZWxlY3RlZE9wdHMgPSBwb3NXaXRoQ2F0ZWdvcnkuZmlsdGVyKHAgPT4gc2VsZWN0ZWRQb3NpdGlvbnMuaW5jbHVkZXMocC5pZCkpXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0cyA9IHBvc1dpdGhDYXRlZ29yeS5maWx0ZXIoXG4gICAgICAgICAgcCA9PiBwLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkgfHwgKHAuY2F0ZWdvcnlOYW1lICYmIHAuY2F0ZWdvcnlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSkpXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJZHMgPSBuZXcgU2V0KGZpbHRlcmVkT3B0cy5tYXAobyA9PiBvLmlkKSlcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWROb3RJbkZpbHRlcmVkID0gc2VsZWN0ZWRPcHRzLmZpbHRlcihvID0+ICFmaWx0ZXJlZElkcy5oYXMoby5pZCkpXG4gICAgICAgIHJldHVybiBbLi4uc2VsZWN0ZWROb3RJbkZpbHRlcmVkLCAuLi5maWx0ZXJlZE9wdHNdXG4gICAgICB9KSgpXG5cbiAgY29uc3Qgd29ya3NwYWNlT3B0aW9uc1RvU2hvdyA9ICF3b3Jrc3BhY2VTZWFyY2hUZXJtLnRyaW0oKVxuICAgID8gd29ya3NwYWNlT3B0aW9uc1xuICAgIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgdGVybSA9IHdvcmtzcGFjZVNlYXJjaFRlcm0udHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRzID0gd29ya3NwYWNlT3B0aW9ucy5maWx0ZXIocCA9PiBzZWxlY3RlZFdvcmtzcGFjZXMuaW5jbHVkZXMocC5pZCkpXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0cyA9IHdvcmtzcGFjZU9wdGlvbnMuZmlsdGVyKHAgPT4gcC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKVxuICAgICAgICBjb25zdCBmaWx0ZXJlZElkcyA9IG5ldyBTZXQoZmlsdGVyZWRPcHRzLm1hcChvID0+IG8uaWQpKVxuICAgICAgICBjb25zdCBzZWxlY3RlZE5vdEluRmlsdGVyZWQgPSBzZWxlY3RlZE9wdHMuZmlsdGVyKG8gPT4gIWZpbHRlcmVkSWRzLmhhcyhvLmlkKSlcbiAgICAgICAgcmV0dXJuIFsuLi5zZWxlY3RlZE5vdEluRmlsdGVyZWQsIC4uLmZpbHRlcmVkT3B0c11cbiAgICAgIH0pKClcblxuICBjb25zdCBoYW5kbGVUZWFtRmlsdGVyT3BlbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0ZXJtID0gdGVhbVNlYXJjaFRlcm0udHJpbSgpXG4gICAgY29uc3QgdGVhbUxpc3RGaWx0ZXI6IHsgbmFtZT86IHN0cmluZzsgd29ya3NwYWNlSWRzPzogbnVtYmVyW10gfSA9IHt9XG4gICAgaWYgKHRlcm0pIHRlYW1MaXN0RmlsdGVyLm5hbWUgPSB0ZXJtXG4gICAgaWYgKHNlbGVjdGVkV29ya3NwYWNlcy5sZW5ndGgpIHRlYW1MaXN0RmlsdGVyLndvcmtzcGFjZUlkcyA9IHNlbGVjdGVkV29ya3NwYWNlc1xuICAgIGhhbmRsZUdldFRlYW1zKHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICAuLi4oT2JqZWN0LmtleXModGVhbUxpc3RGaWx0ZXIpLmxlbmd0aCA/IHsgZmlsdGVyOiB0ZWFtTGlzdEZpbHRlciB9IDoge30pLFxuICAgIH0pXG4gIH0sIFt0ZWFtU2VhcmNoVGVybSwgc2VsZWN0ZWRXb3Jrc3BhY2VzLCBoYW5kbGVHZXRUZWFtc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gbG9hZFVzZXJzRmlsdGVycygpXG4gICAgY29uc3QgY2hpcExhYmVsczogQ2hpcExhYmVsc1BlcnNpc3RlZCA9IHt9XG4gICAgY29uc3QgdGVhbXMgPSBidWlsZENoaXBMYWJlbE1hcChzZWxlY3RlZFRlYW1zLCB0ZWFtT3B0aW9ucywgcHJldj8uY2hpcExhYmVscz8udGVhbXMpXG4gICAgY29uc3Qgd29ya3NwYWNlcyA9IGJ1aWxkQ2hpcExhYmVsTWFwKHNlbGVjdGVkV29ya3NwYWNlcywgd29ya3NwYWNlT3B0aW9ucywgcHJldj8uY2hpcExhYmVscz8ud29ya3NwYWNlcylcbiAgICBjb25zdCBwb3NpdGlvbnNNYXAgPSBidWlsZENoaXBMYWJlbE1hcChzZWxlY3RlZFBvc2l0aW9ucywgcG9zaXRpb25PcHRpb25zLCBwcmV2Py5jaGlwTGFiZWxzPy5wb3NpdGlvbnMpXG4gICAgaWYgKHRlYW1zKSBjaGlwTGFiZWxzLnRlYW1zID0gdGVhbXNcbiAgICBpZiAod29ya3NwYWNlcykgY2hpcExhYmVscy53b3Jrc3BhY2VzID0gd29ya3NwYWNlc1xuICAgIGlmIChwb3NpdGlvbnNNYXApIGNoaXBMYWJlbHMucG9zaXRpb25zID0gcG9zaXRpb25zTWFwXG5cbiAgICBzZXRQZXJzaXN0ZWRDaGlwTGFiZWxzKGNoaXBMYWJlbHMpXG5cbiAgICBjb25zdCBwYXlsb2FkOiBQYXJhbWV0ZXJzPHR5cGVvZiBzYXZlVXNlcnNGaWx0ZXJzPlswXSA9IHtcbiAgICAgIHNlYXJjaElucHV0OiBzZWFyY2hUZXJtVmFsdWUsXG4gICAgICBzZWxlY3RlZFRlYW1zLFxuICAgICAgc2VsZWN0ZWRQb3NpdGlvbnMsXG4gICAgICBzZWxlY3RlZFdvcmtzcGFjZXMsXG4gICAgICAuLi4oT2JqZWN0LmtleXMoY2hpcExhYmVscykubGVuZ3RoID8geyBjaGlwTGFiZWxzIH0gOiB7fSksXG4gICAgfVxuICAgIHNhdmVVc2Vyc0ZpbHRlcnMocGF5bG9hZClcbiAgICB3cml0ZVVzZXJzRmlsdGVyc1RvVXJsKHBheWxvYWQpXG4gIH0sIFtcbiAgICBzZWFyY2hUZXJtVmFsdWUsXG4gICAgc2VsZWN0ZWRUZWFtcyxcbiAgICBzZWxlY3RlZFBvc2l0aW9ucyxcbiAgICBzZWxlY3RlZFdvcmtzcGFjZXMsXG4gICAgdGVhbU9wdGlvbnMsXG4gICAgd29ya3NwYWNlT3B0aW9ucyxcbiAgICBwb3NpdGlvbk9wdGlvbnMsXG4gIF0pXG5cbiAgY29uc3Qgd29ya3NwYWNlSW5pdGlhbFNlbGVjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRXb3Jrc3BhY2VzLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGZyb21TdG9yYWdlID0gcGVyc2lzdGVkQ2hpcExhYmVscz8ud29ya3NwYWNlc1xuICAgIHJldHVybiBzZWxlY3RlZFdvcmtzcGFjZXMubWFwKGlkID0+ICh7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBvcHRpb25MYWJlbEJ5SWQoaWQsIHdvcmtzcGFjZU9wdGlvbnMpID8/IGZyb21TdG9yYWdlPy5bU3RyaW5nKGlkKV0gPz8gYCMke2lkfWAsXG4gICAgfSkpXG4gIH0sIFtzZWxlY3RlZFdvcmtzcGFjZXMsIHdvcmtzcGFjZU9wdGlvbnMsIHBlcnNpc3RlZENoaXBMYWJlbHNdKVxuXG4gIGNvbnN0IHRlYW1Jbml0aWFsU2VsZWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZFRlYW1zLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGZyb21TdG9yYWdlID0gcGVyc2lzdGVkQ2hpcExhYmVscz8udGVhbXNcbiAgICByZXR1cm4gc2VsZWN0ZWRUZWFtcy5tYXAoaWQgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IG9wdGlvbkxhYmVsQnlJZChpZCwgdGVhbU9wdGlvbnMpID8/IGZyb21TdG9yYWdlPy5bU3RyaW5nKGlkKV0gPz8gYCMke2lkfWAsXG4gICAgfSkpXG4gIH0sIFtzZWxlY3RlZFRlYW1zLCB0ZWFtT3B0aW9ucywgcGVyc2lzdGVkQ2hpcExhYmVsc10pXG5cbiAgY29uc3QgcG9zaXRpb25Jbml0aWFsU2VsZWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZFBvc2l0aW9ucy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBmcm9tU3RvcmFnZSA9IHBlcnNpc3RlZENoaXBMYWJlbHM/LnBvc2l0aW9uc1xuICAgIHJldHVybiBzZWxlY3RlZFBvc2l0aW9ucy5tYXAoaWQgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IG9wdGlvbkxhYmVsQnlJZChpZCwgcG9zaXRpb25PcHRpb25zKSA/PyBmcm9tU3RvcmFnZT8uW1N0cmluZyhpZCldID8/IGAjJHtpZH1gLFxuICAgIH0pKVxuICB9LCBbc2VsZWN0ZWRQb3NpdGlvbnMsIHBvc2l0aW9uT3B0aW9ucywgcGVyc2lzdGVkQ2hpcExhYmVsc10pXG5cbiAgY29uc3Qgd29ya3NwYWNlRmlsdGVyQ2hpcEtleSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGB3cy0ke3NlbGVjdGVkV29ya3NwYWNlcy5qb2luKCctJyl9XyR7d29ya3NwYWNlSW5pdGlhbFNlbGVjdGlvbj8ubWFwKHggPT4gYCR7eC5pZH06JHt4LmxhYmVsfWApLmpvaW4oJ3wnKSA/PyAnJ31gLFxuICAgIFtzZWxlY3RlZFdvcmtzcGFjZXMsIHdvcmtzcGFjZUluaXRpYWxTZWxlY3Rpb25dXG4gIClcblxuICBjb25zdCB0ZWFtRmlsdGVyQ2hpcEtleSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gYHRtLSR7c2VsZWN0ZWRUZWFtcy5qb2luKCctJyl9XyR7dGVhbUluaXRpYWxTZWxlY3Rpb24/Lm1hcCh4ID0+IGAke3guaWR9OiR7eC5sYWJlbH1gKS5qb2luKCd8JykgPz8gJyd9YCxcbiAgICBbc2VsZWN0ZWRUZWFtcywgdGVhbUluaXRpYWxTZWxlY3Rpb25dXG4gIClcblxuICBjb25zdCBwb3NpdGlvbkZpbHRlckNoaXBLZXkgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBgcG9zLSR7c2VsZWN0ZWRQb3NpdGlvbnMuam9pbignLScpfV8ke3Bvc2l0aW9uSW5pdGlhbFNlbGVjdGlvbj8ubWFwKHggPT4gYCR7eC5pZH06JHt4LmxhYmVsfWApLmpvaW4oJ3wnKSA/PyAnJ31gLFxuICAgIFtzZWxlY3RlZFBvc2l0aW9ucywgcG9zaXRpb25Jbml0aWFsU2VsZWN0aW9uXVxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0U2VhcmNoVXNlcj5cbiAgICAgIDxTZWFyY2ggLz5cbiAgICAgIHt3b3Jrc3BhY2VzRmVhdHVyZUVuYWJsZWQgJiYgKFxuICAgICAgICA8RmlsdGVyQ2hpcFxuICAgICAgICAgIGtleT17d29ya3NwYWNlRmlsdGVyQ2hpcEtleX1cbiAgICAgICAgICBpZD17UEVPUExFX0ZJTFRFUl9FVkVOVF9UWVBFUy5XT1JLU1BBQ0V9XG4gICAgICAgICAgbGFiZWw9e3QoJ2ZpbHRlcnMud29ya3NwYWNlJyl9XG4gICAgICAgICAgb3B0aW9ucz17d29ya3NwYWNlT3B0aW9uc1RvU2hvd31cbiAgICAgICAgICBlbXB0eU1lc3NhZ2U9e3QoJ3VzZXJzLmVtcHR5RmlsdGVyTWVzc2FnZScpfVxuICAgICAgICAgIGRpc3BhdGNoU2VhcmNoT25DbG9zZT17ZmFsc2V9XG4gICAgICAgICAgb25Mb2FkTW9yZT17aGFuZGxlV29ya3NwYWNlc0xvYWRNb3JlfVxuICAgICAgICAgIGhhc01vcmVQYWdlcz17Y2FuTG9hZE1vcmVXb3Jrc3BhY2VzfVxuICAgICAgICAgIGxvYWRNb3JlTG9hZGluZz17d29ya3NwYWNlc0xvYWRpbmcgJiYgd29ya3NwYWNlc0xpc3QubGVuZ3RoID4gMH1cbiAgICAgICAgICBvcHRpb25zTG9hZGluZz17d29ya3NwYWNlc0xvYWRpbmcgJiYgd29ya3NwYWNlc0xpc3QubGVuZ3RoID09PSAwfVxuICAgICAgICAgIGxvYWRpbmdNZXNzYWdlPXt0KCd1c2Vycy5sb2FkaW5nV29ya3NwYWNlcycpfVxuICAgICAgICAgIGluaXRpYWxSZXNvbHZlZFNlbGVjdGlvbj17d29ya3NwYWNlSW5pdGlhbFNlbGVjdGlvbn1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8RmlsdGVyQ2hpcFxuICAgICAgICBrZXk9e3RlYW1GaWx0ZXJDaGlwS2V5fVxuICAgICAgICBpZD17UEVPUExFX0ZJTFRFUl9FVkVOVF9UWVBFUy5URUFNfVxuICAgICAgICBsYWJlbD17dCgnZmlsdGVycy50ZWFtJyl9XG4gICAgICAgIG9wdGlvbnM9e3RlYW1PcHRpb25zfVxuICAgICAgICBlbXB0eU1lc3NhZ2U9e3QoJ3VzZXJzLmVtcHR5RmlsdGVyTWVzc2FnZScpfVxuICAgICAgICBzZWxlY3Rpb25SZXNldEtleT17dGVhbUZpbHRlclNlbGVjdGlvblJlc2V0S2V5fVxuICAgICAgICBvbk9wZW49e2hhbmRsZVRlYW1GaWx0ZXJPcGVufVxuICAgICAgICBvbkxvYWRNb3JlPXtoYW5kbGVUZWFtc0xvYWRNb3JlfVxuICAgICAgICBoYXNNb3JlUGFnZXM9e2NhbkxvYWRNb3JlVGVhbXN9XG4gICAgICAgIGxvYWRNb3JlTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgZGlzcGF0Y2hTZWFyY2hPbkNsb3NlPXtmYWxzZX1cbiAgICAgICAgaW5pdGlhbFJlc29sdmVkU2VsZWN0aW9uPXt0ZWFtSW5pdGlhbFNlbGVjdGlvbn1cbiAgICAgIC8+XG4gICAgICA8RmlsdGVyQ2hpcFxuICAgICAgICBrZXk9e3Bvc2l0aW9uRmlsdGVyQ2hpcEtleX1cbiAgICAgICAgaWQ9e1BFT1BMRV9GSUxURVJfRVZFTlRfVFlQRVMuUE9TSVRJT059XG4gICAgICAgIGxhYmVsPXt0KCdmaWx0ZXJzLnBvc2l0aW9uJyl9XG4gICAgICAgIG9wdGlvbnM9e3Bvc2l0aW9uT3B0aW9uc1RvU2hvd31cbiAgICAgICAgZW1wdHlNZXNzYWdlPXt0KCd1c2Vycy5lbXB0eUZpbHRlck1lc3NhZ2UnKX1cbiAgICAgICAgZGlzcGF0Y2hTZWFyY2hPbkNsb3NlXG4gICAgICAgIGluaXRpYWxSZXNvbHZlZFNlbGVjdGlvbj17cG9zaXRpb25Jbml0aWFsU2VsZWN0aW9ufVxuICAgICAgLz5cbiAgICA8L0xheW91dFNlYXJjaFVzZXI+XG4gIClcbn0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLElBQUksRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUMvRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxhQUFhLFFBQVEsNEJBQTRC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
|