@projectcor/maia-components 2.11.23-2 → 2.11.23-3

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.
Files changed (70) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +17 -60
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -23
  3. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  4. package/lib/components/atoms/icons/ChatConversation.js +40 -0
  5. package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
  6. package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
  7. package/lib/components/atoms/icons/index.js +4 -1
  8. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +24 -5
  9. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
  10. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +26 -61
  11. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +130 -0
  12. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +91 -0
  13. package/lib/components/molecules/ChatAIHome/styles.js +37 -43
  14. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
  15. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +58 -6
  16. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +43 -0
  17. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
  18. package/lib/components/molecules/ChatAIMessages/newStyles.js +24 -21
  19. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +184 -14
  20. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +20 -42
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -13
  22. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  23. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +328 -0
  24. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +178 -0
  25. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -3
  26. package/lib/components/molecules/Sidebar/Sidebar.js +331 -453
  27. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +112 -0
  28. package/lib/components/molecules/Sidebar/Sidebar.styles.js +60 -31
  29. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +70 -0
  30. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
  31. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +133 -0
  32. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
  33. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
  34. package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
  35. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +99 -52
  36. package/lib/dev/Providers.js +2 -2
  37. package/lib/dev/fixtures/devUser.js +173 -0
  38. package/lib/dev/fixtures/mockedUser.js +169 -0
  39. package/lib/hooks/index.js +4 -1
  40. package/lib/hooks/useAgentSuggestions.js +60 -0
  41. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  42. package/lib/hooks/useChatManager/useChatManager.js +185 -80
  43. package/lib/hooks/useChats/useChats.js +12 -4
  44. package/lib/hooks/useEvent.js +5 -2
  45. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  46. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +19 -7
  47. package/lib/lang/br/index.js +82 -23
  48. package/lib/lang/en/index.js +82 -23
  49. package/lib/lang/es/index.js +80 -21
  50. package/lib/lang/fr/index.js +66 -18
  51. package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
  52. package/lib/services/maia/Agents/getAgentById.js +9 -5
  53. package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
  54. package/lib/services/maia/Agents/getAgents.js +9 -10
  55. package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
  56. package/lib/services/maia/Chats/getChatsByUserId.js +13 -7
  57. package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
  58. package/lib/services/maia/Chats/index.js +5 -1
  59. package/lib/services/maia/Orchestrator/orchestrator.js +29 -22
  60. package/lib/services/maia/client.js +34 -1
  61. package/lib/services/utils/mapChatMessages.js +5 -14
  62. package/lib/store/chatsStore.types.js +10 -2
  63. package/lib/store/useChatsStore.js +81 -31
  64. package/lib/types/AgentSuggestion.js +2 -0
  65. package/lib/types/Chat.js +3 -1
  66. package/lib/types/agent.js +1 -1
  67. package/lib/types/agentModal.js +1 -1
  68. package/package.json +1 -1
  69. package/lib/mocks/mockChats.js +0 -395
  70. package/lib/mocks/mockedUser.js +0 -169
@@ -1,219 +1,94 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import _regeneratorRuntime from "@babel/runtime/regenerator";
5
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; }
6
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
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  /* eslint-disable no-param-reassign */
8
8
  /* eslint-disable @typescript-eslint/no-shadow */
9
9
  /* eslint-disable @typescript-eslint/no-explicit-any */
10
10
  /* eslint-disable no-nested-ternary */
11
11
  /* eslint-disable jsx-a11y/click-events-have-key-events */
12
12
  /* eslint-disable jsx-a11y/no-static-element-interactions */
13
- import { useEffect, useRef, useState } from 'react';
13
+ import { useEffect, useMemo, useRef, useState } from 'react';
14
+ import { AnimatePresence } from 'framer-motion';
14
15
  import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
15
- import { CUButton } from '@projectcor/button/lib/components/CUButton';
16
- import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
17
- import { Pencil } from '@projectcor/icons/lib/components/Pencil';
18
- import { Trash } from '@projectcor/icons/lib/components/Trash';
19
16
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
20
17
  import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
21
- import { useResizeListener } from '../../../hooks/useResize';
22
18
  import { useChats } from '../../../hooks/useChats';
23
19
  import { Loader } from '../../atoms/Loader';
24
- import { ErrorState, MAIAIcon, NewChat } from '../../atoms/icons';
25
- import { EVENTS } from '../../../hooks/useEvent';
20
+ import { ErrorState, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
21
+ import { EVENTS, useEvent } from '../../../hooks/useEvent';
26
22
  import { useT } from '../../../hooks/useT';
27
- import { OptionItem } from '../../atoms/CardMenu/CardMenu';
28
- import { EditQuestionModal } from '../../organisms/EditQuestionModal';
29
- import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
30
23
  import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
31
24
  import { useUser } from '../../../context/cor-user';
32
25
  import { OnboardingModalButton } from '../../atoms/OnboardingModalButton';
33
26
  import { FeedbackButton } from '../../atoms/FeedbackButton';
34
27
  import { useGlobalContext } from '../../../context/global-context';
35
- import { SCLHCWrapper, SCLHCWrapperAgent, SCLHCWrapperAgentText, SCLHCWrapperButtonActions, SCLHCWrapperContent, SCLHCWrapperTitle, SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
28
+ import { fetchMaia } from '../../../services/maia/client';
29
+ import { mapCORLang } from '../../../lang/utils';
30
+ import { SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
31
+ import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsHeading, SCSSidebarAgentsHeadingText, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
32
+ import { SCSSidebarSectionModalBackdropMotion } from './SidebarChats.styles';
33
+ import { SidebarChatsSection } from './SidebarChatsSection';
34
+ import { SidebarChatsSectionModal } from './SidebarChatsSectionModal';
35
+ import { buildSidebarSections, groupChatsBySidebarSection } from './sidebarChats.helpers';
36
+ import { SIDEBAR_SECTION_TRANSLATION_KEYS } from './sidebarChats.types';
37
+ import { getChatsStoreState } from '../../../store/useChatsStore';
38
+ import { SECTION_MODAL_SESSIONS_PAGE_LIMIT, SIDEBAR_SESSIONS_PAGE_LIMIT } from '../../../store/chatsStore.types';
36
39
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
37
- var actions = {
38
- edit: function edit(props) {
39
- return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
40
- },
41
- "delete": function _delete(props) {
42
- return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
43
- }
44
- };
45
-
46
- /** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
47
- function abbreviateSpecialistInAgentName(agentName) {
48
- if (!agentName || typeof agentName !== 'string') return agentName;
49
- return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
50
- }
51
- var ListHistoryChat = function ListHistoryChat(_ref) {
52
- var chat = _ref.chat,
53
- _onClick = _ref.onClick,
54
- isModalOpen = _ref.isModalOpen,
55
- onOpenModal = _ref.onOpenModal,
56
- onCloseModal = _ref.onCloseModal,
57
- handlers = _ref.handlers,
58
- isSelected = _ref.isSelected;
59
- var textRef = useRef(null);
60
- var agentRef = useRef(null);
61
- var _useResizeListener = useResizeListener(textRef, [chat.title]),
62
- showTooltip = _useResizeListener.showTooltip;
63
- var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
64
- showTooltipAgent = _useResizeListener2.showTooltip;
65
- var _useT = useT(),
66
- t = _useT.t;
67
- var _useState = useState(null),
68
- _useState2 = _slicedToArray(_useState, 2),
69
- action = _useState2[0],
70
- setAction = _useState2[1];
71
- var menuItems = [{
72
- label: t('history.menu.rename'),
73
- onClickItem: function onClickItem(chatId) {
74
- setAction('edit');
75
- onOpenModal(chatId);
76
- },
77
- Icon: Pencil,
78
- eventKey: EVENTS.pmAiMenuEdit
79
- }, {
80
- label: t('history.menu.delete'),
81
- onClickItem: function onClickItem(chatId) {
82
- setAction('delete');
83
- onOpenModal(chatId);
84
- },
85
- Icon: Trash,
86
- eventKey: EVENTS.pmAiMenuDelete
87
- }];
88
- var handleConfirmAction = function handleConfirmAction(chatData) {
89
- if (action === 'edit') {
90
- handlers.handleUpdateChat(chatData);
91
- } else {
92
- handlers.handleDeleteChat(chatData);
93
- }
94
- setAction(null);
95
- onCloseModal();
96
- };
97
- return /*#__PURE__*/_jsxs(_Fragment, {
98
- children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
99
- onClick: function onClick(e) {
100
- e.stopPropagation();
101
- _onClick(chat);
102
- },
103
- isModalOpen: isModalOpen,
104
- isSelected: isSelected,
105
- children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
106
- children: [/*#__PURE__*/_jsx(Tooltip, {
107
- title: showTooltip ? chat.title : '',
108
- children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
109
- ref: textRef,
110
- children: chat.title || t('conversations.emptyLabel')
111
- })
112
- }), /*#__PURE__*/_jsx(Tooltip, {
113
- title: showTooltipAgent ? chat.agent + (chat.projectName ? " - ".concat(chat.projectName) : '') : '',
114
- children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
115
- children: [chat.agentType === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
116
- width: 14,
117
- height: 14
118
- }) : /*#__PURE__*/_jsx("span", {
119
- style: {
120
- fontSize: '14px'
121
- },
122
- children: chat.emoji
123
- }), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
124
- ref: agentRef,
125
- children: [chat.agentType === 'clone' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
126
- })]
127
- })
128
- })]
129
- }), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
130
- children: [/*#__PURE__*/_jsx(CUButton, {
131
- iconOnly: true,
132
- size: "small",
133
- variant: "text",
134
- onClick: function onClick(event) {
135
- event.stopPropagation();
136
- onOpenModal(chat.id);
137
- },
138
- children: /*#__PURE__*/_jsx(MenuDots, {
139
- width: 20,
140
- height: 20
141
- })
142
- }), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
143
- "data-modal-container": true,
144
- style: {
145
- position: 'absolute',
146
- top: '32px',
147
- right: '16px',
148
- backgroundColor: 'white',
149
- zIndex: 1000,
150
- display: 'flex',
151
- flexDirection: 'column',
152
- borderRadius: '4px',
153
- border: '1px solid rgba(224, 224, 224, 1)',
154
- minWidth: '124px'
155
- },
156
- children: menuItems.map(function (_ref2) {
157
- var label = _ref2.label,
158
- onClickItem = _ref2.onClickItem,
159
- Icon = _ref2.Icon,
160
- eventKey = _ref2.eventKey;
161
- return /*#__PURE__*/_jsx(OptionItem, {
162
- label: label,
163
- onClick: function onClick() {
164
- return onClickItem(chat.id);
165
- },
166
- Icon: Icon,
167
- eventKey: eventKey
168
- }, label);
169
- })
170
- })]
171
- })]
172
- }, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
173
- onClose: function onClose() {
174
- onCloseModal();
175
- setAction(null);
176
- },
177
- chat: chat,
178
- handlers: {
179
- handleConfirmAction: handleConfirmAction,
180
- handleSetIsOpenModal: onCloseModal
181
- }
182
- })]
183
- });
184
- };
185
- export var Sidebar = function Sidebar(_ref3) {
40
+ export var Sidebar = function Sidebar(_ref) {
186
41
  var _user$permissions;
187
- var onGoToChat = _ref3.onGoToChat,
188
- _ref3$onError = _ref3.onError,
189
- onError = _ref3$onError === void 0 ? function () {
42
+ var onGoToChat = _ref.onGoToChat,
43
+ _ref$onError = _ref.onError,
44
+ onError = _ref$onError === void 0 ? function () {
190
45
  return null;
191
- } : _ref3$onError,
192
- handleGoToHome = _ref3.handleGoToHome,
193
- showNewChat = _ref3.showNewChat,
194
- refetchChats = _ref3.refetchChats,
195
- handleSetRefetchChats = _ref3.handleSetRefetchChats,
196
- hasError = _ref3.hasError,
197
- resetSelectedChatRef = _ref3.resetSelectedChatRef;
198
- var _useT2 = useT(),
199
- t = _useT2.t;
200
- var _useState3 = useState(true),
46
+ } : _ref$onError,
47
+ handleGoToHome = _ref.handleGoToHome,
48
+ handleOpenMarketplace = _ref.handleOpenMarketplace,
49
+ showNewChat = _ref.showNewChat,
50
+ refetchChats = _ref.refetchChats,
51
+ handleSetRefetchChats = _ref.handleSetRefetchChats,
52
+ hasError = _ref.hasError,
53
+ resetSelectedChatRef = _ref.resetSelectedChatRef,
54
+ _ref$agentsNavActive = _ref.agentsNavActive,
55
+ agentsNavActive = _ref$agentsNavActive === void 0 ? null : _ref$agentsNavActive;
56
+ var _useT = useT(),
57
+ t = _useT.t,
58
+ i18n = _useT.i18n;
59
+ var _useState = useState(true),
60
+ _useState2 = _slicedToArray(_useState, 2),
61
+ isOpen = _useState2[0],
62
+ setIsOpen = _useState2[1];
63
+ var _useState3 = useState(null),
201
64
  _useState4 = _slicedToArray(_useState3, 2),
202
- isOpen = _useState4[0],
203
- setIsOpen = _useState4[1];
65
+ chatMenuState = _useState4[0],
66
+ setChatMenuState = _useState4[1];
204
67
  var _useState5 = useState(null),
205
68
  _useState6 = _slicedToArray(_useState5, 2),
206
- isOpenModal = _useState6[0],
207
- setIsOpenModal = _useState6[1];
208
- var _useState7 = useState(null),
69
+ expandedSectionModalKey = _useState6[0],
70
+ setExpandedSectionModalKey = _useState6[1];
71
+ var _useState7 = useState({
72
+ clients: false,
73
+ projects: false,
74
+ agentsByCompany: false
75
+ }),
209
76
  _useState8 = _slicedToArray(_useState7, 2),
210
- selectedChat = _useState8[0],
211
- setSelectedChat = _useState8[1];
77
+ collapsedSections = _useState8[0],
78
+ setCollapsedSections = _useState8[1];
79
+ var _useState9 = useState(null),
80
+ _useState0 = _slicedToArray(_useState9, 2),
81
+ selectedChat = _useState0[0],
82
+ setSelectedChat = _useState0[1];
212
83
  var chatsFetchedRef = useRef(false);
213
- var chatsContainerRef = useRef(null);
84
+ var sidebarScrollRef = useRef(null);
214
85
  var user = useUser();
86
+ var eventAmplitude = useEvent();
215
87
  var _useGlobalContext = useGlobalContext(),
216
- selectedAgent = _useGlobalContext.agent;
88
+ selectedAgent = _useGlobalContext.agent,
89
+ selectAgent = _useGlobalContext.selectAgent,
90
+ setProject = _useGlobalContext.setProject,
91
+ setClient = _useGlobalContext.setClient;
217
92
  var _useChats = useChats({
218
93
  onError: onError
219
94
  }),
@@ -222,12 +97,29 @@ export var Sidebar = function Sidebar(_ref3) {
222
97
  deleteChat = _useChats.deleteChat,
223
98
  updateChat = _useChats.updateChat,
224
99
  fetchChats = _useChats.fetchChats,
225
- limit = _useChats.limit,
226
- offset = _useChats.offset,
227
100
  hasMoreChats = _useChats.hasMoreChats,
228
101
  loadMoreChats = _useChats.loadMoreChats,
229
- isLoadingMoreChats = _useChats.isLoadingMoreChats;
102
+ isLoadingMoreChats = _useChats.isLoadingMoreChats,
103
+ sessionsGroupHasMore = _useChats.sessionsGroupHasMore;
230
104
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
105
+ var canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
106
+ var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view);
107
+ var agentNavButtonCount = canCreateAgents ? 2 : canViewAgents ? 1 : 0;
108
+ var showAgentsNavBlock = canCreateAgents || canViewAgents;
109
+ var groupedChats = useMemo(function () {
110
+ return groupChatsBySidebarSection(chats);
111
+ }, [chats]);
112
+ var sidebarSections = useMemo(function () {
113
+ return buildSidebarSections(groupedChats, function (key) {
114
+ var _user$company;
115
+ return key === 'agentsByCompany' ? t(SIDEBAR_SECTION_TRANSLATION_KEYS[key], {
116
+ companyName: ((_user$company = user.company) === null || _user$company === void 0 ? void 0 : _user$company.trim()) || '—'
117
+ }) : t(SIDEBAR_SECTION_TRANSLATION_KEYS[key]);
118
+ }, sessionsGroupHasMore);
119
+ }, [groupedChats, t, user.company, sessionsGroupHasMore]);
120
+ var expandedSection = expandedSectionModalKey ? sidebarSections.find(function (section) {
121
+ return section.key === expandedSectionModalKey;
122
+ }) || null : null;
231
123
  useEffect(function () {
232
124
  if (resetSelectedChatRef) {
233
125
  resetSelectedChatRef.current = function () {
@@ -241,12 +133,12 @@ export var Sidebar = function Sidebar(_ref3) {
241
133
  };
242
134
  }, [resetSelectedChatRef]);
243
135
  var handleDeleteChat = /*#__PURE__*/function () {
244
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
136
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
245
137
  return _regeneratorRuntime.wrap(function (_context) {
246
138
  while (1) switch (_context.prev = _context.next) {
247
139
  case 0:
248
140
  deleteChat(chat.sessionExternalId);
249
- setIsOpenModal(null);
141
+ setChatMenuState(null);
250
142
  handleGoToHome();
251
143
  case 1:
252
144
  case "end":
@@ -255,106 +147,177 @@ export var Sidebar = function Sidebar(_ref3) {
255
147
  }, _callee);
256
148
  }));
257
149
  return function handleDeleteChat(_x) {
258
- return _ref4.apply(this, arguments);
150
+ return _ref2.apply(this, arguments);
259
151
  };
260
152
  }();
261
153
  var handleUpdateChat = function handleUpdateChat(chat) {
262
154
  updateChat(chat);
263
- setIsOpenModal(null);
155
+ setChatMenuState(null);
264
156
  };
265
- var handleOpenModal = function handleOpenModal(chatId) {
266
- if (isOpenModal && isOpenModal !== chatId) {
267
- setIsOpenModal(null);
268
- } else {
269
- setIsOpenModal(chatId);
270
- }
157
+ var handleOpenChatMenu = function handleOpenChatMenu(chatId, surface) {
158
+ setChatMenuState(function (prev) {
159
+ return (prev === null || prev === void 0 ? void 0 : prev.chatId) === chatId && (prev === null || prev === void 0 ? void 0 : prev.surface) === surface ? null : {
160
+ chatId: chatId,
161
+ surface: surface
162
+ };
163
+ });
164
+ };
165
+ var handleCloseChatMenu = function handleCloseChatMenu() {
166
+ setChatMenuState(null);
271
167
  };
272
- var handleCloseModal = function handleCloseModal() {
273
- setIsOpenModal(null);
168
+ var handleOpenSectionModal = /*#__PURE__*/function () {
169
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sectionKey) {
170
+ var _getChatsStoreState, storeLimit;
171
+ return _regeneratorRuntime.wrap(function (_context2) {
172
+ while (1) switch (_context2.prev = _context2.next) {
173
+ case 0:
174
+ setChatMenuState(null);
175
+ _getChatsStoreState = getChatsStoreState(), storeLimit = _getChatsStoreState.limit;
176
+ if (!(storeLimit === SIDEBAR_SESSIONS_PAGE_LIMIT)) {
177
+ _context2.next = 1;
178
+ break;
179
+ }
180
+ _context2.next = 1;
181
+ return fetchChats({
182
+ limit: SECTION_MODAL_SESSIONS_PAGE_LIMIT,
183
+ offset: 0,
184
+ showGlobalLoader: false
185
+ });
186
+ case 1:
187
+ setExpandedSectionModalKey(sectionKey);
188
+ case 2:
189
+ case "end":
190
+ return _context2.stop();
191
+ }
192
+ }, _callee2);
193
+ }));
194
+ return function handleOpenSectionModal(_x2) {
195
+ return _ref3.apply(this, arguments);
196
+ };
197
+ }();
198
+ var handleCloseSectionModal = function handleCloseSectionModal() {
199
+ setExpandedSectionModalKey(null);
200
+ setChatMenuState(null);
201
+ };
202
+ var handleToggleSectionCollapse = function handleToggleSectionCollapse(sectionKey) {
203
+ setCollapsedSections(function (prev) {
204
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, sectionKey, !prev[sectionKey]));
205
+ });
206
+ };
207
+ var handleSelectConversation = function handleSelectConversation(chatData) {
208
+ setSelectedChat(chatData.sessionExternalId);
209
+ onGoToChat(chatData);
274
210
  };
275
211
  useEffect(function () {
276
212
  var handleClickOutside = function handleClickOutside(event) {
277
- if (isOpenModal && !event.target.closest('[data-modal-container]')) {
278
- setIsOpenModal(null);
213
+ var target = event.target;
214
+ if (chatMenuState && !target.closest('[data-modal-container]')) {
215
+ setChatMenuState(null);
216
+ }
217
+ if (expandedSectionModalKey && !target.closest('[data-section-modal-container]')) {
218
+ setExpandedSectionModalKey(null);
219
+ setChatMenuState(null);
279
220
  }
280
221
  };
281
- if (isOpenModal) {
222
+ if (chatMenuState || expandedSectionModalKey) {
282
223
  document.addEventListener('mousedown', handleClickOutside);
283
224
  }
284
225
  return function () {
285
226
  document.removeEventListener('mousedown', handleClickOutside);
286
227
  };
287
- }, [isOpenModal]);
228
+ }, [chatMenuState, expandedSectionModalKey]);
288
229
  var handleToggleSidebar = function handleToggleSidebar() {
289
- if (isOpenModal) {
290
- setIsOpenModal(null);
230
+ if (chatMenuState) {
231
+ setChatMenuState(null);
232
+ }
233
+ if (expandedSectionModalKey) {
234
+ setExpandedSectionModalKey(null);
291
235
  }
292
236
  setIsOpen(function (prev) {
293
237
  return !prev;
294
238
  });
295
239
  };
240
+ var handleOpenCreateAgent = /*#__PURE__*/function () {
241
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
242
+ var response, data, maiakerAgent;
243
+ return _regeneratorRuntime.wrap(function (_context3) {
244
+ while (1) switch (_context3.prev = _context3.next) {
245
+ case 0:
246
+ _context3.next = 1;
247
+ return fetchMaia({
248
+ path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
249
+ method: 'GET'
250
+ });
251
+ case 1:
252
+ response = _context3.sent;
253
+ _context3.next = 2;
254
+ return response.json();
255
+ case 2:
256
+ data = _context3.sent;
257
+ maiakerAgent = (data.data || []).find(function (agent) {
258
+ return agent.type === 'clone' && agent.entity === 'global';
259
+ });
260
+ if (maiakerAgent) {
261
+ _context3.next = 3;
262
+ break;
263
+ }
264
+ return _context3.abrupt("return");
265
+ case 3:
266
+ setProject(null);
267
+ setClient === null || setClient === void 0 || setClient(null);
268
+ selectAgent(maiakerAgent);
269
+ handleGoToHome();
270
+ case 4:
271
+ case "end":
272
+ return _context3.stop();
273
+ }
274
+ }, _callee3);
275
+ }));
276
+ return function handleOpenCreateAgent() {
277
+ return _ref4.apply(this, arguments);
278
+ };
279
+ }();
296
280
  useEffect(function () {
297
281
  if (isOpen && !chatsFetchedRef.current) {
298
282
  chatsFetchedRef.current = true;
299
283
  fetchChats({
300
- limit: limit,
301
- offset: offset
284
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
285
+ offset: 0
302
286
  });
303
287
  return;
304
288
  }
305
289
  if (refetchChats) {
306
290
  fetchChats({
307
- limit: limit,
308
- offset: offset
291
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
292
+ offset: 0
309
293
  });
310
294
  handleSetRefetchChats(false);
311
295
  }
312
- }, [isOpen, refetchChats, handleSetRefetchChats]);
313
- useEffect(function () {
314
- var handleScroll = function handleScroll() {
315
- if (!chatsContainerRef.current || !hasMoreChats || isLoadingMoreChats || hasError) {
316
- return;
317
- }
318
- var _chatsContainerRef$cu = chatsContainerRef.current,
319
- scrollTop = _chatsContainerRef$cu.scrollTop,
320
- scrollHeight = _chatsContainerRef$cu.scrollHeight,
321
- clientHeight = _chatsContainerRef$cu.clientHeight;
322
- var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
323
- if (isAtBottom) {
324
- loadMoreChats();
325
- }
326
- };
327
- var container = chatsContainerRef.current;
328
- if (container) {
329
- container.addEventListener('scroll', handleScroll);
330
- }
331
- return function () {
332
- if (container) {
333
- container.removeEventListener('scroll', handleScroll);
334
- }
335
- };
336
- }, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
296
+ }, [isOpen, refetchChats, handleSetRefetchChats, fetchChats]);
297
+
298
+ /** El scroll infinito de sesiones vive solo en el modal de sección (`SidebarChatsSectionModal`). */
299
+
337
300
  var handleNewChat = /*#__PURE__*/function () {
338
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
339
- return _regeneratorRuntime.wrap(function (_context2) {
340
- while (1) switch (_context2.prev = _context2.next) {
301
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
302
+ return _regeneratorRuntime.wrap(function (_context4) {
303
+ while (1) switch (_context4.prev = _context4.next) {
341
304
  case 0:
342
- if (isOpenModal) {
343
- setIsOpenModal(null);
305
+ if (chatMenuState) {
306
+ setChatMenuState(null);
344
307
  }
345
308
  setSelectedChat(null);
346
- _context2.next = 1;
309
+ _context4.next = 1;
347
310
  return fetchChats({
348
- limit: limit,
311
+ limit: expandedSectionModalKey ? SECTION_MODAL_SESSIONS_PAGE_LIMIT : SIDEBAR_SESSIONS_PAGE_LIMIT,
349
312
  offset: 0
350
313
  });
351
314
  case 1:
352
315
  handleGoToHome();
353
316
  case 2:
354
317
  case "end":
355
- return _context2.stop();
318
+ return _context4.stop();
356
319
  }
357
- }, _callee2);
320
+ }, _callee4);
358
321
  }));
359
322
  return function handleNewChat() {
360
323
  return _ref5.apply(this, arguments);
@@ -363,7 +326,7 @@ export var Sidebar = function Sidebar(_ref3) {
363
326
  useEffect(function () {
364
327
  var handleRefetchSession = function handleRefetchSession() {
365
328
  fetchChats({
366
- limit: 20,
329
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
367
330
  offset: 0
368
331
  });
369
332
  };
@@ -371,247 +334,162 @@ export var Sidebar = function Sidebar(_ref3) {
371
334
  return function () {
372
335
  document.removeEventListener('refetch-session', handleRefetchSession);
373
336
  };
374
- }, []);
337
+ }, [fetchChats]);
375
338
  var showNewChatButton = !showNewChat && !hasError && !loadingChats && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access));
376
- return /*#__PURE__*/_jsxs("div", {
377
- style: _objectSpread({
378
- backgroundColor: '#f9f9f9',
379
- display: 'flex',
380
- flexDirection: 'column',
381
- padding: '12px 10px',
382
- minWidth: "".concat(isOpen ? '200px' : '46px'),
383
- maxWidth: '270px',
384
- transition: 'all 0.3s ease-in-out',
385
- borderRadius: 'inherit',
386
- borderTopRightRadius: '0',
387
- borderBottomRightRadius: '0',
388
- gap: '12px',
389
- overflow: 'hidden',
390
- overscrollBehavior: 'contain'
391
- }, !isOpen && {
392
- alignItems: 'center',
393
- justifyContent: 'space-between'
394
- }),
395
- children: [/*#__PURE__*/_jsxs("div", {
396
- style: _objectSpread({
397
- display: 'flex',
398
- gap: '22px',
399
- flexDirection: "".concat(isOpen ? 'row-reverse' : 'column')
400
- }, isOpen && {
401
- justifyContent: 'space-between'
402
- }),
339
+ return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
340
+ $isOpen: isOpen,
341
+ children: [/*#__PURE__*/_jsxs(SCSSidebarToolbar, {
342
+ $isOpen: isOpen,
403
343
  children: [/*#__PURE__*/_jsx(Tooltip, {
404
344
  title: isOpen ? t('conversations.collapse') : t('conversations.expand'),
405
345
  children: /*#__PURE__*/_jsx(SCSWrapperCollapsedButton, {
406
346
  onClick: handleToggleSidebar,
407
347
  isOpen: isOpen,
408
348
  children: /*#__PURE__*/_jsx(ChevronDoubleLeft, {
409
- color: "rgba(102, 102, 102, 1)",
410
- width: 20,
411
- height: 20
349
+ color: "#4D4D4D",
350
+ width: 16,
351
+ height: 16
412
352
  })
413
353
  })
414
- }), /*#__PURE__*/_jsx("div", {
415
- style: {
416
- display: 'flex',
417
- gap: "".concat(isOpen ? '16px' : '22px'),
418
- flexDirection: "".concat(isOpen ? 'row' : 'column')
419
- },
420
- children: showNewChatButton && /*#__PURE__*/_jsx(Tooltip, {
421
- title: t('conversations.newChat'),
422
- children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
423
- onClick: handleNewChat,
424
- children: /*#__PURE__*/_jsx(NewChat, {
425
- width: 20,
426
- height: 20
427
- })
354
+ }), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
355
+ title: t('conversations.newChat'),
356
+ children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
357
+ onClick: handleNewChat,
358
+ children: /*#__PURE__*/_jsx(NewChat, {
359
+ width: 16,
360
+ height: 16,
361
+ color: "#4D4D4D"
428
362
  })
429
363
  })
430
- })]
431
- }), /*#__PURE__*/_jsxs("div", {
432
- style: {
433
- display: 'flex',
434
- width: '100%',
435
- flexDirection: 'column',
436
- height: 'calc(100% - 32px)',
437
- justifyContent: "".concat(isOpen ? '' : 'flex-end')
438
- },
439
- children: [isOpen && /*#__PURE__*/_jsxs("div", {
440
- style: {
441
- padding: '8px 0 0 0',
442
- display: 'flex',
443
- flexDirection: 'column',
444
- gap: '4px',
445
- flexGrow: 1,
446
- minWidth: '244px'
447
- },
448
- children: [/*#__PURE__*/_jsx("span", {
449
- style: {
450
- fontSize: '14px',
451
- fontWeight: '400',
452
- color: '#666666',
453
- lineHeight: '140%',
454
- paddingLeft: '12px'
455
- },
456
- children: t('conversations.title')
457
- }), /*#__PURE__*/_jsx("div", {
458
- ref: chatsContainerRef,
459
- style: _objectSpread(_objectSpread({
460
- display: 'flex',
461
- flexDirection: 'column',
462
- gap: '4px',
463
- flexGrow: 1,
464
- width: '100%',
465
- overflowY: 'auto',
466
- overscrollBehaviorY: 'contain'
467
- }, chats.length && {
468
- maxHeight: "calc(100vh - ".concat(hasError ? 197 : 160, "px)")
469
- }), !chats.length && {
470
- alignItems: 'center'
471
- }),
472
- children: hasError && !chats.length ? /*#__PURE__*/_jsxs("div", {
473
- style: {
474
- display: 'flex',
475
- alignItems: 'center',
476
- justifyContent: 'center',
477
- flexGrow: 1,
478
- flexDirection: 'column'
479
- },
480
- children: [/*#__PURE__*/_jsx("div", {
481
- style: {
482
- display: 'flex',
483
- alignItems: 'center',
484
- flexGrow: 1
485
- },
486
- children: /*#__PURE__*/_jsx(ErrorState, {})
487
- }), /*#__PURE__*/_jsxs("div", {
488
- style: {
489
- display: 'flex',
490
- alignItems: 'center',
491
- gap: '16px',
492
- backgroundColor: 'rgba(253, 236, 236, 1)',
493
- borderRadius: '8px',
494
- padding: '12px',
495
- border: '1px solid rgba(199, 5, 5, 1)'
496
- },
497
- children: [/*#__PURE__*/_jsx("div", {
498
- style: {
499
- display: 'flex',
500
- alignItems: 'center',
501
- justifyContent: 'center'
364
+ }) : null]
365
+ }), /*#__PURE__*/_jsxs(SCSSidebarBody, {
366
+ $isOpen: isOpen,
367
+ children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
368
+ ref: sidebarScrollRef,
369
+ children: [/*#__PURE__*/_jsx(SCSSidebarAgentsBlock, {
370
+ children: showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
371
+ children: [/*#__PURE__*/_jsx(SCSSidebarAgentsHeading, {
372
+ children: /*#__PURE__*/_jsx(SCSSidebarAgentsHeadingText, {
373
+ children: t('conversations.agentsSectionTitle')
374
+ })
375
+ }), /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
376
+ children: [canCreateAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
377
+ type: "button",
378
+ onClick: function onClick() {
379
+ eventAmplitude(EVENTS.aiChatMpOpen);
380
+ handleOpenCreateAgent();
502
381
  },
382
+ $active: agentsNavActive === 'maiaker',
383
+ children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
384
+ size: 16
385
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
386
+ children: t('conversations.maiakerNav')
387
+ })]
388
+ }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
389
+ type: "button",
390
+ onClick: handleOpenMarketplace,
391
+ $active: agentsNavActive === 'myAgents',
392
+ children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
393
+ size: 16
394
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
395
+ children: t('conversations.myAgentsNav')
396
+ })]
397
+ }) : null]
398
+ })]
399
+ }) : null
400
+ }), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
401
+ $hasChats: chats.length > 0,
402
+ $offsetVariant: hasError ? 'error' : 'default',
403
+ $agentNavButtonCount: agentNavButtonCount,
404
+ children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
405
+ children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
406
+ children: /*#__PURE__*/_jsx(ErrorState, {})
407
+ }), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
408
+ children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
503
409
  children: /*#__PURE__*/_jsx(ErrorIcon, {})
504
- }), /*#__PURE__*/_jsx("span", {
505
- style: {
506
- fontSize: '14px',
507
- fontWeight: '400',
508
- color: 'rgba(32, 32, 31, 1)',
509
- lineHeight: '140%'
510
- },
410
+ }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
511
411
  children: t('conversations.error')
512
412
  })]
513
413
  })]
514
- }) : loadingChats ? /*#__PURE__*/_jsx("div", {
515
- style: {
516
- height: '670px'
517
- },
414
+ }) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
518
415
  children: /*#__PURE__*/_jsx(Loader, {})
519
416
  }) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
520
- children: [chats.map(function (chat) {
521
- return /*#__PURE__*/_jsx(ListHistoryChat, {
522
- chat: chat,
523
- onClick: function onClick(chatData) {
524
- if (isOpenModal) {
525
- setIsOpenModal(null);
526
- }
527
- setSelectedChat(chatData.sessionExternalId);
528
- onGoToChat(chatData);
417
+ children: [sidebarSections.map(function (section) {
418
+ return /*#__PURE__*/_jsx(SidebarChatsSection, {
419
+ section: section,
420
+ collapsed: collapsedSections[section.key],
421
+ onToggleCollapse: function onToggleCollapse() {
422
+ return handleToggleSectionCollapse(section.key);
529
423
  },
530
- isModalOpen: isOpenModal === chat.id,
531
- onOpenModal: handleOpenModal,
532
- onCloseModal: handleCloseModal,
533
- handlers: {
534
- handleDeleteChat: handleDeleteChat,
535
- handleUpdateChat: handleUpdateChat
424
+ onOpenMore: function onOpenMore() {
425
+ return handleOpenSectionModal(section.key);
536
426
  },
537
- isSelected: selectedChat === chat.sessionExternalId
538
- }, chat.id);
539
- }), isLoadingMoreChats && /*#__PURE__*/_jsx("div", {
540
- style: {
541
- display: 'flex',
542
- justifyContent: 'center',
543
- padding: '16px'
544
- },
427
+ chatMenuState: chatMenuState,
428
+ onOpenChatMenu: handleOpenChatMenu,
429
+ onCloseChatMenu: handleCloseChatMenu,
430
+ handleDeleteChat: handleDeleteChat,
431
+ handleUpdateChat: handleUpdateChat,
432
+ selectedChatSessionExternalId: selectedChat,
433
+ onGoToChat: handleSelectConversation
434
+ }, "chat-section-".concat(section.key));
435
+ }), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
545
436
  children: /*#__PURE__*/_jsx(Loader, {})
546
437
  })]
547
- }) : /*#__PURE__*/_jsxs("div", {
548
- style: {
549
- display: 'flex',
550
- alignItems: 'center',
551
- justifyContent: 'center',
552
- flexGrow: 1,
553
- flexDirection: 'column',
554
- gap: '18px',
555
- width: '201px'
556
- },
557
- children: [/*#__PURE__*/_jsx(EmptyHistoryIcon, {}), /*#__PURE__*/_jsx("span", {
558
- style: {
559
- fontSize: '14px',
560
- fontWeight: '400',
561
- color: 'rgba(102, 102, 102, 1)',
562
- lineHeight: '140%',
563
- textAlign: 'center'
564
- },
438
+ }) : /*#__PURE__*/_jsxs(SCSSidebarEmptyChats, {
439
+ children: [/*#__PURE__*/_jsx(EmptyHistoryIcon, {}), /*#__PURE__*/_jsx(SCSSidebarEmptyChatsText, {
565
440
  children: t('conversations.empty')
566
441
  })]
567
442
  })
568
- }), /*#__PURE__*/_jsx("div", {
569
- style: {
570
- display: 'flex',
571
- alignItems: 'center',
572
- justifyContent: 'center'
573
- },
574
- children: hasError && chats.length ? /*#__PURE__*/_jsxs("div", {
575
- style: {
576
- display: 'flex',
577
- alignItems: 'center',
578
- gap: '16px',
579
- backgroundColor: 'rgba(253, 236, 236, 1)',
580
- borderRadius: '8px',
581
- padding: '12px',
582
- border: '1px solid rgba(199, 5, 5, 1)'
583
- },
584
- children: [/*#__PURE__*/_jsx("div", {
585
- style: {
586
- display: 'flex',
587
- alignItems: 'center',
588
- justifyContent: 'center'
589
- },
443
+ }), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
444
+ children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
445
+ children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
590
446
  children: /*#__PURE__*/_jsx(ErrorIcon, {})
591
- }), /*#__PURE__*/_jsx("span", {
592
- style: {
593
- fontSize: '14px',
594
- fontWeight: '400',
595
- color: 'rgba(32, 32, 31, 1)',
596
- lineHeight: '140%'
597
- },
447
+ }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
598
448
  children: t('conversations.error')
599
449
  })]
600
450
  }) : null
601
451
  })]
602
- }), /*#__PURE__*/_jsxs("div", {
603
- style: {
604
- display: 'flex',
605
- gap: '8px',
606
- flexDirection: isOpen ? 'row' : 'column',
607
- justifyContent: selectedAgent ? 'space-between' : 'flex-end'
608
- },
609
- children: [selectedAgent && /*#__PURE__*/_jsx(FeedbackButton, {
452
+ }) : null, /*#__PURE__*/_jsxs(SCSSidebarFooterActions, {
453
+ $isOpen: isOpen,
454
+ $justifyBetween: !!selectedAgent,
455
+ children: [selectedAgent ? /*#__PURE__*/_jsx(FeedbackButton, {
610
456
  selectedAgent: selectedAgent,
611
457
  isOpen: isOpen
612
- }), /*#__PURE__*/_jsx(OnboardingModalButton, {})]
458
+ }) : null, /*#__PURE__*/_jsx(OnboardingModalButton, {})]
613
459
  })]
460
+ }), /*#__PURE__*/_jsx(AnimatePresence, {
461
+ children: expandedSectionModalKey && expandedSection ? /*#__PURE__*/_jsxs(_Fragment, {
462
+ children: [/*#__PURE__*/_jsx(SCSSidebarSectionModalBackdropMotion, {
463
+ "aria-hidden": true,
464
+ initial: {
465
+ opacity: 0
466
+ },
467
+ animate: {
468
+ opacity: 1
469
+ },
470
+ exit: {
471
+ opacity: 0
472
+ },
473
+ transition: {
474
+ duration: 0.2,
475
+ ease: 'easeOut'
476
+ }
477
+ }, "sidebar-section-chat-backdrop"), /*#__PURE__*/_jsx(SidebarChatsSectionModal, {
478
+ section: expandedSection,
479
+ onClose: handleCloseSectionModal,
480
+ chatMenuState: chatMenuState,
481
+ onOpenChatMenu: handleOpenChatMenu,
482
+ onCloseChatMenu: handleCloseChatMenu,
483
+ handleDeleteChat: handleDeleteChat,
484
+ handleUpdateChat: handleUpdateChat,
485
+ selectedChatSessionExternalId: selectedChat,
486
+ onGoToChat: handleSelectConversation,
487
+ hasMoreChats: hasMoreChats,
488
+ loadMoreChats: loadMoreChats,
489
+ isLoadingMoreChats: isLoadingMoreChats
490
+ }, expandedSectionModalKey)]
491
+ }) : null
614
492
  })]
615
493
  });
616
494
  };
617
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25Eb3VibGVMZWZ0IiwiQ1VCdXR0b24iLCJNZW51RG90cyIsIlBlbmNpbCIsIlRyYXNoIiwiVG9vbHRpcCIsIkVtcHR5SGlzdG9yeUljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsInVzZUNoYXRzIiwiTG9hZGVyIiwiRXJyb3JTdGF0ZSIsIk1BSUFJY29uIiwiTmV3Q2hhdCIsIkVWRU5UUyIsInVzZVQiLCJPcHRpb25JdGVtIiwiRWRpdFF1ZXN0aW9uTW9kYWwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiRXJyb3JJY29uIiwidXNlVXNlciIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIkZlZWRiYWNrQnV0dG9uIiwidXNlR2xvYmFsQ29udGV4dCIsIlNDTEhDV3JhcHBlciIsIlNDTEhDV3JhcHBlckFnZW50IiwiU0NMSENXcmFwcGVyQWdlbnRUZXh0IiwiU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucyIsIlNDTEhDV3JhcHBlckNvbnRlbnQiLCJTQ0xIQ1dyYXBwZXJUaXRsZSIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJhY3Rpb25zIiwiZWRpdCIsInByb3BzIiwiX29iamVjdFNwcmVhZCIsImRlbGV0ZSIsImFiYnJldmlhdGVTcGVjaWFsaXN0SW5BZ2VudE5hbWUiLCJhZ2VudE5hbWUiLCJyZXBsYWNlIiwiTGlzdEhpc3RvcnlDaGF0IiwiX3JlZiIsImNoYXQiLCJvbkNsaWNrIiwiaXNNb2RhbE9wZW4iLCJvbk9wZW5Nb2RhbCIsIm9uQ2xvc2VNb2RhbCIsImhhbmRsZXJzIiwiaXNTZWxlY3RlZCIsInRleHRSZWYiLCJhZ2VudFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInRpdGxlIiwic2hvd1Rvb2x0aXAiLCJfdXNlUmVzaXplTGlzdGVuZXIyIiwiYWdlbnQiLCJzaG93VG9vbHRpcEFnZW50IiwiX3VzZVQiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aW9uIiwic2V0QWN0aW9uIiwibWVudUl0ZW1zIiwibGFiZWwiLCJvbkNsaWNrSXRlbSIsImNoYXRJZCIsIkljb24iLCJldmVudEtleSIsInBtQWlNZW51RWRpdCIsInBtQWlNZW51RGVsZXRlIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImNoYXREYXRhIiwiaGFuZGxlVXBkYXRlQ2hhdCIsImhhbmRsZURlbGV0ZUNoYXQiLCJjaGlsZHJlbiIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJyZWYiLCJwcm9qZWN0TmFtZSIsImNvbmNhdCIsImFnZW50VHlwZSIsIndpZHRoIiwiaGVpZ2h0Iiwic3R5bGUiLCJmb250U2l6ZSIsImVtb2ppIiwiaWNvbk9ubHkiLCJzaXplIiwidmFyaWFudCIsImV2ZW50IiwiaWQiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYmFja2dyb3VuZENvbG9yIiwiekluZGV4IiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJib3JkZXJSYWRpdXMiLCJib3JkZXIiLCJtaW5XaWR0aCIsIm1hcCIsIl9yZWYyIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJvbkNsb3NlIiwiaGFuZGxlU2V0SXNPcGVuTW9kYWwiLCJTaWRlYmFyIiwiX3JlZjMiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uR29Ub0NoYXQiLCJfcmVmMyRvbkVycm9yIiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwic2hvd05ld0NoYXQiLCJyZWZldGNoQ2hhdHMiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJoYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwiX3VzZVQyIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0ZWRBZ2VudCIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwibGltaXQiLCJvZmZzZXQiLCJoYXNNb3JlQ2hhdHMiLCJsb2FkTW9yZUNoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjdXJyZW50IiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVPcGVuTW9kYWwiLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlU2Nyb2xsIiwiX2NoYXRzQ29udGFpbmVyUmVmJGN1Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNBdEJvdHRvbSIsImNvbnRhaW5lciIsImhhbmRsZU5ld0NoYXQiLCJfcmVmNSIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiaGFuZGxlUmVmZXRjaFNlc3Npb24iLCJzaG93TmV3Q2hhdEJ1dHRvbiIsInZpZXciLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicGFkZGluZyIsIm1heFdpZHRoIiwidHJhbnNpdGlvbiIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJnYXAiLCJvdmVyZmxvdyIsIm92ZXJzY3JvbGxCZWhhdmlvciIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImNvbG9yIiwiZmxleEdyb3ciLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsInBhZGRpbmdMZWZ0Iiwib3ZlcmZsb3dZIiwib3ZlcnNjcm9sbEJlaGF2aW9yWSIsImxlbmd0aCIsIm1heEhlaWdodCIsInRleHRBbGlnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9TaWRlYmFyL1NpZGViYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBNdXRhYmxlUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENoZXZyb25Eb3VibGVMZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvdWJsZUxlZnQnXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IE1lbnVEb3RzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTWVudURvdHMnXG5pbXBvcnQgeyBQZW5jaWwgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QZW5jaWwnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7IEVtcHR5SGlzdG9yeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FbXB0eUhpc3RvcnknXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBFcnJvclN0YXRlLCBNQUlBSWNvbiwgTmV3Q2hhdCB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgRVZFTlRTIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IE9wdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9hdG9tcy9DYXJkTWVudS9DYXJkTWVudSdcbmltcG9ydCB7IEVkaXRRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0VkaXRRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgRXJyb3JJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvRXJyb3JJY29uJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24nXG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL0ZlZWRiYWNrQnV0dG9uJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uLFxuICBTQ1NXcmFwcGVyTmV3Q2hhdEljb24sXG59IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5cbmNvbnN0IGFjdGlvbnMgPSB7XG4gIGVkaXQ6IChwcm9wczogYW55KSA9PiA8RWRpdFF1ZXN0aW9uTW9kYWwgey4uLnByb3BzfSAvPixcbiAgZGVsZXRlOiAocHJvcHM6IGFueSkgPT4gPERlbGV0ZVF1ZXN0aW9uTW9kYWwgey4uLnByb3BzfSAvPixcbn1cblxuLyoqIEFicmV2aWEgXCJlc3BlY2lhbGlzdGFcIi9cImVzcGVjaWFsaXN0XCIg4oaSIFwiRXNwLlwiIChFUy9QVCkgeSBcInNwZWNpYWxpc3RcIiDihpIgXCJTcGVjLlwiIChFTikgZW4gZWwgbm9tYnJlIGRlbCBhZ2VudGUuICovXG5mdW5jdGlvbiBhYmJyZXZpYXRlU3BlY2lhbGlzdEluQWdlbnROYW1lKGFnZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFhZ2VudE5hbWUgfHwgdHlwZW9mIGFnZW50TmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiBhZ2VudE5hbWVcbiAgcmV0dXJuIGFnZW50TmFtZS5yZXBsYWNlKC9cXGIoZXNwZWNpYWxpc3RhfGVzcGVjaWFsaXN0KVxcYi9naSwgJ0VzcC4nKS5yZXBsYWNlKC9cXGJzcGVjaWFsaXN0XFxiL2dpLCAnU3BlYy4nKVxufVxuXG5jb25zdCBMaXN0SGlzdG9yeUNoYXQgPSAoe1xuICBjaGF0LFxuICBvbkNsaWNrLFxuICBpc01vZGFsT3BlbixcbiAgb25PcGVuTW9kYWwsXG4gIG9uQ2xvc2VNb2RhbCxcbiAgaGFuZGxlcnMsXG4gIGlzU2VsZWN0ZWQsXG59OiB7XG4gIGNoYXQ6IGFueVxuICBvbkNsaWNrOiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIGlzTW9kYWxPcGVuOiBib29sZWFuXG4gIG9uT3Blbk1vZGFsOiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25DbG9zZU1vZGFsOiAoKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiB7XG4gICAgaGFuZGxlRGVsZXRlQ2hhdDogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICAgIGhhbmRsZVVwZGF0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgfVxuICBpc1NlbGVjdGVkOiBib29sZWFuXG59KSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGFnZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB7IHNob3dUb29sdGlwIH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmLCBbY2hhdC50aXRsZV0pXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXA6IHNob3dUb29sdGlwQWdlbnQgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKGFnZW50UmVmLCBbY2hhdC5hZ2VudF0pXG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IFthY3Rpb24sIHNldEFjdGlvbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG1lbnVJdGVtcyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogdCgnaGlzdG9yeS5tZW51LnJlbmFtZScpLFxuICAgICAgb25DbGlja0l0ZW06IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBzZXRBY3Rpb24oJ2VkaXQnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogUGVuY2lsLFxuICAgICAgZXZlbnRLZXk6IEVWRU5UUy5wbUFpTWVudUVkaXQsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogdCgnaGlzdG9yeS5tZW51LmRlbGV0ZScpLFxuICAgICAgb25DbGlja0l0ZW06IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBzZXRBY3Rpb24oJ2RlbGV0ZScpXG4gICAgICAgIG9uT3Blbk1vZGFsKGNoYXRJZClcbiAgICAgIH0sXG4gICAgICBJY29uOiBUcmFzaCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVEZWxldGUsXG4gICAgfSxcbiAgXVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSAoY2hhdERhdGE6IGFueSkgPT4ge1xuICAgIGlmIChhY3Rpb24gPT09ICdlZGl0Jykge1xuICAgICAgaGFuZGxlcnMuaGFuZGxlVXBkYXRlQ2hhdChjaGF0RGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlcnMuaGFuZGxlRGVsZXRlQ2hhdChjaGF0RGF0YSlcbiAgICB9XG4gICAgc2V0QWN0aW9uKG51bGwpXG4gICAgb25DbG9zZU1vZGFsKClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTQ0xIQ1dyYXBwZXJDb250ZW50XG4gICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkNsaWNrKGNoYXQpXG4gICAgICAgIH19XG4gICAgICAgIGtleT17YGNvbnZlcnNhdGlvbi0ke2NoYXQuc2Vzc2lvbkV4dGVybmFsSWR9YH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzTW9kYWxPcGVufVxuICAgICAgICBpc1NlbGVjdGVkPXtpc1NlbGVjdGVkfVxuICAgICAgPlxuICAgICAgICA8U0NMSENXcmFwcGVyPlxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtzaG93VG9vbHRpcCA/IGNoYXQudGl0bGUgOiAnJ30+XG4gICAgICAgICAgICA8U0NMSENXcmFwcGVyVGl0bGUgcmVmPXt0ZXh0UmVmfT57Y2hhdC50aXRsZSB8fCB0KCdjb252ZXJzYXRpb25zLmVtcHR5TGFiZWwnKX08L1NDTEhDV3JhcHBlclRpdGxlPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXBBZ2VudCA/IGNoYXQuYWdlbnQgKyAoY2hhdC5wcm9qZWN0TmFtZSA/IGAgLSAke2NoYXQucHJvamVjdE5hbWV9YCA6ICcnKSA6ICcnfT5cbiAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudD5cbiAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnID8gKFxuICAgICAgICAgICAgICAgIDxNQUlBSWNvbiB3aWR0aD17MTR9IGhlaWdodD17MTR9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JyB9fT57Y2hhdC5lbW9qaX08L3NwYW4+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPFNDTEhDV3JhcHBlckFnZW50VGV4dCByZWY9e2FnZW50UmVmfT5cbiAgICAgICAgICAgICAgICB7Y2hhdC5hZ2VudFR5cGUgPT09ICdjbG9uZScgPyBhYmJyZXZpYXRlU3BlY2lhbGlzdEluQWdlbnROYW1lKGNoYXQuYWdlbnQpIDogY2hhdC5hZ2VudH1cbiAgICAgICAgICAgICAgICB7Y2hhdC5wcm9qZWN0TmFtZSAmJiBgIC0gJHtjaGF0LnByb2plY3ROYW1lfWB9XG4gICAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnRUZXh0PlxuICAgICAgICAgICAgPC9TQ0xIQ1dyYXBwZXJBZ2VudD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvU0NMSENXcmFwcGVyPlxuICAgICAgICA8U0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgIGljb25Pbmx5XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICBvbk9wZW5Nb2RhbChjaGF0LmlkKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TWVudURvdHMgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAge2lzTW9kYWxPcGVuICYmICFhY3Rpb24gJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLW1vZGFsLWNvbnRhaW5lclxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHRvcDogJzMycHgnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnMTZweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgyMjQsIDIyNCwgMjI0LCAxKScsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcxMjRweCcsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZW51SXRlbXMubWFwKCh7IGxhYmVsLCBvbkNsaWNrSXRlbSwgSWNvbiwgZXZlbnRLZXkgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxPcHRpb25JdGVtXG4gICAgICAgICAgICAgICAgICBrZXk9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbGlja0l0ZW0oY2hhdC5pZCl9XG4gICAgICAgICAgICAgICAgICBJY29uPXtJY29ufVxuICAgICAgICAgICAgICAgICAgZXZlbnRLZXk9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0xIQ1dyYXBwZXJCdXR0b25BY3Rpb25zPlxuICAgICAgPC9TQ0xIQ1dyYXBwZXJDb250ZW50PlxuICAgICAgeyEhYWN0aW9uICYmXG4gICAgICAgIGFjdGlvbnNbYWN0aW9uXSh7XG4gICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgb25DbG9zZU1vZGFsKClcbiAgICAgICAgICAgIHNldEFjdGlvbihudWxsKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhdCxcbiAgICAgICAgICBoYW5kbGVyczoge1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbixcbiAgICAgICAgICAgIGhhbmRsZVNldElzT3Blbk1vZGFsOiBvbkNsb3NlTW9kYWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFNpZGViYXIgPSAoe1xuICBvbkdvVG9DaGF0LFxuICBvbkVycm9yID0gKCkgPT4gbnVsbCxcbiAgaGFuZGxlR29Ub0hvbWUsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc09wZW5Nb2RhbCwgc2V0SXNPcGVuTW9kYWxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkQ2hhdCwgc2V0U2VsZWN0ZWRDaGF0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNoYXRzRmV0Y2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgY2hhdHNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgbGltaXQsXG4gICAgb2Zmc2V0LFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbCA9IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCAmJiBpc09wZW5Nb2RhbCAhPT0gY2hhdElkKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChjaGF0SWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChpc09wZW5Nb2RhbCAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzT3Blbk1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgIWNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlZmV0Y2hDaGF0cykge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0LCBvZmZzZXQgfSlcbiAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc09wZW4sIHJlZmV0Y2hDaGF0cywgaGFuZGxlU2V0UmVmZXRjaENoYXRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghY2hhdHNDb250YWluZXJSZWYuY3VycmVudCB8fCAhaGFzTW9yZUNoYXRzIHx8IGlzTG9hZGluZ01vcmVDaGF0cyB8fCBoYXNFcnJvcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDEwXG5cbiAgICAgIGlmIChpc0F0Qm90dG9tKSB7XG4gICAgICAgIGxvYWRNb3JlQ2hhdHMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaGFzTW9yZUNoYXRzLCBpc0xvYWRpbmdNb3JlQ2hhdHMsIGxvYWRNb3JlQ2hhdHMsIGhhc0Vycm9yXSlcblxuICBjb25zdCBoYW5kbGVOZXdDaGF0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgYXdhaXQgZmV0Y2hDaGF0cyh7IGxpbWl0LCBvZmZzZXQ6IDAgfSlcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiAyMCwgb2Zmc2V0OiAwIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlZmV0Y2gtc2Vzc2lvbicsIGhhbmRsZVJlZmV0Y2hTZXNzaW9uKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0QnV0dG9uID1cbiAgICAhc2hvd05ld0NoYXQgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZ0NoYXRzICYmXG4gICAgKCh1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSB8fFxuICAgICAgKCF1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICBwYWRkaW5nOiAnMTJweCAxMHB4JyxcbiAgICAgICAgbWluV2lkdGg6IGAke2lzT3BlbiA/ICcyMDBweCcgOiAnNDZweCd9YCxcbiAgICAgICAgbWF4V2lkdGg6ICcyNzBweCcsXG4gICAgICAgIHRyYW5zaXRpb246ICdhbGwgMC4zcyBlYXNlLWluLW91dCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnLFxuICAgICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogJzAnLFxuICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBvdmVyc2Nyb2xsQmVoYXZpb3I6ICdjb250YWluJyxcbiAgICAgICAgLi4uKCFpc09wZW4gJiYgeyBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyB9KSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBnYXA6ICcyMnB4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBgJHtpc09wZW4gPyAncm93LXJldmVyc2UnIDogJ2NvbHVtbid9YCxcbiAgICAgICAgICAuLi4oaXNPcGVuICYmIHsganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyB9KSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cInJnYmEoMTAyLCAxMDIsIDEwMiwgMSlcIiB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogYCR7aXNPcGVuID8gJzE2cHgnIDogJzIycHgnfWAsIGZsZXhEaXJlY3Rpb246IGAke2lzT3BlbiA/ICdyb3cnIDogJ2NvbHVtbid9YCB9fVxuICAgICAgICA+XG4gICAgICAgICAge3Nob3dOZXdDaGF0QnV0dG9uICYmIChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm5ld0NoYXQnKX0+XG4gICAgICAgICAgICAgIDxTQ1NXcmFwcGVyTmV3Q2hhdEljb24gb25DbGljaz17aGFuZGxlTmV3Q2hhdH0+XG4gICAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIGhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogYCR7aXNPcGVuID8gJycgOiAnZmxleC1lbmQnfWAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICc4cHggMCAwIDAnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBnYXA6ICc0cHgnLFxuICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNDRweCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjY2NjYnLFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxNDAlJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzEycHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnY29udmVyc2F0aW9ucy50aXRsZScpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICByZWY9e2NoYXRzQ29udGFpbmVyUmVmfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICBnYXA6ICc0cHgnLFxuICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgb3ZlcnNjcm9sbEJlaGF2aW9yWTogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgICAgIC4uLihjaGF0cy5sZW5ndGggJiYgeyBtYXhIZWlnaHQ6IGBjYWxjKDEwMHZoIC0gJHtoYXNFcnJvciA/IDE5NyA6IDE2MH1weClgIH0pLFxuICAgICAgICAgICAgICAgIC4uLighY2hhdHMubGVuZ3RoICYmIHsgYWxpZ25JdGVtczogJ2NlbnRlcicgfSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiAhY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhHcm93OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjUzLCAyMzYsIDIzNiwgMSknLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDE5OSwgNSwgNSwgMSknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8RXJyb3JJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMzIsIDMyLCAzMSwgMSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogJzE0MCUnLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IGxvYWRpbmdDaGF0cyA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogJzY3MHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IGNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge2NoYXRzLm1hcChjaGF0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdEhpc3RvcnlDaGF0XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NoYXQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGF0PXtjaGF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2hhdERhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ2hhdChjaGF0RGF0YS5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Hb1RvQ2hhdChjaGF0RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01vZGFsT3Blbj17aXNPcGVuTW9kYWwgPT09IGNoYXQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk9wZW5Nb2RhbD17aGFuZGxlT3Blbk1vZGFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZU1vZGFsPXtoYW5kbGVDbG9zZU1vZGFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZENoYXQgPT09IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWR9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgcGFkZGluZzogJzE2cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICBnYXA6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMDFweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxFbXB0eUhpc3RvcnlJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDEwMiwgMTAyLCAxMDIsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAnMTQwJScsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZ2FwOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjUzLCAyMzYsIDIzNiwgMSknLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDE5OSwgNSwgNSwgMSknLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDMyLCAzMiwgMzEsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAnMTQwJScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IGlzT3BlbiA/ICdyb3cnIDogJ2NvbHVtbicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogc2VsZWN0ZWRBZ2VudCA/ICdzcGFjZS1iZXR3ZWVuJyA6ICdmbGV4LWVuZCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtzZWxlY3RlZEFnZW50ICYmIDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz59XG4gICAgICAgICAgPE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQTJCQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDckUsU0FBU0MsaUJBQWlCLFFBQVEsb0RBQW9EO0FBQ3RGLFNBQVNDLFFBQVEsUUFBUSw0Q0FBNEM7QUFDckUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFFOUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0RSxTQUFTQyxnQkFBZ0IsUUFBUSxnQ0FBZ0M7QUFDakUsU0FBU0MsaUJBQWlCLFFBQVEsMEJBQTBCO0FBQzVELFNBQVNDLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxVQUFVLEVBQUVDLFFBQVEsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUNqRSxTQUFTQyxNQUFNLFFBQVEseUJBQXlCO0FBQ2hELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsVUFBVSxRQUFRLCtCQUErQjtBQUMxRCxTQUFTQyxpQkFBaUIsUUFBUSxtQ0FBbUM7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEs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
495
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJBbmltYXRlUHJlc2VuY2UiLCJDaGV2cm9uRG91YmxlTGVmdCIsIlRvb2x0aXAiLCJFbXB0eUhpc3RvcnlJY29uIiwidXNlQ2hhdHMiLCJMb2FkZXIiLCJFcnJvclN0YXRlIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NTaWRlYmFyUm9vdCIsIlNDU1NpZGViYXJUb29sYmFyIiwiU0NTU2lkZWJhckJvZHkiLCJTQ1NTaWRlYmFyT3BlblBhbmVsIiwiU0NTU2lkZWJhckFnZW50c0Jsb2NrIiwiU0NTU2lkZWJhckFnZW50c0hlYWRpbmciLCJTQ1NTaWRlYmFyQWdlbnRzSGVhZGluZ1RleHQiLCJTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucyIsIlNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uIiwiU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCIsIlNDU1NpZGViYXJDaGF0c1Njcm9sbCIsIlNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uIiwiU0NTU2lkZWJhckVycm9yU3RhdGVUb3AiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXIiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCIsIlNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2UiLCJTQ1NTaWRlYmFyTG9hZGluZ0FyZWEiLCJTQ1NTaWRlYmFyTG9hZE1vcmVSb3ciLCJTQ1NTaWRlYmFyRW1wdHlDaGF0cyIsIlNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dCIsIlNDU1NpZGViYXJDaGF0c0Zvb3RlciIsIlNDU1NpZGViYXJGb290ZXJBY3Rpb25zIiwiU0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uIiwiU2lkZWJhckNoYXRzU2VjdGlvbiIsIlNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCIsImJ1aWxkU2lkZWJhclNlY3Rpb25zIiwiZ3JvdXBDaGF0c0J5U2lkZWJhclNlY3Rpb24iLCJTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZUyIsImdldENoYXRzU3RvcmVTdGF0ZSIsIlNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCIsIlNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlNpZGViYXIiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJvbkdvVG9DaGF0IiwiX3JlZiRvbkVycm9yIiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwic2hvd05ld0NoYXQiLCJyZWZldGNoQ2hhdHMiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJoYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwiX3JlZiRhZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNOYXZBY3RpdmUiLCJfdXNlVCIsInQiLCJpMThuIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjaGF0TWVudVN0YXRlIiwic2V0Q2hhdE1lbnVTdGF0ZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkiLCJzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleSIsIl91c2VTdGF0ZTciLCJjbGllbnRzIiwicHJvamVjdHMiLCJhZ2VudHNCeUNvbXBhbnkiLCJfdXNlU3RhdGU4IiwiY29sbGFwc2VkU2VjdGlvbnMiLCJzZXRDb2xsYXBzZWRTZWN0aW9ucyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRDaGF0Iiwic2V0U2VsZWN0ZWRDaGF0IiwiY2hhdHNGZXRjaGVkUmVmIiwic2lkZWJhclNjcm9sbFJlZiIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0ZWRBZ2VudCIsImFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwiX3VzZUNoYXRzIiwibG9hZGluZ0NoYXRzIiwiY2hhdHMiLCJkZWxldGVDaGF0IiwidXBkYXRlQ2hhdCIsImZldGNoQ2hhdHMiLCJoYXNNb3JlQ2hhdHMiLCJsb2FkTW9yZUNoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwic2Vzc2lvbnNHcm91cEhhc01vcmUiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50cyIsImNyZWF0ZSIsImNhblZpZXdBZ2VudHMiLCJ2aWV3IiwiYWdlbnROYXZCdXR0b25Db3VudCIsInNob3dBZ2VudHNOYXZCbG9jayIsImdyb3VwZWRDaGF0cyIsInNpZGViYXJTZWN0aW9ucyIsImtleSIsIl91c2VyJGNvbXBhbnkiLCJjb21wYW55TmFtZSIsImNvbXBhbnkiLCJ0cmltIiwiZXhwYW5kZWRTZWN0aW9uIiwiZmluZCIsInNlY3Rpb24iLCJjdXJyZW50IiwiaGFuZGxlRGVsZXRlQ2hhdCIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXBkYXRlQ2hhdCIsImhhbmRsZU9wZW5DaGF0TWVudSIsImNoYXRJZCIsInN1cmZhY2UiLCJoYW5kbGVDbG9zZUNoYXRNZW51IiwiaGFuZGxlT3BlblNlY3Rpb25Nb2RhbCIsIl9yZWYzIiwiX2NhbGxlZTIiLCJzZWN0aW9uS2V5IiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsInN0b3JlTGltaXQiLCJfY29udGV4dDIiLCJsaW1pdCIsIm9mZnNldCIsInNob3dHbG9iYWxMb2FkZXIiLCJfeDIiLCJoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbCIsImhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZSIsIl9vYmplY3RTcHJlYWQiLCJfZGVmaW5lUHJvcGVydHkiLCJoYW5kbGVTZWxlY3RDb252ZXJzYXRpb24iLCJjaGF0RGF0YSIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImV2ZW50IiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50IiwiX3JlZjQiLCJfY2FsbGVlMyIsInJlc3BvbnNlIiwiZGF0YSIsIm1haWFrZXJBZ2VudCIsIl9jb250ZXh0MyIsInBhdGgiLCJjb25jYXQiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwidHlwZSIsImVudGl0eSIsImFicnVwdCIsImhhbmRsZU5ld0NoYXQiLCJfcmVmNSIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiaGFuZGxlUmVmZXRjaFNlc3Npb24iLCJzaG93TmV3Q2hhdEJ1dHRvbiIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCIkaXNPcGVuIiwiY2hpbGRyZW4iLCJ0aXRsZSIsIm9uQ2xpY2siLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwicmVmIiwiYWlDaGF0TXBPcGVuIiwiJGFjdGl2ZSIsInNpemUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwibWFwIiwiY29sbGFwc2VkIiwib25Ub2dnbGVDb2xsYXBzZSIsIm9uT3Blbk1vcmUiLCJvbk9wZW5DaGF0TWVudSIsIm9uQ2xvc2VDaGF0TWVudSIsInNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkIiwiJGp1c3RpZnlCZXR3ZWVuIiwiaW5pdGlhbCIsIm9wYWNpdHkiLCJhbmltYXRlIiwiZXhpdCIsInRyYW5zaXRpb24iLCJkdXJhdGlvbiIsImVhc2UiLCJvbkNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlIH0gZnJvbSAnZnJhbWVyLW1vdGlvbidcbmltcG9ydCB7IENoZXZyb25Eb3VibGVMZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvdWJsZUxlZnQnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBFcnJvclN0YXRlLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRXJyb3JJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvRXJyb3JJY29uJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24nXG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL0ZlZWRiYWNrQnV0dG9uJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgU0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbiwgU0NTV3JhcHBlck5ld0NoYXRJY29uIH0gZnJvbSAnLi9TaWRlYmFyLnN0eWxlcydcbmltcG9ydCB7XG4gIFNDU1NpZGViYXJSb290LFxuICBTQ1NTaWRlYmFyVG9vbGJhcixcbiAgU0NTU2lkZWJhckJvZHksXG4gIFNDU1NpZGViYXJPcGVuUGFuZWwsXG4gIFNDU1NpZGViYXJBZ2VudHNCbG9jayxcbiAgU0NTU2lkZWJhckFnZW50c0hlYWRpbmcsXG4gIFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nVGV4dCxcbiAgU0NTU2lkZWJhckFnZW50c0FjdGlvbnMsXG4gIFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuaW1wb3J0IHsgU0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uIH0gZnJvbSAnLi9TaWRlYmFyQ2hhdHMuc3R5bGVzJ1xuaW1wb3J0IHsgU2lkZWJhckNoYXRzU2VjdGlvbiB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbidcbmltcG9ydCB7IFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2VjdGlvbnMsIGdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMuaGVscGVycydcbmltcG9ydCB0eXBlIHsgU2lkZWJhckNoYXRNZW51U3VyZmFjZSwgU2lkZWJhckNoYXRNZW51U3RhdGUsIFNpZGViYXJTZWN0aW9uS2V5IH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMudHlwZXMnXG5pbXBvcnQgeyBTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZUyB9IGZyb20gJy4vc2lkZWJhckNoYXRzLnR5cGVzJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCwgU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcblxuZXhwb3J0IGNvbnN0IFNpZGViYXIgPSAoe1xuICBvbkdvVG9DaGF0LFxuICBvbkVycm9yID0gKCkgPT4gbnVsbCxcbiAgaGFuZGxlR29Ub0hvbWUsXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSxcbiAgc2hvd05ld0NoYXQsXG4gIHJlZmV0Y2hDaGF0cyxcbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzLFxuICBoYXNFcnJvcixcbiAgcmVzZXRTZWxlY3RlZENoYXRSZWYsXG4gIGFnZW50c05hdkFjdGl2ZSA9IG51bGwsXG59OiB7XG4gIG9uR29Ub0NoYXQ6IChjaGF0SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIGhhbmRsZUdvVG9Ib21lOiAoKSA9PiB2b2lkXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbiAgLyoqIFJlc2FsdGEgTWFpYWtlciBvIE1pcyBhZ2VudGVzICovXG4gIGFnZW50c05hdkFjdGl2ZT86ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbY2hhdE1lbnVTdGF0ZSwgc2V0Q2hhdE1lbnVTdGF0ZV0gPSB1c2VTdGF0ZTxTaWRlYmFyQ2hhdE1lbnVTdGF0ZT4obnVsbClcbiAgY29uc3QgW2V4cGFuZGVkU2VjdGlvbk1vZGFsS2V5LCBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0gPSB1c2VTdGF0ZTxTaWRlYmFyU2VjdGlvbktleSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjb2xsYXBzZWRTZWN0aW9ucywgc2V0Q29sbGFwc2VkU2VjdGlvbnNdID0gdXNlU3RhdGU8UmVjb3JkPFNpZGViYXJTZWN0aW9uS2V5LCBib29sZWFuPj4oe1xuICAgIGNsaWVudHM6IGZhbHNlLFxuICAgIHByb2plY3RzOiBmYWxzZSxcbiAgICBhZ2VudHNCeUNvbXBhbnk6IGZhbHNlLFxuICB9KVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaWRlYmFyU2Nyb2xsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3Qge1xuICAgIGxvYWRpbmdDaGF0cyxcbiAgICBjaGF0cyxcbiAgICBkZWxldGVDaGF0LFxuICAgIHVwZGF0ZUNoYXQsXG4gICAgZmV0Y2hDaGF0cyxcbiAgICBoYXNNb3JlQ2hhdHMsXG4gICAgbG9hZE1vcmVDaGF0cyxcbiAgICBpc0xvYWRpbmdNb3JlQ2hhdHMsXG4gICAgc2Vzc2lvbnNHcm91cEhhc01vcmUsXG4gIH0gPSB1c2VDaGF0cyh7XG4gICAgb25FcnJvcixcbiAgfSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGVcbiAgY29uc3QgY2FuVmlld0FnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy52aWV3XG4gIGNvbnN0IGFnZW50TmF2QnV0dG9uQ291bnQgPSAoY2FuQ3JlYXRlQWdlbnRzID8gMiA6IGNhblZpZXdBZ2VudHMgPyAxIDogMCkgYXMgMCB8IDEgfCAyXG4gIGNvbnN0IHNob3dBZ2VudHNOYXZCbG9jayA9IGNhbkNyZWF0ZUFnZW50cyB8fCBjYW5WaWV3QWdlbnRzXG5cbiAgY29uc3QgZ3JvdXBlZENoYXRzID0gdXNlTWVtbygoKSA9PiBncm91cENoYXRzQnlTaWRlYmFyU2VjdGlvbihjaGF0cyksIFtjaGF0c10pXG5cbiAgY29uc3Qgc2lkZWJhclNlY3Rpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGRTaWRlYmFyU2VjdGlvbnMoXG4gICAgICAgIGdyb3VwZWRDaGF0cyxcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAga2V5ID09PSAnYWdlbnRzQnlDb21wYW55J1xuICAgICAgICAgICAgPyB0KFNJREVCQVJfU0VDVElPTl9UUkFOU0xBVElPTl9LRVlTW2tleV0sIHsgY29tcGFueU5hbWU6IHVzZXIuY29tcGFueT8udHJpbSgpIHx8ICfigJQnIH0pXG4gICAgICAgICAgICA6IHQoU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVNba2V5XSksXG4gICAgICAgIHNlc3Npb25zR3JvdXBIYXNNb3JlXG4gICAgICApLFxuICAgIFtncm91cGVkQ2hhdHMsIHQsIHVzZXIuY29tcGFueSwgc2Vzc2lvbnNHcm91cEhhc01vcmVdXG4gIClcblxuICBjb25zdCBleHBhbmRlZFNlY3Rpb24gPSBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleVxuICAgID8gc2lkZWJhclNlY3Rpb25zLmZpbmQoc2VjdGlvbiA9PiBzZWN0aW9uLmtleSA9PT0gZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHx8IG51bGxcbiAgICA6IG51bGxcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVVcGRhdGVDaGF0ID0gKGNoYXQ6IGFueSkgPT4ge1xuICAgIHVwZGF0ZUNoYXQoY2hhdClcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ2hhdE1lbnUgPSAoY2hhdElkOiBzdHJpbmcsIHN1cmZhY2U6IFNpZGViYXJDaGF0TWVudVN1cmZhY2UpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKHByZXYgPT4gKHByZXY/LmNoYXRJZCA9PT0gY2hhdElkICYmIHByZXY/LnN1cmZhY2UgPT09IHN1cmZhY2UgPyBudWxsIDogeyBjaGF0SWQsIHN1cmZhY2UgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZUNoYXRNZW51ID0gKCkgPT4ge1xuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwgPSBhc3luYyAoc2VjdGlvbktleTogU2lkZWJhclNlY3Rpb25LZXkpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgY29uc3QgeyBsaW1pdDogc3RvcmVMaW1pdCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICBpZiAoc3RvcmVMaW1pdCA9PT0gU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUKSB7XG4gICAgICBhd2FpdCBmZXRjaENoYXRzKHtcbiAgICAgICAgbGltaXQ6IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzaG93R2xvYmFsTG9hZGVyOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KHNlY3Rpb25LZXkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbCA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShudWxsKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZSA9IChzZWN0aW9uS2V5OiBTaWRlYmFyU2VjdGlvbktleSkgPT4ge1xuICAgIHNldENvbGxhcHNlZFNlY3Rpb25zKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbc2VjdGlvbktleV06ICFwcmV2W3NlY3Rpb25LZXldLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0Q29udmVyc2F0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgb25Hb1RvQ2hhdChjaGF0RGF0YSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICAgaWYgKGNoYXRNZW51U3RhdGUgJiYgIXRhcmdldC5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgICAgaWYgKGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5ICYmICF0YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2VjdGlvbi1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkobnVsbClcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGF0TWVudVN0YXRlIHx8IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtjaGF0TWVudVN0YXRlLCBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlU2lkZWJhciA9ICgpID0+IHtcbiAgICBpZiAoY2hhdE1lbnVTdGF0ZSkge1xuICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIH1cbiAgICBpZiAoZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHtcbiAgICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KG51bGwpXG4gICAgfVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICBjb25zdCBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhZ2VudDogYW55KSA9PiBhZ2VudC50eXBlID09PSAnY2xvbmUnICYmIGFnZW50LmVudGl0eSA9PT0gJ2dsb2JhbCcpXG5cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiAhY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULCBvZmZzZXQ6IDAgfSlcbiAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc09wZW4sIHJlZmV0Y2hDaGF0cywgaGFuZGxlU2V0UmVmZXRjaENoYXRzLCBmZXRjaENoYXRzXSlcblxuICAvKiogRWwgc2Nyb2xsIGluZmluaXRvIGRlIHNlc2lvbmVzIHZpdmUgc29sbyBlbiBlbCBtb2RhbCBkZSBzZWNjacOzbiAoYFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbGApLiAqL1xuXG4gIGNvbnN0IGhhbmRsZU5ld0NoYXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGNoYXRNZW51U3RhdGUpIHtcbiAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgYXdhaXQgZmV0Y2hDaGF0cyh7XG4gICAgICBsaW1pdDogZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgPyBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQgOiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfSlcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbZmV0Y2hDaGF0c10pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXRCdXR0b24gPVxuICAgICFzaG93TmV3Q2hhdCAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nQ2hhdHMgJiZcbiAgICAoKHVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpIHx8XG4gICAgICAoIXVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU1NpZGViYXJSb290ICRpc09wZW49e2lzT3Blbn0+XG4gICAgICA8U0NTU2lkZWJhclRvb2xiYXIgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cIiM0RDRENERcIiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIHtzaG93TmV3Q2hhdEJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5uZXdDaGF0Jyl9PlxuICAgICAgICAgICAgPFNDU1dyYXBwZXJOZXdDaGF0SWNvbiBvbkNsaWNrPXtoYW5kbGVOZXdDaGF0fT5cbiAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSBjb2xvcj1cIiM0RDRENERcIiAvPlxuICAgICAgICAgICAgPC9TQ1NXcmFwcGVyTmV3Q2hhdEljb24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NTU2lkZWJhclRvb2xiYXI+XG4gICAgICA8U0NTU2lkZWJhckJvZHkgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2lzT3BlbiA/IChcbiAgICAgICAgICA8U0NTU2lkZWJhck9wZW5QYW5lbCByZWY9e3NpZGViYXJTY3JvbGxSZWZ9PlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmFnZW50c1NlY3Rpb25UaXRsZScpfTwvU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0PlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50cyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0TXBPcGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhU3RvcmVJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubWFpYWtlck5hdicpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge2NhblZpZXdBZ2VudHMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TXlBZ2VudHNOYXZJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubXlBZ2VudHNOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJBZ2VudHNBY3Rpb25zPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaWRlYmFyU2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gKFxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGNoYXQtc2VjdGlvbi0ke3NlY3Rpb24ua2V5fWB9XG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbj17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ9e2NvbGxhcHNlZFNlY3Rpb25zW3NlY3Rpb24ua2V5XX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZ2dsZUNvbGxhcHNlPXsoKSA9PiBoYW5kbGVUb2dnbGVTZWN0aW9uQ29sbGFwc2Uoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uT3Blbk1vcmU9eygpID0+IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25PcGVuQ2hhdE1lbnU9e2hhbmRsZU9wZW5DaGF0TWVudX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlQ2hhdE1lbnU9e2hhbmRsZUNsb3NlQ2hhdE1lbnV9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVVcGRhdGVDaGF0PXtoYW5kbGVVcGRhdGVDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkPXtzZWxlY3RlZENoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRNb3JlUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICAgICA8RW1wdHlIaXN0b3J5SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD57dCgnY29udmVyc2F0aW9ucy5lbXB0eScpfTwvU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0PlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c1Njcm9sbD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ2hhdHNGb290ZXI+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPnt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9PC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgIDwvU0NTU2lkZWJhck9wZW5QYW5lbD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyAkaXNPcGVuPXtpc09wZW59ICRqdXN0aWZ5QmV0d2Vlbj17ISFzZWxlY3RlZEFnZW50fT5cbiAgICAgICAgICB7c2VsZWN0ZWRBZ2VudCA/IDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz4gOiBudWxsfVxuICAgICAgICAgIDxPbmJvYXJkaW5nTW9kYWxCdXR0b24gLz5cbiAgICAgICAgPC9TQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucz5cbiAgICAgIDwvU0NTU2lkZWJhckJvZHk+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICB7ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgJiYgZXhwYW5kZWRTZWN0aW9uID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uXG4gICAgICAgICAgICAgIGtleT1cInNpZGViYXItc2VjdGlvbi1jaGF0LWJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yLCBlYXNlOiAnZWFzZU91dCcgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsXG4gICAgICAgICAgICAgIGtleT17ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXl9XG4gICAgICAgICAgICAgIHNlY3Rpb249e2V4cGFuZGVkU2VjdGlvbn1cbiAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTZWN0aW9uTW9kYWx9XG4gICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgIG9uT3BlbkNoYXRNZW51PXtoYW5kbGVPcGVuQ2hhdE1lbnV9XG4gICAgICAgICAgICAgIG9uQ2xvc2VDaGF0TWVudT17aGFuZGxlQ2xvc2VDaGF0TWVudX1cbiAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdD17aGFuZGxlVXBkYXRlQ2hhdH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRDaGF0U2Vzc2lvbkV4dGVybmFsSWQ9e3NlbGVjdGVkQ2hhdH1cbiAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBoYXNNb3JlQ2hhdHM9e2hhc01vcmVDaGF0c31cbiAgICAgICAgICAgICAgbG9hZE1vcmVDaGF0cz17bG9hZE1vcmVDaGF0c31cbiAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZUNoYXRzPXtpc0xvYWRpbmdNb3JlQ2hhdHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzlFLFNBQVNDLGVBQWUsUUFBUSxlQUFlO0FBQy9DLFNBQVNDLGlCQUFpQixRQUFRLG9EQUFvRDtBQUV0RixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLGdDQUFnQztBQUNqRSxTQUFTQyxRQUFRLFFBQVEseUJBQXlCO0FBQ2xELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUN2RixTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxTQUFTLFFBQVEsNkJBQTZCO0FBQ3ZELFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSwrQkFBK0I7QUFDekQsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyx5QkFBeUIsRUFBRUMscUJBQXFCLFFBQVEsa0JBQWtCO0FBQ25GLFNBQ0VDLGNBQWMsRUFDZEMsaUJBQWlC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