@projectcor/maia-components 2.11.41 → 2.11.42-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +22 -11
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +184 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +432 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +225 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +282 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +148 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +160 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +79 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.js +47 -3
- package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +3 -3
- package/lib/components/atoms/MAIAInput/MAIAInput.js +246 -321
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +269 -0
- package/lib/components/atoms/MAIAInput/styles.js +75 -46
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
- package/lib/components/atoms/icons/index.js +2 -1
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +31 -3
- package/lib/components/molecules/ChatAIMessages/newStyles.js +5 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -6
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +68 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
- package/lib/constants/config.js +3 -1
- package/lib/constants/taskLinkIcon.js +6 -0
- package/lib/context/cor-user.js +1 -1
- package/lib/dev/DevContextMentionInput.js +65 -0
- package/lib/dev/Providers.js +11 -6
- package/lib/hooks/useCaretPosition.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +21 -11
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
- package/lib/hooks/useClientSearch.js +3 -2
- package/lib/hooks/useContextMentions.js +270 -0
- package/lib/hooks/useEntitySearch.js +1097 -0
- package/lib/hooks/useEvent.js +6 -1
- package/lib/hooks/useMentionAllowedTypes.js +103 -0
- package/lib/hooks/useMentionPopover.js +334 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/hooks/useProjectSearch.js +3 -2
- package/lib/hooks/useRecentClientsSearch.js +3 -2
- package/lib/hooks/useTaskPanel.js +3 -10
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
- package/lib/lang/br/index.js +24 -1
- package/lib/lang/en/index.js +24 -1
- package/lib/lang/es/index.js +24 -1
- package/lib/lang/fr/index.js +23 -1
- package/lib/services/maia/Chats/getChatMessages.js +29 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
- package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
- package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
- package/lib/services/maia/RecentTasks/index.js +6 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
- package/lib/services/maia/RecentUsers/index.js +6 -0
- package/lib/services/query/entitySearchQuery.js +18 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/utils/mapChatMessages.js +12 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/contextMention.js +37 -0
- package/lib/utils/contextMentionIcons.js +115 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
- package/lib/utils/openTaskInCorPanel.js +18 -0
- package/lib/utils/renderContextMentions.js +355 -0
- package/package.json +2 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
|
|
6
|
+
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
7
|
+
import { useContextMentions } from '../../../hooks/useContextMentions';
|
|
8
|
+
import { buildChipElement } from '../ContextMentionChip';
|
|
9
|
+
import { ContextMentionChipGlobalStyles } from '../ContextMentionChip/ContextMentionChip.styles';
|
|
10
|
+
import { SCMEEditable } from './ContextMentionEditor.styles';
|
|
11
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
|
|
13
|
+
var trimmed = placeholder.trim();
|
|
14
|
+
if (!trimmed) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
var clientWidth = editor.clientWidth;
|
|
18
|
+
if (clientWidth <= 4) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
var styles = window.getComputedStyle(editor);
|
|
22
|
+
var ctx = document.createElement('canvas').getContext('2d');
|
|
23
|
+
if (!ctx) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
|
|
27
|
+
var measured = ctx.measureText(trimmed).width;
|
|
28
|
+
var paddingLeft = parseFloat(styles.paddingLeft) || 0;
|
|
29
|
+
var paddingRight = parseFloat(styles.paddingRight) || 0;
|
|
30
|
+
var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
|
|
31
|
+
var borderRight = parseFloat(styles.borderRightWidth) || 0;
|
|
32
|
+
var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
|
|
33
|
+
return measured > available + 1;
|
|
34
|
+
};
|
|
35
|
+
export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
36
|
+
var _placeholder$trim2;
|
|
37
|
+
var placeholder = _ref.placeholder,
|
|
38
|
+
disabled = _ref.disabled,
|
|
39
|
+
className = _ref.className,
|
|
40
|
+
onInput = _ref.onInput,
|
|
41
|
+
onKeyDown = _ref.onKeyDown,
|
|
42
|
+
onFocus = _ref.onFocus,
|
|
43
|
+
onBlur = _ref.onBlur;
|
|
44
|
+
var _useContextMentions = useContextMentions(),
|
|
45
|
+
editorRef = _useContextMentions.editorRef,
|
|
46
|
+
updateTrigger = _useContextMentions.updateTrigger,
|
|
47
|
+
replaceTriggerWithChip = _useContextMentions.replaceTriggerWithChip,
|
|
48
|
+
syncTriggerAtRunLength = _useContextMentions.syncTriggerAtRunLength,
|
|
49
|
+
serialize = _useContextMentions.serialize,
|
|
50
|
+
clearEditorDom = _useContextMentions.clear,
|
|
51
|
+
focus = _useContextMentions.focus;
|
|
52
|
+
var skipNextInput = useRef(false);
|
|
53
|
+
var _useState = useState(false),
|
|
54
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
55
|
+
placeholderTruncated = _useState2[0],
|
|
56
|
+
setPlaceholderTruncated = _useState2[1];
|
|
57
|
+
var _useState3 = useState(true),
|
|
58
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
59
|
+
logicalEmpty = _useState4[0],
|
|
60
|
+
setLogicalEmpty = _useState4[1];
|
|
61
|
+
var syncEditorEmptyAttribute = useCallback(function (isEmpty) {
|
|
62
|
+
if (editorRef.current) {
|
|
63
|
+
editorRef.current.setAttribute('data-empty', String(isEmpty));
|
|
64
|
+
}
|
|
65
|
+
}, []);
|
|
66
|
+
var normalizeEmptyEditorDom = useCallback(function () {
|
|
67
|
+
var editor = editorRef.current;
|
|
68
|
+
if (!editor) return;
|
|
69
|
+
|
|
70
|
+
// Algunos browsers dejan <br> al vaciar un contenteditable; eso desplaza el caret a una "línea fantasma".
|
|
71
|
+
if (editor.innerHTML === '<br>') {
|
|
72
|
+
editor.innerHTML = '';
|
|
73
|
+
}
|
|
74
|
+
var selection = window.getSelection();
|
|
75
|
+
if (!selection) return;
|
|
76
|
+
var range = document.createRange();
|
|
77
|
+
range.selectNodeContents(editor);
|
|
78
|
+
range.collapse(true);
|
|
79
|
+
selection.removeAllRanges();
|
|
80
|
+
selection.addRange(range);
|
|
81
|
+
}, [editorRef]);
|
|
82
|
+
var recomputePlaceholderTruncation = useCallback(function () {
|
|
83
|
+
var _placeholder$trim;
|
|
84
|
+
var el = editorRef.current;
|
|
85
|
+
var ph = (_placeholder$trim = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim !== void 0 ? _placeholder$trim : '';
|
|
86
|
+
var isEditorLogicallyEmpty = serialize().text.trim() === '';
|
|
87
|
+
if (!el || !ph || !isEditorLogicallyEmpty) {
|
|
88
|
+
setPlaceholderTruncated(false);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
setPlaceholderTruncated(isPlaceholderTruncatedInEditor(el, ph));
|
|
92
|
+
}, [placeholder, serialize]);
|
|
93
|
+
useLayoutEffect(function () {
|
|
94
|
+
recomputePlaceholderTruncation();
|
|
95
|
+
var el = editorRef.current;
|
|
96
|
+
if (!el) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
var ro = new ResizeObserver(function () {
|
|
100
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
101
|
+
});
|
|
102
|
+
ro.observe(el);
|
|
103
|
+
return function () {
|
|
104
|
+
return ro.disconnect();
|
|
105
|
+
};
|
|
106
|
+
}, [placeholder, disabled, recomputePlaceholderTruncation]);
|
|
107
|
+
useImperativeHandle(ref, function () {
|
|
108
|
+
return {
|
|
109
|
+
focus: focus,
|
|
110
|
+
clear: function clear() {
|
|
111
|
+
clearEditorDom();
|
|
112
|
+
syncEditorEmptyAttribute(true);
|
|
113
|
+
setLogicalEmpty(true);
|
|
114
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
115
|
+
},
|
|
116
|
+
serialize: serialize,
|
|
117
|
+
syncTriggerAtRunLength: syncTriggerAtRunLength,
|
|
118
|
+
hasVisualMultiline: function hasVisualMultiline() {
|
|
119
|
+
var _editor$textContent$t, _editor$textContent;
|
|
120
|
+
var editor = editorRef.current;
|
|
121
|
+
if (!editor) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
var text = (_editor$textContent$t = (_editor$textContent = editor.textContent) === null || _editor$textContent === void 0 ? void 0 : _editor$textContent.trim()) !== null && _editor$textContent$t !== void 0 ? _editor$textContent$t : '';
|
|
125
|
+
if (!text) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
var styles = window.getComputedStyle(editor);
|
|
129
|
+
var lineHeight = parseFloat(styles.lineHeight) || 22;
|
|
130
|
+
var editorHeight = editor.getBoundingClientRect().height;
|
|
131
|
+
var isMultiline = editorHeight > lineHeight * 1.5;
|
|
132
|
+
return isMultiline;
|
|
133
|
+
},
|
|
134
|
+
getEditorClientRect: function getEditorClientRect() {
|
|
135
|
+
var _editorRef$current$ge, _editorRef$current;
|
|
136
|
+
return (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getBoundingClientRect()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
|
|
137
|
+
},
|
|
138
|
+
insertMention: function insertMention(mention) {
|
|
139
|
+
var chip = buildChipElement(mention);
|
|
140
|
+
replaceTriggerWithChip(chip, mention);
|
|
141
|
+
skipNextInput.current = true;
|
|
142
|
+
var state = serialize();
|
|
143
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
144
|
+
trigger: {
|
|
145
|
+
active: false,
|
|
146
|
+
query: '',
|
|
147
|
+
atRunLength: 0
|
|
148
|
+
}
|
|
149
|
+
}));
|
|
150
|
+
var isEmpty = state.text.trim() === '';
|
|
151
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
152
|
+
setLogicalEmpty(isEmpty);
|
|
153
|
+
queueMicrotask(function () {
|
|
154
|
+
// Si el navegador no dispara `input` tras el chip, el flag quedaba en true y el próximo @ del usuario se ignoraba.
|
|
155
|
+
skipNextInput.current = false;
|
|
156
|
+
recomputePlaceholderTruncation();
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}, [focus, clearEditorDom, serialize, syncTriggerAtRunLength, replaceTriggerWithChip, onInput, recomputePlaceholderTruncation, syncEditorEmptyAttribute]);
|
|
161
|
+
var handleInput = function handleInput() {
|
|
162
|
+
if (skipNextInput.current) {
|
|
163
|
+
skipNextInput.current = false;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
var trig = updateTrigger();
|
|
167
|
+
var state = serialize();
|
|
168
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
169
|
+
trigger: {
|
|
170
|
+
active: trig.active,
|
|
171
|
+
query: trig.query,
|
|
172
|
+
atRunLength: trig.atRunLength
|
|
173
|
+
}
|
|
174
|
+
}));
|
|
175
|
+
var isEmpty = state.text.trim() === '';
|
|
176
|
+
if (isEmpty) {
|
|
177
|
+
normalizeEmptyEditorDom();
|
|
178
|
+
}
|
|
179
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
180
|
+
setLogicalEmpty(isEmpty);
|
|
181
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
182
|
+
};
|
|
183
|
+
var handlePaste = function handlePaste(e) {
|
|
184
|
+
e.preventDefault();
|
|
185
|
+
var text = e.clipboardData.getData('text/plain');
|
|
186
|
+
var selection = window.getSelection();
|
|
187
|
+
if (!selection || selection.rangeCount === 0) return;
|
|
188
|
+
selection.deleteFromDocument();
|
|
189
|
+
selection.getRangeAt(0).insertNode(document.createTextNode(text));
|
|
190
|
+
selection.collapseToEnd();
|
|
191
|
+
handleInput();
|
|
192
|
+
};
|
|
193
|
+
var trimmedPlaceholder = (_placeholder$trim2 = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim2 !== void 0 ? _placeholder$trim2 : '';
|
|
194
|
+
var placeholderTooltipTitle = logicalEmpty && placeholderTruncated && trimmedPlaceholder ? trimmedPlaceholder : '';
|
|
195
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
196
|
+
children: [/*#__PURE__*/_jsx(ContextMentionChipGlobalStyles, {}), /*#__PURE__*/_jsx(Tooltip, {
|
|
197
|
+
title: placeholderTooltipTitle,
|
|
198
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
199
|
+
style: {
|
|
200
|
+
display: 'block',
|
|
201
|
+
width: '100%',
|
|
202
|
+
minWidth: 0
|
|
203
|
+
},
|
|
204
|
+
children: /*#__PURE__*/_jsx(SCMEEditable, {
|
|
205
|
+
ref: editorRef,
|
|
206
|
+
className: className,
|
|
207
|
+
"data-placeholder": placeholder,
|
|
208
|
+
"data-empty": String(logicalEmpty),
|
|
209
|
+
contentEditable: !disabled,
|
|
210
|
+
"data-disabled": String(!!disabled),
|
|
211
|
+
suppressContentEditableWarning: true,
|
|
212
|
+
role: "textbox",
|
|
213
|
+
"aria-multiline": "true",
|
|
214
|
+
onInput: handleInput,
|
|
215
|
+
onKeyDown: onKeyDown,
|
|
216
|
+
onPaste: handlePaste,
|
|
217
|
+
onFocus: onFocus,
|
|
218
|
+
onBlur: onBlur
|
|
219
|
+
})
|
|
220
|
+
})
|
|
221
|
+
})]
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
ContextMentionEditor.displayName = 'ContextMentionEditor';
|
|
225
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsIlNDTUVFZGl0YWJsZSIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsImVkaXRvciIsInBsYWNlaG9sZGVyIiwidHJpbW1lZCIsInRyaW0iLCJjbGllbnRXaWR0aCIsInN0eWxlcyIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdHgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0IiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJtZWFzdXJlZCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYXZhaWxhYmxlIiwiTWF0aCIsIm1heCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiX3JlZiIsInJlZiIsIl9wbGFjZWhvbGRlciR0cmltMiIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJfdXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwidXBkYXRlVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwic2VyaWFsaXplIiwiY2xlYXJFZGl0b3JEb20iLCJjbGVhciIsImZvY3VzIiwic2tpcE5leHRJbnB1dCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInBsYWNlaG9sZGVyVHJ1bmNhdGVkIiwic2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvZ2ljYWxFbXB0eSIsInNldExvZ2ljYWxFbXB0eSIsInN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSIsImlzRW1wdHkiLCJjdXJyZW50Iiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwibm9ybWFsaXplRW1wdHlFZGl0b3JEb20iLCJpbm5lckhUTUwiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZUNvbnRlbnRzIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiIsIl9wbGFjZWhvbGRlciR0cmltIiwiZWwiLCJwaCIsImlzRWRpdG9yTG9naWNhbGx5RW1wdHkiLCJ0ZXh0IiwidW5kZWZpbmVkIiwicm8iLCJSZXNpemVPYnNlcnZlciIsInF1ZXVlTWljcm90YXNrIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYXNWaXN1YWxNdWx0aWxpbmUiLCJfZWRpdG9yJHRleHRDb250ZW50JHQiLCJfZWRpdG9yJHRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJsaW5lSGVpZ2h0IiwiZWRpdG9ySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGVpZ2h0IiwiaXNNdWx0aWxpbmUiLCJnZXRFZGl0b3JDbGllbnRSZWN0IiwiX2VkaXRvclJlZiRjdXJyZW50JGdlIiwiX2VkaXRvclJlZiRjdXJyZW50IiwiaW5zZXJ0TWVudGlvbiIsIm1lbnRpb24iLCJjaGlwIiwic3RhdGUiLCJfb2JqZWN0U3ByZWFkIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJoYW5kbGVJbnB1dCIsInRyaWciLCJoYW5kbGVQYXN0ZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwicmFuZ2VDb3VudCIsImRlbGV0ZUZyb21Eb2N1bWVudCIsImdldFJhbmdlQXQiLCJpbnNlcnROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjb2xsYXBzZVRvRW5kIiwidHJpbW1lZFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJUb29sdGlwVGl0bGUiLCJjaGlsZHJlbiIsInRpdGxlIiwic3R5bGUiLCJkaXNwbGF5IiwibWluV2lkdGgiLCJjb250ZW50RWRpdGFibGUiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJyb2xlIiwib25QYXN0ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsaXBib2FyZEV2ZW50LFxuICBmb3J3YXJkUmVmLFxuICBLZXlib2FyZEV2ZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZUNvbnRleHRNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBidWlsZENoaXBFbGVtZW50IH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25DaGlwR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTQ01FRWRpdGFibGUgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yLnN0eWxlcydcblxuY29uc3QgaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yID0gKGVkaXRvcjogSFRNTEVsZW1lbnQsIHBsYWNlaG9sZGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IHBsYWNlaG9sZGVyLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCB7IGNsaWVudFdpZHRoIH0gPSBlZGl0b3JcbiAgaWYgKGNsaWVudFdpZHRoIDw9IDQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKVxuICBpZiAoIWN0eCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGN0eC5mb250ID0gYCR7c3R5bGVzLmZvbnRXZWlnaHR9ICR7c3R5bGVzLmZvbnRTaXplfSAke3N0eWxlcy5mb250RmFtaWx5fWBcbiAgY29uc3QgbWVhc3VyZWQgPSBjdHgubWVhc3VyZVRleHQodHJpbW1lZCkud2lkdGhcblxuICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdMZWZ0KSB8fCAwXG4gIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCkgfHwgMFxuICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKSB8fCAwXG4gIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMFxuICBjb25zdCBhdmFpbGFibGUgPSBNYXRoLm1heCgwLCBjbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0IC0gYm9yZGVyTGVmdCAtIGJvcmRlclJpZ2h0KVxuXG4gIHJldHVybiBtZWFzdXJlZCA+IGF2YWlsYWJsZSArIDFcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgPSB7XG4gIGZvY3VzOiAoKSA9PiB2b2lkXG4gIGNsZWFyOiAoKSA9PiB2b2lkXG4gIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxuICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoOiAoYXRSdW5MZW5ndGg6IG51bWJlcikgPT4gdm9pZFxuICBzZXJpYWxpemU6ICgpID0+IHsgdGV4dDogc3RyaW5nOyBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXSB9XG4gIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gYm9vbGVhblxuICAvKiogUmVjdCBkZWwgw6FyZWEgZWRpdGFibGUgKHZpZXdwb3J0KTsgbG8gdXNhIGVsIHBvcG92ZXIgZGUgQCBwYXJhIGFsaW5lYXIgYW5jaG8vb3JpZ2VuLiAqL1xuICBnZXRFZGl0b3JDbGllbnRSZWN0OiAoKSA9PiBET01SZWN0IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzID0ge1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgfSkgPT4gdm9pZFxuICBvbktleURvd24/OiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgb25CbHVyPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ29udGV4dE1lbnRpb25FZGl0b3IgPSBmb3J3YXJkUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlLCBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzPihcbiAgKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBjbGFzc05hbWUsIG9uSW5wdXQsIG9uS2V5RG93biwgb25Gb2N1cywgb25CbHVyIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVkaXRvclJlZixcbiAgICAgIHVwZGF0ZVRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhDaGlwLFxuICAgICAgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCxcbiAgICAgIHNlcmlhbGl6ZSxcbiAgICAgIGNsZWFyOiBjbGVhckVkaXRvckRvbSxcbiAgICAgIGZvY3VzLFxuICAgIH0gPSB1c2VDb250ZXh0TWVudGlvbnMoKVxuICAgIGNvbnN0IHNraXBOZXh0SW5wdXQgPSB1c2VSZWYoZmFsc2UpXG4gICAgY29uc3QgW3BsYWNlaG9sZGVyVHJ1bmNhdGVkLCBzZXRQbGFjZWhvbGRlclRydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBbbG9naWNhbEVtcHR5LCBzZXRMb2dpY2FsRW1wdHldID0gdXNlU3RhdGUodHJ1ZSlcblxuICAgIGNvbnN0IHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSA9IHVzZUNhbGxiYWNrKChpc0VtcHR5OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgU3RyaW5nKGlzRW1wdHkpKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgY29uc3Qgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlZGl0b3IpIHJldHVyblxuXG4gICAgICAvLyBBbGd1bm9zIGJyb3dzZXJzIGRlamFuIDxicj4gYWwgdmFjaWFyIHVuIGNvbnRlbnRlZGl0YWJsZTsgZXNvIGRlc3BsYXphIGVsIGNhcmV0IGEgdW5hIFwibMOtbmVhIGZhbnRhc21hXCIuXG4gICAgICBpZiAoZWRpdG9yLmlubmVySFRNTCA9PT0gJzxicj4nKSB7XG4gICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnJ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm5cbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICB9LCBbZWRpdG9yUmVmXSlcblxuICAgIGNvbnN0IHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHBoID0gcGxhY2Vob2xkZXI/LnRyaW0oKSA/PyAnJ1xuICAgICAgY29uc3QgaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSA9IHNlcmlhbGl6ZSgpLnRleHQudHJpbSgpID09PSAnJ1xuXG4gICAgICBpZiAoIWVsIHx8ICFwaCB8fCAhaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSkge1xuICAgICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldFBsYWNlaG9sZGVyVHJ1bmNhdGVkKGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvcihlbCwgcGgpKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgc2VyaWFsaXplXSlcblxuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgY29uc3QgZWwgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgIH0pXG4gICAgICByby5vYnNlcnZlKGVsKVxuICAgICAgcmV0dXJuICgpID0+IHJvLmRpc2Nvbm5lY3QoKVxuICAgIH0sIFtwbGFjZWhvbGRlciwgZGlzYWJsZWQsIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbl0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKFxuICAgICAgcmVmLFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJFZGl0b3JEb20oKVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSh0cnVlKVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eSh0cnVlKVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHsgLi4uc3RhdGUsIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9IH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNpIGVsIG5hdmVnYWRvciBubyBkaXNwYXJhIGBpbnB1dGAgdHJhcyBlbCBjaGlwLCBlbCBmbGFnIHF1ZWRhYmEgZW4gdHJ1ZSB5IGVsIHByw7N4aW1vIEAgZGVsIHVzdWFyaW8gc2UgaWdub3JhYmEuXG4gICAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKClcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBbXG4gICAgICAgIGZvY3VzLFxuICAgICAgICBjbGVhckVkaXRvckRvbSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgIF1cbiAgICApXG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dCA9ICgpID0+IHtcbiAgICAgIGlmIChza2lwTmV4dElucHV0LmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCB0cmlnID0gdXBkYXRlVHJpZ2dlcigpXG4gICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICBvbklucHV0Py4oeyAuLi5zdGF0ZSwgdHJpZ2dlcjogeyBhY3RpdmU6IHRyaWcuYWN0aXZlLCBxdWVyeTogdHJpZy5xdWVyeSwgYXRSdW5MZW5ndGg6IHRyaWcuYXRSdW5MZW5ndGggfSB9KVxuICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20oKVxuICAgICAgfVxuICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVQYXN0ZSA9IChlOiBDbGlwYm9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgZGF0YS1lbXB0eT17U3RyaW5nKGxvZ2ljYWxFbXB0eSl9XG4gICAgICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17IWRpc2FibGVkfVxuICAgICAgICAgICAgICBkYXRhLWRpc2FibGVkPXtTdHJpbmcoISFkaXNhYmxlZCl9XG4gICAgICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1xuICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgIGFyaWEtbXVsdGlsaW5lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUlucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICAgICAgb25QYXN0ZT17aGFuZGxlUGFzdGV9XG4gICAgICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5Db250ZXh0TWVudGlvbkVkaXRvci5kaXNwbGF5TmFtZSA9ICdDb250ZXh0TWVudGlvbkVkaXRvcidcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBRUVBLFVBQVUsRUFFVkMsV0FBVyxFQUNYQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsTUFBTSxFQUNOQyxRQUFRLFFBQ0gsT0FBTztBQUNkLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QjtBQUN4RCxTQUFTQyw4QkFBOEIsUUFBUSxpREFBaUQ7QUFDaEcsU0FBU0MsWUFBWSxRQUFRLCtCQUErQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBRTVELElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUlDLE1BQW1CLEVBQUVDLFdBQW1CLEVBQWM7RUFDNUYsSUFBTUMsT0FBTyxHQUFHRCxXQUFXLENBQUNFLElBQUksQ0FBQyxDQUFDO0VBQ2xDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBTyxLQUFLO0VBQ2Q7RUFDQSxJQUFRRSxXQUFXLEdBQUtKLE1BQU0sQ0FBdEJJLFdBQVc7RUFDbkIsSUFBSUEsV0FBVyxJQUFJLENBQUMsRUFBRTtJQUNwQixPQUFPLEtBQUs7RUFDZDtFQUVBLElBQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQ1AsTUFBTSxDQUFDO0VBQzlDLElBQU1RLEdBQUcsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUNDLFVBQVUsQ0FBQyxJQUFJLENBQUM7RUFDN0QsSUFBSSxDQUFDSCxHQUFHLEVBQUU7SUFDUixPQUFPLEtBQUs7RUFDZDtFQUNBQSxHQUFHLENBQUNJLElBQUksTUFBQUMsTUFBQSxDQUFNUixNQUFNLENBQUNTLFVBQVUs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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
export var SCMEEditable = styled.div.withConfig({
|
|
3
|
+
displayName: "ContextMentionEditorstyles__SCMEEditable",
|
|
4
|
+
componentId: "sc-vz0osf-0"
|
|
5
|
+
})(["box-sizing:border-box;min-width:0;width:100%;min-height:24px;max-height:200px;overflow-y:auto;color:var(--Text-Primary-Dark,#20201f);font-family:var(--cor-typography-font-family,'Work Sans');font-size:14px;font-style:normal;font-weight:400;line-height:22px;letter-spacing:0;outline:none;word-break:break-word;&[data-empty='true']{overflow-x:hidden;}&[data-empty='true']::before{content:attr(data-placeholder);display:block;max-width:100%;color:var(--Text-Secondary-Dark,#666);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}&[data-disabled='true']{opacity:0.5;pointer-events:none;}&::-webkit-scrollbar{width:6px;}&::-webkit-scrollbar-thumb{background:#d0d0d0;border-radius:3px;}"]);
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJTQ01FRWRpdGFibGUiLCJkaXYiLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL0NvbnRleHRNZW50aW9uRWRpdG9yLnN0eWxlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cydcblxuZXhwb3J0IGNvbnN0IFNDTUVFZGl0YWJsZSA9IHN0eWxlZC5kaXZgXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDI0cHg7XG4gIG1heC1oZWlnaHQ6IDIwMHB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBjb2xvcjogdmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMWYpO1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgb3V0bGluZTogbm9uZTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcblxuICAmW2RhdGEtZW1wdHk9J3RydWUnXSB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB9XG5cbiAgJltkYXRhLWVtcHR5PSd0cnVlJ106OmJlZm9yZSB7XG4gICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgY29sb3I6IHZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgfVxuXG4gICZbZGF0YS1kaXNhYmxlZD0ndHJ1ZSddIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDZweDtcbiAgfVxuICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogI2QwZDBkMDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIH1cbmBcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLG1CQUFtQjtBQUV0QyxPQUFPLElBQU1DLFlBQVksR0FBR0QsTUFBTSxDQUFDRSxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsNnNCQTRDckMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { ContextMentionEditor } from './ContextMentionEditor';
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250ZXh0TWVudGlvbkVkaXRvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmV4cG9ydCB0eXBlIHsgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUsIENvbnRleHRNZW50aW9uRWRpdG9yUHJvcHMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxvQkFBb0IsUUFBUSx3QkFBd0IiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import { useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import { ChevronRight } from '@projectcor/icons/lib/components/ChevronRight';
|
|
4
|
+
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
5
|
+
import { useT } from '../../../hooks/useT';
|
|
6
|
+
import { TASK_LINK_ICON_DATA_URL } from '../../../constants/taskLinkIcon';
|
|
7
|
+
import { NotionIcon } from '../icons/NotionIcon';
|
|
8
|
+
import { SubtaskIcon } from '../icons/SubtaskIcon';
|
|
9
|
+
import { getContextMentionIcon, isNotionMcpSlug } from '../../../utils/contextMentionIcons';
|
|
10
|
+
import { SCMIRow, SCMIProjectRow, SCMIProjectContent, SCMIName, SCMITitle, SCMIProjectTitle, SCMITitleHighlight, SCMIBreadcrumb, SCMIBreadcrumbParent, SCMIRowUser, SCMUserAvatarWrap, SCMUserAvatarImg, SCMUserAvatarFallback, SCMUserInfo, SCMUserNamePositionRow, SCMUserNameCell, SCMUserNameText, SCMUserPositionText, SCMITaskRowWrap, SCMITaskRowSurface, SCMITaskRowInner, SCMITaskTitleRow, SCMITaskSubtaskIconWrap, SCMITaskProjectName, SCMITaskIconImg, SCMITaskTitle } from './ContextMentionItem.styles';
|
|
11
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var TASK_PROJECT_NAME_MAX_CHARS = 40;
|
|
13
|
+
var truncateWithEllipsis = function truncateWithEllipsis(value, maxChars) {
|
|
14
|
+
if (value.length <= maxChars) return value;
|
|
15
|
+
return "".concat(value.slice(0, Math.max(0, maxChars - 1)).trimEnd(), "\u2026");
|
|
16
|
+
};
|
|
17
|
+
var renderTitle = function renderTitle(primary, highlight) {
|
|
18
|
+
if (!highlight || highlight.length <= 0) return primary;
|
|
19
|
+
var start = highlight.start,
|
|
20
|
+
length = highlight.length;
|
|
21
|
+
var end = start + length;
|
|
22
|
+
if (start < 0 || start > primary.length || end > primary.length) return primary;
|
|
23
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
24
|
+
children: [primary.slice(0, start), /*#__PURE__*/_jsx(SCMITitleHighlight, {
|
|
25
|
+
children: primary.slice(start, end)
|
|
26
|
+
}), primary.slice(end)]
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
function useOverflowTooltip(ref, deps) {
|
|
30
|
+
var _useState = useState(false),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
showTooltip = _useState2[0],
|
|
33
|
+
setShowTooltip = _useState2[1];
|
|
34
|
+
useLayoutEffect(function () {
|
|
35
|
+
var el = ref.current;
|
|
36
|
+
if (!el) {
|
|
37
|
+
setShowTooltip(false);
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
var measure = function measure() {
|
|
41
|
+
setShowTooltip(el.scrollWidth > el.clientWidth);
|
|
42
|
+
};
|
|
43
|
+
measure();
|
|
44
|
+
var ro = new ResizeObserver(measure);
|
|
45
|
+
ro.observe(el);
|
|
46
|
+
window.addEventListener('resize', measure);
|
|
47
|
+
return function () {
|
|
48
|
+
ro.disconnect();
|
|
49
|
+
window.removeEventListener('resize', measure);
|
|
50
|
+
};
|
|
51
|
+
}, deps);
|
|
52
|
+
return showTooltip;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Iniciales para avatar (nombre legal), no el texto visible de la fila (ej. "Yo"). */
|
|
56
|
+
var initialsFromDisplayName = function initialsFromDisplayName(name) {
|
|
57
|
+
var _parts$2;
|
|
58
|
+
var trimmed = name.trim();
|
|
59
|
+
if (!trimmed) return '?';
|
|
60
|
+
var parts = trimmed.split(/\s+/).filter(Boolean);
|
|
61
|
+
if (parts.length >= 2) {
|
|
62
|
+
var _parts$0$charAt, _parts$, _parts$charAt, _parts;
|
|
63
|
+
var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
|
|
64
|
+
var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
|
|
65
|
+
return "".concat(first).concat(last).toUpperCase();
|
|
66
|
+
}
|
|
67
|
+
var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
|
|
68
|
+
if (single.length >= 2) return single.slice(0, 2).toUpperCase();
|
|
69
|
+
return (single.charAt(0) || '?').toUpperCase();
|
|
70
|
+
};
|
|
71
|
+
var UserRowAvatar = function UserRowAvatar(_ref) {
|
|
72
|
+
var picture = _ref.picture,
|
|
73
|
+
nameForInitials = _ref.nameForInitials;
|
|
74
|
+
var _useState3 = useState(false),
|
|
75
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
76
|
+
broken = _useState4[0],
|
|
77
|
+
setBroken = _useState4[1];
|
|
78
|
+
var initials = initialsFromDisplayName(nameForInitials);
|
|
79
|
+
return /*#__PURE__*/_jsx(SCMUserAvatarWrap, {
|
|
80
|
+
children: picture && !broken ? /*#__PURE__*/_jsx(SCMUserAvatarImg, {
|
|
81
|
+
src: picture,
|
|
82
|
+
alt: "",
|
|
83
|
+
onError: function onError() {
|
|
84
|
+
return setBroken(true);
|
|
85
|
+
},
|
|
86
|
+
loading: "lazy",
|
|
87
|
+
decoding: "async"
|
|
88
|
+
}) : /*#__PURE__*/_jsx(SCMUserAvatarFallback, {
|
|
89
|
+
"aria-hidden": true,
|
|
90
|
+
children: initials
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
var ContextMentionTaskRow = function ContextMentionTaskRow(_ref2) {
|
|
95
|
+
var _raw$projectName, _breadcrumb$parent, _primaryHighlight$sta, _primaryHighlight$len;
|
|
96
|
+
var item = _ref2.item,
|
|
97
|
+
active = _ref2.active,
|
|
98
|
+
onMouseDown = _ref2.onMouseDown,
|
|
99
|
+
onHover = _ref2.onHover;
|
|
100
|
+
var primary = item.primary,
|
|
101
|
+
primaryHighlight = item.primaryHighlight,
|
|
102
|
+
breadcrumb = item.breadcrumb,
|
|
103
|
+
raw = item.raw;
|
|
104
|
+
var projectName = ((_raw$projectName = raw.projectName) === null || _raw$projectName === void 0 ? void 0 : _raw$projectName.trim()) || (breadcrumb === null || breadcrumb === void 0 || (_breadcrumb$parent = breadcrumb.parent) === null || _breadcrumb$parent === void 0 ? void 0 : _breadcrumb$parent.trim()) || '';
|
|
105
|
+
var projectNameDisplay = truncateWithEllipsis(projectName, TASK_PROJECT_NAME_MAX_CHARS);
|
|
106
|
+
var isProjectNameTruncatedByChars = projectNameDisplay !== projectName;
|
|
107
|
+
var hasFather = raw.fatherId != null;
|
|
108
|
+
var titleRef = useRef(null);
|
|
109
|
+
var projectRef = useRef(null);
|
|
110
|
+
var showTitleTooltip = useOverflowTooltip(titleRef, [primary, projectName, (_primaryHighlight$sta = primaryHighlight === null || primaryHighlight === void 0 ? void 0 : primaryHighlight.start) !== null && _primaryHighlight$sta !== void 0 ? _primaryHighlight$sta : -1, (_primaryHighlight$len = primaryHighlight === null || primaryHighlight === void 0 ? void 0 : primaryHighlight.length) !== null && _primaryHighlight$len !== void 0 ? _primaryHighlight$len : 0, hasFather]);
|
|
111
|
+
var showProjectTooltip = useOverflowTooltip(projectRef, [projectNameDisplay, primary]);
|
|
112
|
+
var shouldShowProjectTooltip = isProjectNameTruncatedByChars || showProjectTooltip;
|
|
113
|
+
return /*#__PURE__*/_jsx(SCMITaskRowWrap, {
|
|
114
|
+
onMouseDown: onMouseDown,
|
|
115
|
+
onMouseEnter: onHover,
|
|
116
|
+
children: /*#__PURE__*/_jsx(SCMITaskRowSurface, {
|
|
117
|
+
$active: active,
|
|
118
|
+
children: /*#__PURE__*/_jsxs(SCMITaskRowInner, {
|
|
119
|
+
children: [/*#__PURE__*/_jsx(SCMITaskIconImg, {
|
|
120
|
+
src: TASK_LINK_ICON_DATA_URL,
|
|
121
|
+
alt: "",
|
|
122
|
+
draggable: false,
|
|
123
|
+
"aria-hidden": true
|
|
124
|
+
}), /*#__PURE__*/_jsxs(SCMITaskTitleRow, {
|
|
125
|
+
children: [hasFather ? /*#__PURE__*/_jsx(SCMITaskSubtaskIconWrap, {
|
|
126
|
+
children: /*#__PURE__*/_jsx(SubtaskIcon, {
|
|
127
|
+
width: "16px",
|
|
128
|
+
height: "16px",
|
|
129
|
+
color: "#000",
|
|
130
|
+
variant: "regular"
|
|
131
|
+
})
|
|
132
|
+
}) : null, /*#__PURE__*/_jsx(Tooltip, {
|
|
133
|
+
title: showTitleTooltip ? primary : '',
|
|
134
|
+
children: /*#__PURE__*/_jsx(SCMITaskTitle, {
|
|
135
|
+
ref: titleRef,
|
|
136
|
+
children: renderTitle(primary, primaryHighlight)
|
|
137
|
+
})
|
|
138
|
+
}), projectName ? /*#__PURE__*/_jsx(Tooltip, {
|
|
139
|
+
title: shouldShowProjectTooltip ? projectName : '',
|
|
140
|
+
children: /*#__PURE__*/_jsx(SCMITaskProjectName, {
|
|
141
|
+
ref: projectRef,
|
|
142
|
+
children: projectNameDisplay
|
|
143
|
+
})
|
|
144
|
+
}) : null]
|
|
145
|
+
})]
|
|
146
|
+
})
|
|
147
|
+
})
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
export var ContextMentionItem = function ContextMentionItem(_ref3) {
|
|
151
|
+
var item = _ref3.item,
|
|
152
|
+
active = _ref3.active,
|
|
153
|
+
onSelect = _ref3.onSelect,
|
|
154
|
+
_onHover = _ref3.onHover;
|
|
155
|
+
var _useT = useT(),
|
|
156
|
+
t = _useT.t;
|
|
157
|
+
var primary = item.primary,
|
|
158
|
+
primaryHighlight = item.primaryHighlight,
|
|
159
|
+
breadcrumb = item.breadcrumb,
|
|
160
|
+
type = item.type,
|
|
161
|
+
raw = item.raw;
|
|
162
|
+
var handleClick = function handleClick(e) {
|
|
163
|
+
e.preventDefault();
|
|
164
|
+
e.stopPropagation();
|
|
165
|
+
onSelect(item);
|
|
166
|
+
};
|
|
167
|
+
var hasCount = typeof (breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.count) === 'number';
|
|
168
|
+
var hasParent = !!(breadcrumb !== null && breadcrumb !== void 0 && breadcrumb.parent);
|
|
169
|
+
var countLabel = (breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.countLabel) && t("contextMention.counters.".concat(breadcrumb.countLabel), {
|
|
170
|
+
defaultValue: breadcrumb.countLabel
|
|
171
|
+
});
|
|
172
|
+
if (type === 'user') {
|
|
173
|
+
var positionNameTrimmed = typeof raw.positionName === 'string' ? raw.positionName.trim() : '';
|
|
174
|
+
var positionLine = positionNameTrimmed || t('contextMention.userNoPosition', {
|
|
175
|
+
defaultValue: 'Sin posición'
|
|
176
|
+
});
|
|
177
|
+
var userNameForInitials = typeof raw.name === 'string' && raw.name.trim() ? raw.name : primary;
|
|
178
|
+
return /*#__PURE__*/_jsxs(SCMIRowUser, {
|
|
179
|
+
$active: active,
|
|
180
|
+
onMouseDown: handleClick,
|
|
181
|
+
onMouseEnter: function onMouseEnter() {
|
|
182
|
+
return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
|
|
183
|
+
},
|
|
184
|
+
children: [/*#__PURE__*/_jsx(UserRowAvatar, {
|
|
185
|
+
picture: raw.picture,
|
|
186
|
+
nameForInitials: userNameForInitials
|
|
187
|
+
}), /*#__PURE__*/_jsx(SCMUserInfo, {
|
|
188
|
+
children: /*#__PURE__*/_jsxs(SCMUserNamePositionRow, {
|
|
189
|
+
children: [/*#__PURE__*/_jsx(SCMUserNameCell, {
|
|
190
|
+
$withDivider: true,
|
|
191
|
+
children: /*#__PURE__*/_jsx(SCMUserNameText, {
|
|
192
|
+
children: renderTitle(primary, primaryHighlight)
|
|
193
|
+
})
|
|
194
|
+
}), /*#__PURE__*/_jsx(SCMUserPositionText, {
|
|
195
|
+
title: positionLine,
|
|
196
|
+
children: positionLine
|
|
197
|
+
})]
|
|
198
|
+
})
|
|
199
|
+
})]
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
if (type === 'project') {
|
|
203
|
+
return /*#__PURE__*/_jsx(SCMIProjectRow, {
|
|
204
|
+
onMouseDown: handleClick,
|
|
205
|
+
onMouseEnter: function onMouseEnter() {
|
|
206
|
+
return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
|
|
207
|
+
},
|
|
208
|
+
children: /*#__PURE__*/_jsx(SCMIProjectContent, {
|
|
209
|
+
$active: active,
|
|
210
|
+
children: /*#__PURE__*/_jsx(SCMIName, {
|
|
211
|
+
children: /*#__PURE__*/_jsx(SCMIProjectTitle, {
|
|
212
|
+
title: primary,
|
|
213
|
+
children: renderTitle(primary, primaryHighlight)
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
})
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
if (type === 'task') {
|
|
220
|
+
return /*#__PURE__*/_jsx(ContextMentionTaskRow, {
|
|
221
|
+
item: item,
|
|
222
|
+
active: active,
|
|
223
|
+
onMouseDown: handleClick,
|
|
224
|
+
onHover: function onHover() {
|
|
225
|
+
return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (type === 'mcp') {
|
|
230
|
+
return /*#__PURE__*/_jsx(SCMIRow, {
|
|
231
|
+
$active: active,
|
|
232
|
+
onMouseDown: handleClick,
|
|
233
|
+
onMouseEnter: function onMouseEnter() {
|
|
234
|
+
return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
|
|
235
|
+
},
|
|
236
|
+
children: /*#__PURE__*/_jsxs(SCMITaskRowInner, {
|
|
237
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
238
|
+
style: {
|
|
239
|
+
display: 'inline-flex',
|
|
240
|
+
alignItems: 'center',
|
|
241
|
+
justifyContent: 'center',
|
|
242
|
+
width: 16,
|
|
243
|
+
height: 16,
|
|
244
|
+
flex: '0 0 16px'
|
|
245
|
+
},
|
|
246
|
+
children: isNotionMcpSlug(raw.id) ? /*#__PURE__*/_jsx(NotionIcon, {
|
|
247
|
+
width: 16,
|
|
248
|
+
height: 16
|
|
249
|
+
}) : getContextMentionIcon('mcp', '#2d77bd', raw.id, 16)
|
|
250
|
+
}), /*#__PURE__*/_jsx(SCMITaskTitle, {
|
|
251
|
+
title: primary,
|
|
252
|
+
children: renderTitle(primary, primaryHighlight)
|
|
253
|
+
})]
|
|
254
|
+
})
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return /*#__PURE__*/_jsx(SCMIRow, {
|
|
258
|
+
$active: active,
|
|
259
|
+
onMouseDown: handleClick,
|
|
260
|
+
onMouseEnter: function onMouseEnter() {
|
|
261
|
+
return _onHover === null || _onHover === void 0 ? void 0 : _onHover(item);
|
|
262
|
+
},
|
|
263
|
+
children: /*#__PURE__*/_jsxs(SCMIName, {
|
|
264
|
+
children: [/*#__PURE__*/_jsx(SCMITitle, {
|
|
265
|
+
children: renderTitle(primary, primaryHighlight)
|
|
266
|
+
}), (hasCount || hasParent) && /*#__PURE__*/_jsxs(SCMIBreadcrumb, {
|
|
267
|
+
children: [hasCount && /*#__PURE__*/_jsxs("span", {
|
|
268
|
+
children: [breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.count, " ", countLabel]
|
|
269
|
+
}), hasParent && /*#__PURE__*/_jsxs(SCMIBreadcrumbParent, {
|
|
270
|
+
children: [/*#__PURE__*/_jsx(ChevronRight, {
|
|
271
|
+
width: "12px",
|
|
272
|
+
height: "12px",
|
|
273
|
+
color: "#808080"
|
|
274
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
275
|
+
children: breadcrumb === null || breadcrumb === void 0 ? void 0 : breadcrumb.parent
|
|
276
|
+
})]
|
|
277
|
+
})]
|
|
278
|
+
})]
|
|
279
|
+
})
|
|
280
|
+
});
|
|
281
|
+
};
|
|
282
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25SaWdodCIsIlRvb2x0aXAiLCJ1c2VUIiwiVEFTS19MSU5LX0lDT05fREFUQV9VUkwiLCJOb3Rpb25JY29uIiwiU3VidGFza0ljb24iLCJnZXRDb250ZXh0TWVudGlvbkljb24iLCJpc05vdGlvbk1jcFNsdWciLCJTQ01JUm93IiwiU0NNSVByb2plY3RSb3ciLCJTQ01JUHJvamVjdENvbnRlbnQiLCJTQ01JTmFtZSIsIlNDTUlUaXRsZSIsIlNDTUlQcm9qZWN0VGl0bGUiLCJTQ01JVGl0bGVIaWdobGlnaHQiLCJTQ01JQnJlYWRjcnVtYiIsIlNDTUlCcmVhZGNydW1iUGFyZW50IiwiU0NNSVJvd1VzZXIiLCJTQ01Vc2VyQXZhdGFyV3JhcCIsIlNDTVVzZXJBdmF0YXJJbWciLCJTQ01Vc2VyQXZhdGFyRmFsbGJhY2siLCJTQ01Vc2VySW5mbyIsIlNDTVVzZXJOYW1lUG9zaXRpb25Sb3ciLCJTQ01Vc2VyTmFtZUNlbGwiLCJTQ01Vc2VyTmFtZVRleHQiLCJTQ01Vc2VyUG9zaXRpb25UZXh0IiwiU0NNSVRhc2tSb3dXcmFwIiwiU0NNSVRhc2tSb3dTdXJmYWNlIiwiU0NNSVRhc2tSb3dJbm5lciIsIlNDTUlUYXNrVGl0bGVSb3ciLCJTQ01JVGFza1N1YnRhc2tJY29uV3JhcCIsIlNDTUlUYXNrUHJvamVjdE5hbWUiLCJTQ01JVGFza0ljb25JbWciLCJTQ01JVGFza1RpdGxlIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiVEFTS19QUk9KRUNUX05BTUVfTUFYX0NIQVJTIiwidHJ1bmNhdGVXaXRoRWxsaXBzaXMiLCJ2YWx1ZSIsIm1heENoYXJzIiwibGVuZ3RoIiwiY29uY2F0Iiwic2xpY2UiLCJNYXRoIiwibWF4IiwidHJpbUVuZCIsInJlbmRlclRpdGxlIiwicHJpbWFyeSIsImhpZ2hsaWdodCIsInN0YXJ0IiwiZW5kIiwiY2hpbGRyZW4iLCJ1c2VPdmVyZmxvd1Rvb2x0aXAiLCJyZWYiLCJkZXBzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd1Rvb2x0aXAiLCJzZXRTaG93VG9vbHRpcCIsImVsIiwiY3VycmVudCIsInVuZGVmaW5lZCIsIm1lYXN1cmUiLCJzY3JvbGxXaWR0aCIsImNsaWVudFdpZHRoIiwicm8iLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzY29ubmVjdCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpbml0aWFsc0Zyb21EaXNwbGF5TmFtZSIsIm5hbWUiLCJfcGFydHMkMiIsInRyaW1tZWQiLCJ0cmltIiwicGFydHMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJfcGFydHMkMCRjaGFyQXQiLCJfcGFydHMkIiwiX3BhcnRzJGNoYXJBdCIsIl9wYXJ0cyIsImZpcnN0IiwiY2hhckF0IiwibGFzdCIsInRvVXBwZXJDYXNlIiwic2luZ2xlIiwiVXNlclJvd0F2YXRhciIsIl9yZWYiLCJwaWN0dXJlIiwibmFtZUZvckluaXRpYWxzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJicm9rZW4iLCJzZXRCcm9rZW4iLCJpbml0aWFscyIsInNyYyIsImFsdCIsIm9uRXJyb3IiLCJsb2FkaW5nIiwiZGVjb2RpbmciLCJDb250ZXh0TWVudGlvblRhc2tSb3ciLCJfcmVmMiIsIl9yYXckcHJvamVjdE5hbWUiLCJfYnJlYWRjcnVtYiRwYXJlbnQiLCJfcHJpbWFyeUhpZ2hsaWdodCRzdGEiLCJfcHJpbWFyeUhpZ2hsaWdodCRsZW4iLCJpdGVtIiwiYWN0aXZlIiwib25Nb3VzZURvd24iLCJvbkhvdmVyIiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJyYXciLCJwcm9qZWN0TmFtZSIsInBhcmVudCIsInByb2plY3ROYW1lRGlzcGxheSIsImlzUHJvamVjdE5hbWVUcnVuY2F0ZWRCeUNoYXJzIiwiaGFzRmF0aGVyIiwiZmF0aGVySWQiLCJ0aXRsZVJlZiIsInByb2plY3RSZWYiLCJzaG93VGl0bGVUb29sdGlwIiwic2hvd1Byb2plY3RUb29sdGlwIiwic2hvdWxkU2hvd1Byb2plY3RUb29sdGlwIiwib25Nb3VzZUVudGVyIiwiJGFjdGl2ZSIsImRyYWdnYWJsZSIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJ2YXJpYW50IiwidGl0bGUiLCJDb250ZXh0TWVudGlvbkl0ZW0iLCJfcmVmMyIsIm9uU2VsZWN0IiwiX3VzZVQiLCJ0IiwidHlwZSIsImhhbmRsZUNsaWNrIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaGFzQ291bnQiLCJjb3VudCIsImhhc1BhcmVudCIsImNvdW50TGFiZWwiLCJkZWZhdWx0VmFsdWUiLCJwb3NpdGlvbk5hbWVUcmltbWVkIiwicG9zaXRpb25OYW1lIiwicG9zaXRpb25MaW5lIiwidXNlck5hbWVGb3JJbml0aWFscyIsIiR3aXRoRGl2aWRlciIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImZsZXgiLCJpZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uSXRlbS9Db250ZXh0TWVudGlvbkl0ZW0udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZDLCBNb3VzZUV2ZW50LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHR5cGUgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uUmlnaHQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uUmlnaHQnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFRBU0tfTElOS19JQ09OX0RBVEFfVVJMIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tMaW5rSWNvbidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uSXRlbSBhcyBDb250ZXh0TWVudGlvbkl0ZW1UeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBOb3Rpb25JY29uIH0gZnJvbSAnLi4vaWNvbnMvTm90aW9uSWNvbidcbmltcG9ydCB7IFN1YnRhc2tJY29uIH0gZnJvbSAnLi4vaWNvbnMvU3VidGFza0ljb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24sIGlzTm90aW9uTWNwU2x1ZyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQge1xuICBTQ01JUm93LFxuICBTQ01JUHJvamVjdFJvdyxcbiAgU0NNSVByb2plY3RDb250ZW50LFxuICBTQ01JTmFtZSxcbiAgU0NNSVRpdGxlLFxuICBTQ01JUHJvamVjdFRpdGxlLFxuICBTQ01JVGl0bGVIaWdobGlnaHQsXG4gIFNDTUlCcmVhZGNydW1iLFxuICBTQ01JQnJlYWRjcnVtYlBhcmVudCxcbiAgU0NNSVJvd1VzZXIsXG4gIFNDTVVzZXJBdmF0YXJXcmFwLFxuICBTQ01Vc2VyQXZhdGFySW1nLFxuICBTQ01Vc2VyQXZhdGFyRmFsbGJhY2ssXG4gIFNDTVVzZXJJbmZvLFxuICBTQ01Vc2VyTmFtZVBvc2l0aW9uUm93LFxuICBTQ01Vc2VyTmFtZUNlbGwsXG4gIFNDTVVzZXJOYW1lVGV4dCxcbiAgU0NNVXNlclBvc2l0aW9uVGV4dCxcbiAgU0NNSVRhc2tSb3dXcmFwLFxuICBTQ01JVGFza1Jvd1N1cmZhY2UsXG4gIFNDTUlUYXNrUm93SW5uZXIsXG4gIFNDTUlUYXNrVGl0bGVSb3csXG4gIFNDTUlUYXNrU3VidGFza0ljb25XcmFwLFxuICBTQ01JVGFza1Byb2plY3ROYW1lLFxuICBTQ01JVGFza0ljb25JbWcsXG4gIFNDTUlUYXNrVGl0bGUsXG59IGZyb20gJy4vQ29udGV4dE1lbnRpb25JdGVtLnN0eWxlcydcblxudHlwZSBDb250ZXh0TWVudGlvbkl0ZW1Qcm9wcyA9IHtcbiAgaXRlbTogQ29udGV4dE1lbnRpb25JdGVtVHlwZVxuICBhY3RpdmU/OiBib29sZWFuXG4gIG9uU2VsZWN0OiAoaXRlbTogQ29udGV4dE1lbnRpb25JdGVtVHlwZSkgPT4gdm9pZFxuICBvbkhvdmVyPzogKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbVR5cGUpID0+IHZvaWRcbn1cblxuY29uc3QgVEFTS19QUk9KRUNUX05BTUVfTUFYX0NIQVJTID0gNDBcblxuY29uc3QgdHJ1bmNhdGVXaXRoRWxsaXBzaXMgPSAodmFsdWU6IHN0cmluZywgbWF4Q2hhcnM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gbWF4Q2hhcnMpIHJldHVybiB2YWx1ZVxuICByZXR1cm4gYCR7dmFsdWUuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbWF4Q2hhcnMgLSAxKSkudHJpbUVuZCgpfeKApmBcbn1cblxuY29uc3QgcmVuZGVyVGl0bGUgPSAocHJpbWFyeTogc3RyaW5nLCBoaWdobGlnaHQ/OiB7IHN0YXJ0OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyIH0pID0+IHtcbiAgaWYgKCFoaWdobGlnaHQgfHwgaGlnaGxpZ2h0Lmxlbmd0aCA8PSAwKSByZXR1cm4gcHJpbWFyeVxuICBjb25zdCB7IHN0YXJ0LCBsZW5ndGggfSA9IGhpZ2hsaWdodFxuICBjb25zdCBlbmQgPSBzdGFydCArIGxlbmd0aFxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gcHJpbWFyeS5sZW5ndGggfHwgZW5kID4gcHJpbWFyeS5sZW5ndGgpIHJldHVybiBwcmltYXJ5XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtwcmltYXJ5LnNsaWNlKDAsIHN0YXJ0KX1cbiAgICAgIDxTQ01JVGl0bGVIaWdobGlnaHQ+e3ByaW1hcnkuc2xpY2Uoc3RhcnQsIGVuZCl9PC9TQ01JVGl0bGVIaWdobGlnaHQ+XG4gICAgICB7cHJpbWFyeS5zbGljZShlbmQpfVxuICAgIDwvPlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZU92ZXJmbG93VG9vbHRpcDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHJlZjogUmVmT2JqZWN0PFQgfCBudWxsPiwgZGVwczogcmVhZG9ubHkgdW5rbm93bltdKSB7XG4gIGNvbnN0IFtzaG93VG9vbHRpcCwgc2V0U2hvd1Rvb2x0aXBdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkge1xuICAgICAgc2V0U2hvd1Rvb2x0aXAoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIHNldFNob3dUb29sdGlwKGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGgpXG4gICAgfVxuXG4gICAgbWVhc3VyZSgpXG4gICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIobWVhc3VyZSlcbiAgICByby5vYnNlcnZlKGVsKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByby5kaXNjb25uZWN0KClcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBtZWFzdXJlKVxuICAgIH1cbiAgfSwgZGVwcylcblxuICByZXR1cm4gc2hvd1Rvb2x0aXBcbn1cblxuLyoqIEluaWNpYWxlcyBwYXJhIGF2YXRhciAobm9tYnJlIGxlZ2FsKSwgbm8gZWwgdGV4dG8gdmlzaWJsZSBkZSBsYSBmaWxhIChlai4gXCJZb1wiKS4gKi9cbmNvbnN0IGluaXRpYWxzRnJvbURpc3BsYXlOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHJldHVybiAnPydcbiAgY29uc3QgcGFydHMgPSB0cmltbWVkLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pXG4gIGlmIChwYXJ0cy5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGZpcnN0ID0gcGFydHNbMF0/LmNoYXJBdCgwKSA/PyAnJ1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXT8uY2hhckF0KDApID8/ICcnXG4gICAgcmV0dXJuIGAke2ZpcnN0fSR7bGFzdH1gLnRvVXBwZXJDYXNlKClcbiAgfVxuICBjb25zdCBzaW5nbGUgPSBwYXJ0c1swXSA/PyAnJ1xuICBpZiAoc2luZ2xlLmxlbmd0aCA+PSAyKSByZXR1cm4gc2luZ2xlLnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBVc2VyUm93QXZhdGFyOiBGQzx7IHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsOyBuYW1lRm9ySW5pdGlhbHM6IHN0cmluZyB9PiA9ICh7IHBpY3R1cmUsIG5hbWVGb3JJbml0aWFscyB9KSA9PiB7XG4gIGNvbnN0IFticm9rZW4sIHNldEJyb2tlbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgaW5pdGlhbHMgPSBpbml0aWFsc0Zyb21EaXNwbGF5TmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNVXNlckF2YXRhcldyYXA+XG4gICAgICB7cGljdHVyZSAmJiAhYnJva2VuID8gKFxuICAgICAgICA8U0NNVXNlckF2YXRhckltZyBzcmM9e3BpY3R1cmV9IGFsdD1cIlwiIG9uRXJyb3I9eygpID0+IHNldEJyb2tlbih0cnVlKX0gbG9hZGluZz1cImxhenlcIiBkZWNvZGluZz1cImFzeW5jXCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01Vc2VyQXZhdGFyRmFsbGJhY2sgYXJpYS1oaWRkZW4+e2luaXRpYWxzfTwvU0NNVXNlckF2YXRhckZhbGxiYWNrPlxuICAgICAgKX1cbiAgICA8L1NDTVVzZXJBdmF0YXJXcmFwPlxuICApXG59XG5cbmNvbnN0IENvbnRleHRNZW50aW9uVGFza1JvdzogRkM8e1xuICBpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW1UeXBlXG4gIGFjdGl2ZT86IGJvb2xlYW5cbiAgb25Nb3VzZURvd246IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkXG4gIG9uSG92ZXI/OiAoKSA9PiB2b2lkXG59PiA9ICh7IGl0ZW0sIGFjdGl2ZSwgb25Nb3VzZURvd24sIG9uSG92ZXIgfSkgPT4ge1xuICBjb25zdCB7IHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQsIGJyZWFkY3J1bWIsIHJhdyB9ID0gaXRlbVxuICBjb25zdCBwcm9qZWN0TmFtZSA9IHJhdy5wcm9qZWN0TmFtZT8udHJpbSgpIHx8IGJyZWFkY3J1bWI/LnBhcmVudD8udHJpbSgpIHx8ICcnXG4gIGNvbnN0IHByb2plY3ROYW1lRGlzcGxheSA9IHRydW5jYXRlV2l0aEVsbGlwc2lzKHByb2plY3ROYW1lLCBUQVNLX1BST0pFQ1RfTkFNRV9NQVhfQ0hBUlMpXG4gIGNvbnN0IGlzUHJvamVjdE5hbWVUcnVuY2F0ZWRCeUNoYXJzID0gcHJvamVjdE5hbWVEaXNwbGF5ICE9PSBwcm9qZWN0TmFtZVxuICBjb25zdCBoYXNGYXRoZXIgPSByYXcuZmF0aGVySWQgIT0gbnVsbFxuICBjb25zdCB0aXRsZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgcHJvamVjdFJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHNob3dUaXRsZVRvb2x0aXAgPSB1c2VPdmVyZmxvd1Rvb2x0aXAodGl0bGVSZWYsIFtcbiAgICBwcmltYXJ5LFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByaW1hcnlIaWdobGlnaHQ/LnN0YXJ0ID8/IC0xLFxuICAgIHByaW1hcnlIaWdobGlnaHQ/Lmxlbmd0aCA/PyAwLFxuICAgIGhhc0ZhdGhlcixcbiAgXSlcbiAgY29uc3Qgc2hvd1Byb2plY3RUb29sdGlwID0gdXNlT3ZlcmZsb3dUb29sdGlwKHByb2plY3RSZWYsIFtwcm9qZWN0TmFtZURpc3BsYXksIHByaW1hcnldKVxuICBjb25zdCBzaG91bGRTaG93UHJvamVjdFRvb2x0aXAgPSBpc1Byb2plY3ROYW1lVHJ1bmNhdGVkQnlDaGFycyB8fCBzaG93UHJvamVjdFRvb2x0aXBcblxuICByZXR1cm4gKFxuICAgIDxTQ01JVGFza1Jvd1dyYXAgb25Nb3VzZURvd249e29uTW91c2VEb3dufSBvbk1vdXNlRW50ZXI9e29uSG92ZXJ9PlxuICAgICAgPFNDTUlUYXNrUm93U3VyZmFjZSAkYWN0aXZlPXthY3RpdmV9PlxuICAgICAgICA8U0NNSVRhc2tSb3dJbm5lcj5cbiAgICAgICAgICA8U0NNSVRhc2tJY29uSW1nIHNyYz17VEFTS19MSU5LX0lDT05fREFUQV9VUkx9IGFsdD1cIlwiIGRyYWdnYWJsZT17ZmFsc2V9IGFyaWEtaGlkZGVuIC8+XG4gICAgICAgICAgPFNDTUlUYXNrVGl0bGVSb3c+XG4gICAgICAgICAgICB7aGFzRmF0aGVyID8gKFxuICAgICAgICAgICAgICA8U0NNSVRhc2tTdWJ0YXNrSWNvbldyYXA+XG4gICAgICAgICAgICAgICAgPFN1YnRhc2tJY29uIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiBjb2xvcj1cIiMwMDBcIiB2YXJpYW50PVwicmVndWxhclwiIC8+XG4gICAgICAgICAgICAgIDwvU0NNSVRhc2tTdWJ0YXNrSWNvbldyYXA+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtzaG93VGl0bGVUb29sdGlwID8gcHJpbWFyeSA6ICcnfT5cbiAgICAgICAgICAgICAgPFNDTUlUYXNrVGl0bGUgcmVmPXt0aXRsZVJlZn0+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNSVRhc2tUaXRsZT5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIHtwcm9qZWN0TmFtZSA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3VsZFNob3dQcm9qZWN0VG9vbHRpcCA/IHByb2plY3ROYW1lIDogJyd9PlxuICAgICAgICAgICAgICAgIDxTQ01JVGFza1Byb2plY3ROYW1lIHJlZj17cHJvamVjdFJlZn0+e3Byb2plY3ROYW1lRGlzcGxheX08L1NDTUlUYXNrUHJvamVjdE5hbWU+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNSVRhc2tUaXRsZVJvdz5cbiAgICAgICAgPC9TQ01JVGFza1Jvd0lubmVyPlxuICAgICAgPC9TQ01JVGFza1Jvd1N1cmZhY2U+XG4gICAgPC9TQ01JVGFza1Jvd1dyYXA+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENvbnRleHRNZW50aW9uSXRlbTogRkM8Q29udGV4dE1lbnRpb25JdGVtUHJvcHM+ID0gKHsgaXRlbSwgYWN0aXZlLCBvblNlbGVjdCwgb25Ib3ZlciB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgcHJpbWFyeSwgcHJpbWFyeUhpZ2hsaWdodCwgYnJlYWRjcnVtYiwgdHlwZSwgcmF3IH0gPSBpdGVtXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBvblNlbGVjdChpdGVtKVxuICB9XG5cbiAgY29uc3QgaGFzQ291bnQgPSB0eXBlb2YgYnJlYWRjcnVtYj8uY291bnQgPT09ICdudW1iZXInXG4gIGNvbnN0IGhhc1BhcmVudCA9ICEhYnJlYWRjcnVtYj8ucGFyZW50XG4gIGNvbnN0IGNvdW50TGFiZWwgPVxuICAgIGJyZWFkY3J1bWI/LmNvdW50TGFiZWwgJiZcbiAgICB0KGBjb250ZXh0TWVudGlvbi5jb3VudGVycy4ke2JyZWFkY3J1bWIuY291bnRMYWJlbH1gLCB7IGRlZmF1bHRWYWx1ZTogYnJlYWRjcnVtYi5jb3VudExhYmVsIH0pXG5cbiAgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgIGNvbnN0IHBvc2l0aW9uTmFtZVRyaW1tZWQgPSB0eXBlb2YgcmF3LnBvc2l0aW9uTmFtZSA9PT0gJ3N0cmluZycgPyByYXcucG9zaXRpb25OYW1lLnRyaW0oKSA6ICcnXG4gICAgY29uc3QgcG9zaXRpb25MaW5lID0gcG9zaXRpb25OYW1lVHJpbW1lZCB8fCB0KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHsgZGVmYXVsdFZhbHVlOiAnU2luIHBvc2ljacOzbicgfSlcbiAgICBjb25zdCB1c2VyTmFtZUZvckluaXRpYWxzID0gdHlwZW9mIHJhdy5uYW1lID09PSAnc3RyaW5nJyAmJiByYXcubmFtZS50cmltKCkgPyByYXcubmFtZSA6IHByaW1hcnlcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NNSVJvd1VzZXIgJGFjdGl2ZT17YWN0aXZlfSBvbk1vdXNlRG93bj17aGFuZGxlQ2xpY2t9IG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlcj8uKGl0ZW0pfT5cbiAgICAgICAgPFVzZXJSb3dBdmF0YXIgcGljdHVyZT17cmF3LnBpY3R1cmV9IG5hbWVGb3JJbml0aWFscz17dXNlck5hbWVGb3JJbml0aWFsc30gLz5cbiAgICAgICAgPFNDTVVzZXJJbmZvPlxuICAgICAgICAgIDxTQ01Vc2VyTmFtZVBvc2l0aW9uUm93PlxuICAgICAgICAgICAgPFNDTVVzZXJOYW1lQ2VsbCAkd2l0aERpdmlkZXI+XG4gICAgICAgICAgICAgIDxTQ01Vc2VyTmFtZVRleHQ+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNVXNlck5hbWVUZXh0PlxuICAgICAgICAgICAgPC9TQ01Vc2VyTmFtZUNlbGw+XG4gICAgICAgICAgICA8U0NNVXNlclBvc2l0aW9uVGV4dCB0aXRsZT17cG9zaXRpb25MaW5lfT57cG9zaXRpb25MaW5lfTwvU0NNVXNlclBvc2l0aW9uVGV4dD5cbiAgICAgICAgICA8L1NDTVVzZXJOYW1lUG9zaXRpb25Sb3c+XG4gICAgICAgIDwvU0NNVXNlckluZm8+XG4gICAgICA8L1NDTUlSb3dVc2VyPlxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNDTUlQcm9qZWN0Um93IG9uTW91c2VEb3duPXtoYW5kbGVDbGlja30gb25Nb3VzZUVudGVyPXsoKSA9PiBvbkhvdmVyPy4oaXRlbSl9PlxuICAgICAgICA8U0NNSVByb2plY3RDb250ZW50ICRhY3RpdmU9e2FjdGl2ZX0+XG4gICAgICAgICAgPFNDTUlOYW1lPlxuICAgICAgICAgICAgPFNDTUlQcm9qZWN0VGl0bGUgdGl0bGU9e3ByaW1hcnl9PntyZW5kZXJUaXRsZShwcmltYXJ5LCBwcmltYXJ5SGlnaGxpZ2h0KX08L1NDTUlQcm9qZWN0VGl0bGU+XG4gICAgICAgICAgPC9TQ01JTmFtZT5cbiAgICAgICAgPC9TQ01JUHJvamVjdENvbnRlbnQ+XG4gICAgICA8L1NDTUlQcm9qZWN0Um93PlxuICAgIClcbiAgfVxuXG4gIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRleHRNZW50aW9uVGFza1JvdyBpdGVtPXtpdGVtfSBhY3RpdmU9e2FjdGl2ZX0gb25Nb3VzZURvd249e2hhbmRsZUNsaWNrfSBvbkhvdmVyPXsoKSA9PiBvbkhvdmVyPy4oaXRlbSl9IC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01JUm93ICRhY3RpdmU9e2FjdGl2ZX0gb25Nb3VzZURvd249e2hhbmRsZUNsaWNrfSBvbk1vdXNlRW50ZXI9eygpID0+IG9uSG92ZXI/LihpdGVtKX0+XG4gICAgICAgIDxTQ01JVGFza1Jvd0lubmVyPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB3aWR0aDogMTYsXG4gICAgICAgICAgICAgIGhlaWdodDogMTYsXG4gICAgICAgICAgICAgIGZsZXg6ICcwIDAgMTZweCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpc05vdGlvbk1jcFNsdWcocmF3LmlkKSA/IChcbiAgICAgICAgICAgICAgPE5vdGlvbkljb24gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKCdtY3AnLCAnIzJkNzdiZCcsIHJhdy5pZCwgMTYpXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8U0NNSVRhc2tUaXRsZSB0aXRsZT17cHJpbWFyeX0+e3JlbmRlclRpdGxlKHByaW1hcnksIHByaW1hcnlIaWdobGlnaHQpfTwvU0NNSVRhc2tUaXRsZT5cbiAgICAgICAgPC9TQ01JVGFza1Jvd0lubmVyPlxuICAgICAgPC9TQ01JUm93PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTUlSb3cgJGFjdGl2ZT17YWN0aXZlfSBvbk1vdXNlRG93bj17aGFuZGxlQ2xpY2t9IG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlcj8uKGl0ZW0pfT5cbiAgICAgIDxTQ01JTmFtZT5cbiAgICAgICAgPFNDTUlUaXRsZT57cmVuZGVyVGl0bGUocHJpbWFyeSwgcHJpbWFyeUhpZ2hsaWdodCl9PC9TQ01JVGl0bGU+XG4gICAgICAgIHsoaGFzQ291bnQgfHwgaGFzUGFyZW50KSAmJiAoXG4gICAgICAgICAgPFNDTUlCcmVhZGNydW1iPlxuICAgICAgICAgICAge2hhc0NvdW50ICYmIChcbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge2JyZWFkY3J1bWI/LmNvdW50fSB7Y291bnRMYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtoYXNQYXJlbnQgJiYgKFxuICAgICAgICAgICAgICA8U0NNSUJyZWFkY3J1bWJQYXJlbnQ+XG4gICAgICAgICAgICAgICAgPENoZXZyb25SaWdodCB3aWR0aD1cIjEycHhcIiBoZWlnaHQ9XCIxMnB4XCIgY29sb3I9XCIjODA4MDgwXCIgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57YnJlYWRjcnVtYj8ucGFyZW50fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9TQ01JQnJlYWRjcnVtYlBhcmVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TQ01JQnJlYWRjcnVtYj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNSU5hbWU+XG4gICAgPC9TQ01JUm93PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUF5QkEsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBd0IsT0FBTztBQUN6RixTQUFTQyxZQUFZLFFBQVEsK0NBQStDO0FBQzVFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyx1QkFBdUIsUUFBUSxpQ0FBaUM7QUFFekUsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyxXQUFXLFFBQVEsc0JBQXNCO0FBQ2xELFNBQVNDLHFCQUFxQixFQUFFQyxlQUFlLFFBQVEsb0NBQW9DO0FBQzNGLFNBQ0VDLE9BQU8sRUFDUEMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixFQUNsQkMsY0FBYyxFQUNkQyxvQkFBb0IsRUFDcEJDLFdBQVcsRUFDWEMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLHFCQUFxQixFQUNyQkMsV0FBVyxFQUNYQyxzQkFBc0IsRUFDdEJDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsYUFBYSxRQUNSLDZCQUE2QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBU3BDLElBQU1DLDJCQUEyQixHQUFHLEVBQUU7QUFFdEMsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsS0FBYSxFQUFFQyxRQUFnQixFQUFhO0VBQ3hFLElBQUlELEtBQUssQ0FBQ0UsTUFBTSxJQUFJRCxRQUFRLEVBQUUsT0FBT0QsS0FBSztFQUMxQyxVQUFBRyxNQUFBLENBQVVILEtBQUssQ0FBQ0ksS0FBSyxDQUFDLENBQUMsRUFBRUMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFTCxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ00sT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxPQUFlLEVBQUVDLFNBQTZDLEVBQUs7RUFDdEYsSUFBSSxDQUFDQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ1IsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPTyxPQUFPO0VBQ3ZELElBQVFFLEtBQUssR0FBYUQsU0FBUyxDQUEzQkMsS0FBSztJQUFFVCxNQUFNLEdBQUtRLFNBQVMsQ0FBcEJSLE1BQU07RUFDckIsSUFBTVUsR0FBRyxHQUFHRCxLQUFLLEdBQUdULE1BQU07RUFDMUIsSUFBSVMsS0FBSyxHQUFHLENBQUMsSUFBSUEsS0FBSyxHQUFHRixPQUFPLENBQUNQLE1BQU0sSUFBSVUsR0FBRyxHQUFHSCxPQUFPLENBQUNQLE1BQU0sRUFBRSxPQUFPTyxPQUFPO0VBQy9FLG9CQUNFWixLQUFBLENBQUFGLFNBQUE7SUFBQWtCLFFBQUEsR0FDR0osT0FBTyxDQUFDTCxLQUFLLENBQUMsQ0FBQyxFQUFFTyxLQUFLLENBQUMsZUFDeEJsQixJQUFBLENBQUNyQixrQkFBa0I7TUFBQXlDLFFBQUEsRUFBRUosT0FBTyxDQUFDTCxLQUFLLENBQUNPLEtBQUssRUFBRUMsR0FBRztJQUFDLENBQXFCLENBQUMsRUFDbkVILE9BQU8sQ0FBQ0wsS0FBSyxDQUFDUSxHQUFHLENBQUM7RUFBQSxDQUNuQixDQUFDO0FBRVAsQ0FBQztBQUVELFNBQVNFLGtCQUFrQkEsQ0FBd0JDLEdBQXdCLEVBQUVDLElBQXdCLEVBQUU7RUFDckcsSUFBQUMsU0FBQSxHQUFzQzVELFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTZELFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQTlDRyxXQUFXLEdBQUFGLFVBQUE7SUFBRUcsY0FBYyxHQUFBSCxVQUFBO0VBRWxDL0QsZUFBZSxDQUFDLFlBQU07SUFDcEIsSUFBTW1FLEVBQUUsR0FBR1AsR0FBRyxDQUFDUSxPQUFPO0lBQ3RCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO01BQ1BELGNBQWMsQ0FBQyxLQUFLLENBQUM7TUFDckIsT0FBT0csU0FBUztJQUNsQjtJQUVBLElBQU1DLE9BQU8sR0FBRyxTQUFWQSxPQUFPQSxDQUFBLEVBQVM7TUFDcEJKLGNBQWMsQ0FBQ0MsRUFBRSxDQUFDSSxXQUFXLEdBQUdKLEVBQUUsQ0FBQ0ssV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFFREYsT0FBTyxDQUFDLENBQUM7SUFDVCxJQUFNRyxFQUFFLEdBQUcsSUFBSUMsY0FBYyxDQUFDSixPQUFPLENBQUM7SUFDdENHLEVBQUUsQ0FBQ0UsT0FBTyxDQUFDUixFQUFFLENBQUM7SUFDZFMsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVQLE9BQU8sQ0FBQztJQUMxQyxPQUFPLFlBQU07TUFDWEcsRUFBRSxDQUFDSyxVQUFVLENBQUMsQ0FBQztNQUNmRixNQUFNLENBQUNHLG1CQUFtQixDQUFDLFFBQVEsRUFBRVQsT0FBTyxDQUFDO0lBQy9DLENBQUM7RUFDSCxDQUFDLEVBQUVULElBQUksQ0FBQztFQUVSLE9BQU9JLFdBQVc7QUFDcEI7O0FBRUE7QUFDQSxJQUFNZSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJQyxJQUFZLEVBQWE7RUFBQSxJQUFBQyxRQUFBO0VBQ3hELElBQU1DLE9BQU8sR0FBR0YsSUFBSSxDQUFDRyxJQUFJLENBQUMsQ0FBQztFQUMzQixJQUFJLENBQUNELE9BQU8sRUFBRSxPQUFPLEdBQUc7RUFDeEIsSUFBTUUsS0FBSyxHQUFHRixPQUFPLENBQUNHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLENBQUM7RUFDbEQsSUFBSUgsS0FBSyxDQUFDdEMsTUFBTSxJQUFJLENBQUMsRUFBRTtJQUFBLElBQUEwQyxlQUFBLEVBQUFDLE9BQUEsRUFBQUMsYUFBQSxFQUFBQyxNQUFBO0lBQ3JCLElBQU1DLEtBQUssSUFBQUosZUFBQSxJQUFBQyxPQUFBLEdBQUdMLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBQUssT0FBQSx1QkFBUkEsT0FBQSxDQUFVSSxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQUFMLGVBQUEsY0FBQUEsZUFBQSxHQUFJLEVBQUU7SUFDdkMsSUFBTU0sSUFBSSxJQUFBSixhQUFBLElBQUFDLE1BQUEsR0FBR1AsS0FBSyxDQUFDQSxLQUFLLENBQUN0QyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQUE2QyxNQUFBLHVCQUF2QkEsTUFBQSxDQUF5QkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFBSCxhQUFBLGNBQUFBLGFBQUEsR0FBSSxFQUFFO0lBQ3JELE9BQU8sR0FBQTNDLE1BQUEsQ0FBRzZDLEtBQUssRUFBQTdDLE1BQUEsQ0FBRytDLElBQUksRUFBR0MsV0FBVyxDQUFDLENBQUM7RUFDeEM7RUFDQSxJQUFNQyxNQUFNLElBQUFmLFFBQUEsR0FBR0csS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFBSCxRQUFBLGNBQUFBLFFBQUEsR0FBSSxFQUFFO0VBQzdCLElBQUllLE1BQU0sQ0FBQ2xELE1BQU0sSUFBSSxDQUFDLEVBQUUsT0FBT2tELE1BQU0sQ0FBQ2hELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMrQyxXQUFXLENBQUMsQ0FBQztFQUMvRCxPQUFPLENBQUNDLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRUUsV0FBVyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELElBQU1FLGFBQXVFLEdBQUcsU0FBMUVBLGFBQXVFQSxDQUFBQyxJQUFBLEVBQXFDO0VBQUEsSUFBL0JDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQUVDLGVBQWUsR0FBQUYsSUFBQSxDQUFmRSxlQUFlO0VBQ3pHLElBQUFDLFVBQUEsR0FBNEJwRyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFxRyxVQUFBLEdBQUF2QyxjQUFBLENBQUFzQyxVQUFBO0lBQXBDRSxNQUFNLEdBQUFELFVBQUE7SUFBRUUsU0FBUyxHQUFBRixVQUFBO0VBQ3hCLElBQU1HLFFBQVEsR0FBRzFCLHVCQUF1QixDQUFDcUIsZUFBZSxDQUFDO0VBRXpELG9CQUNFL0QsSUFBQSxDQUFDakIsaUJBQWlCO0lBQUFxQyxRQUFBLEVBQ2YwQyxPQUFPLElBQUksQ0FBQ0ksTUFBTSxnQkFDakJsRSxJQUFBLENBQUNoQixnQkFBZ0I7TUFBQ3FGLEdBQUcsRUFBRVAsT0FBUTtNQUFDUSxHQUFHLEVBQUMsRUFBRTtNQUFDQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFKLFNBQVMsQ0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDO01BQUNLLE9BQU8sRUFBQyxNQUFNO01BQUNDLFFBQVEsRUFBQztJQUFPLENBQUUsQ0FBQyxnQkFFekd6RSxJQUFBLENBQUNmLHFCQUFxQjtNQUFDLG1CQUFXO01BQUFtQyxRQUFBLEVBQUVnRDtJQUFRLENBQXdCO0VBQ3JFLENBQ2dCLENBQUM7QUFFeEIsQ0FBQztBQUVELElBQU1NLHFCQUtKLEdBQUcsU0FMQ0EscUJBS0pBLENBQUFDLEtBQUEsRUFBK0M7RUFBQSxJQUFBQyxnQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtFQUFBLElBQXpDQyxJQUFJLEdBQUFMLEtBQUEsQ0FBSkssSUFBSTtJQUFFQyxNQUFNLEdBQUFOLEtBQUEsQ0FBTk0sTUFBTTtJQUFFQyxXQUFXLEdBQUFQLEtBQUEsQ0FBWE8sV0FBVztJQUFFQyxPQUFPLEdBQUFSLEtBQUEsQ0FBUFEsT0FBTztFQUN4QyxJQUFRbkUsT0FBTyxHQUF3Q2dFLElBQUksQ0FBbkRoRSxPQUFPO0lBQUVvRSxnQkFBZ0IsR0FBc0JKLElBQUksQ0FBMUNJLGdCQUFnQjtJQUFFQyxVQUFVLEdBQVVMLElBQUksQ0FBeEJLLFVBQVU7SUFBRUMsR0FBRyxHQUFLTixJQUFJLENBQVpNLEdBQUc7RUFDbEQsSUFBTUMsV0FBVyxHQUFHLEVBQUFYLGdCQUFBLEdBQUFVLEdBQUcsQ0FBQ0MsV0FBVyxjQUFBWCxnQkFBQSx1QkFBZkEsZ0JBQUEsQ0FBaUI5QixJQUFJLENBQUMsQ0FBQyxNQUFJdUMsVUFBVSxhQUFWQSxVQUFVLGdCQUFBUixrQkFBQSxHQUFWUSxVQUFVLENBQUVHLE1BQU0sY0FBQVgsa0JBQUEsdUJBQWxCQSxrQkFBQSxDQUFvQi9CLElBQUksQ0FBQyxDQUFDLEtBQUksRUFBRTtFQUMvRSxJQUFNMkMsa0JBQWtCLEdBQUduRixvQkFBb0IsQ0FBQ2lGLFdBQVcsRUFBRWxGLDJCQUEyQixDQUFDO0VBQ3pGLElBQU1xRiw2QkFBNkIsR0FBR0Qsa0JBQWtCLEtBQUtGLFdBQVc7RUFDeEUsSUFBTUksU0FBUyxHQUFHTCxHQUFHLENBQUNNLFFBQVEsSUFBSSxJQUFJO0VBQ3RDLElBQU1DLFFBQVEsR0FBR2xJLE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBQzdDLElBQU1tSSxVQUFVLEdBQUduSSxNQUFNLENBQWtCLElBQUksQ0FBQztFQUNoRCxJQUFNb0ksZ0JBQWdCLEdBQUcxRSxrQkFBa0IsQ0FBQ3dFLFFBQVEsRUFBRSxDQUNwRDdFLE9BQU8sRUFDUHVFLFdBQVcsR0FBQVQscUJBQUEsR0FDWE0sZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRWxFLEtBQUssY0FBQTRELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQyxDQUFDLEdBQUFDLHFCQUFBLEdBQzdCSyxnQkFBZ0IsYUFBaEJBLGdCQUFnQix1QkFBaEJBLGdCQUFnQixDQUFFM0UsTUFBTSxjQUFBc0UscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxDQUFDLEVBQzdCWSxTQUFTLENBQ1YsQ0FBQztFQUNGLElBQU1LLGtCQUFrQixHQUFHM0Usa0JBQWtCLENBQUN5RSxVQUFVLEVBQUUsQ0FBQ0wsa0JBQWtCLEVBQUV6RSxPQUFPLENBQUMsQ0FBQztFQUN4RixJQUFNaUYsd0JBQXdCLEdBQUdQLDZCQUE2QixJQUFJTSxrQkFBa0I7RUFFcEYsb0JBQ0VoRyxJQUFBLENBQUNULGVBQWU7SUFBQzJGLFdBQVcsRUFBRUEsV0FBWTtJQUFDZ0IsWUFBWSxFQUFFZixPQUFRO0lBQUEvRCxRQUFBLGVBQy9EcEIsSUFBQSxDQUFDUixrQkFBa0I7TUFBQzJHLE9BQU8sRUFBRWxCLE1BQU87TUFBQTdELFFBQUEsZUFDbENoQixLQUFBLENBQUNYLGdCQUFnQjtRQUFBMkIsUUFBQSxnQkFDZnBCLElBQUEsQ0FBQ0gsZUFBZTtVQUFDd0UsR0FBRyxFQUFFckcsdUJBQXdCO1VBQUNzRyxHQUFHLEVBQUMsRUFBRTtVQUFDOEIsU0FBUyxFQUFFLEtBQU07VUFBQztRQUFXLENBQUUsQ0FBQyxlQUN0RmhHLEtBQUEsQ0FBQ1YsZ0JBQWdCO1VBQUEwQixRQUFBLEdBQ2R1RSxTQUFTLGdCQUNSM0YsSUFBQSxDQUFDTCx1QkFBdUI7WUFBQXlCLFFBQUEsZUFDdEJwQixJQUFBLENBQUM5QixXQUFXO2NBQUNtSSxLQUFLLEVBQUMsTUFBTTtjQUFDQyxNQUFNLEVBQUMsTUFBTTtjQUFDQyxLQUFLLEVBQUMsTUFBTTtjQUFDQyxPQUFPLEVBQUM7WUFBUyxDQUFFO1VBQUMsQ0FDbEQsQ0FBQyxHQUN4QixJQUFJLGVBQ1J4RyxJQUFBLENBQUNsQyxPQUFPO1lBQUMySSxLQUFLLEVBQUVWLGdCQUFnQixHQUFHL0UsT0FBTyxHQUFHLEVBQUc7WUFBQUksUUFBQSxlQUM5Q3BCLElBQUEsQ0FBQ0YsYUFBYTtjQUFDd0IsR0FBRyxFQUFFdUUsUUFBUztjQUFBekUsUUFBQSxFQUFFTCxXQUFXLENBQUNDLE9BQU8sRUFBRW9FLGdCQUFnQjtZQUFDLENBQWdCO1VBQUMsQ0FDL0UsQ0FBQyxFQUNURyxXQUFXLGdCQUNWdkYsSUFBQSxDQUFDbEMsT0FBTztZQUFDMkksS0FBSyxFQUFFUix3QkFBd0IsR0FBR1YsV0FBVyxHQUFHLEVBQUc7WUFBQW5FLFFBQUEsZUFDMURwQixJQUFBLENBQUNKLG1CQUFtQjtjQUFDMEIsR0FBRyxFQUFFd0UsVUFBVztjQUFBMUUsUUFBQSxFQUFFcUU7WUFBa0IsQ0FBc0I7VUFBQyxDQUN6RSxDQUFDLEdBQ1IsSUFBSTtRQUFBLENBQ1EsQ0FBQztNQUFBLENBQ0g7SUFBQyxDQUNEO0VBQUMsQ0FDTixDQUFDO0FBRXRCLENBQUM7QUFFRCxPQUFPLElBQU1pQixrQkFBK0MsR0FBRyxTQUFsREEsa0JBQStDQSxDQUFBQyxLQUFBLEVBQTRDO0VBQUEsSUFBdEMzQixJQUFJLEdBQUEyQixLQUFBLENBQUozQixJQUFJO0lBQUVDLE1BQU0sR0FBQTBCLEtBQUEsQ0FBTjFCLE1BQU07SUFBRTJCLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQUV6QixRQUFPLEdBQUF3QixLQUFBLENBQVB4QixPQUFPO0VBQy9GLElBQUEwQixLQUFBLEdBQWM5SSxJQUFJLENBQUMsQ0FBQztJQUFaK0ksQ0FBQyxHQUFBRCxLQUFBLENBQURDLENBQUM7RUFDVCxJQUFROUYsT0FBTyxHQUE4Q2dFLElBQUksQ0FBekRoRSxPQUFPO0lBQUVvRSxnQkFBZ0IsR0FBNEJKLElBQUksQ0FBaERJLGdCQUFnQjtJQUFFQyxVQUFVLEdBQWdCTCxJQUFJLENBQTlCSyxVQUFVO0lBQUUwQixJQUFJLEdBQVUvQixJQUFJLENBQWxCK0IsSUFBSTtJQUFFekIsR0FBRyxHQUFLTixJQUFJLENBQVpNLEdBQUc7RUFFeEQsSUFBTTBCLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxDQUFhLEVBQUs7SUFDckNBLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7SUFDbEJELENBQUMsQ0FBQ0UsZUFBZSxDQUFDLENBQUM7SUFDbkJQLFFBQVEsQ0FBQzVCLElBQUksQ0FBQztFQUNoQixDQUFDO0VBRUQsSUFBTW9DLFFBQVEsR0FBRyxRQUFPL0IsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVnQyxLQUFLLE1BQUssUUFBUTtFQUN0RCxJQUFNQyxTQUFTLEdBQUcsQ0FBQyxFQUFDakMsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRUcsTUFBTTtFQUN0QyxJQUFNK0IsVUFBVSxHQUNkLENBQUFsQyxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRWtDLFVBQVUsS0FDdEJULENBQUMsNEJBQUFwRyxNQUFBLENBQTRCMkUsVUFBVSxDQUFDa0MsVUFBVSxHQUFJO0lBQUVDLFlBQVksRUFBRW5DLFVBQVUsQ0FBQ2tDO0VBQVcsQ0FBQyxDQUFDO0VBRWhHLElBQUlSLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDbkIsSUFBTVUsbUJBQW1CLEdBQUcsT0FBT25DLEdBQUcsQ0FBQ29DLFlBQVksS0FBSyxRQUFRLEdBQUdwQyxHQUFHLENBQUNvQyxZQUFZLENBQUM1RSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDL0YsSUFBTTZFLFlBQVksR0FBR0YsbUJBQW1CLElBQUlYLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtNQUFFVSxZQUFZLEVBQUU7SUFBZSxDQUFDLENBQUM7SUFDaEgsSUFBTUksbUJBQW1CLEdBQUcsT0FBT3RDLEdBQUcsQ0FBQzNDLElBQUksS0FBSyxRQUFRLElBQUkyQyxHQUFHLENBQUMzQyxJQUFJLENBQUNHLElBQUksQ0FBQyxDQUFDLEdBQUd3QyxHQUFHLENBQUMzQyxJQUFJLEdBQUczQixPQUFPO0lBRWhHLG9CQUNFWixLQUFBLENBQUN0QixXQUFXO01BQUNxSCxPQUFPLEVBQUVsQixNQUFPO01BQUNDLFdBQVcsRUFBRThCLFdBQVk7TUFBQ2QsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUE7UUFBQSxPQUFRZixRQUFPLGFBQVBBLFFBQU8sdUJBQVBBLFFBQU8sQ0FBR0gsSUFBSSxDQUFDO01BQUEsQ0FBQztNQUFBNUQsUUFBQSxnQkFDMUZwQixJQUFBLENBQUM0RCxhQUFhO1FBQUNFLE9BQU8sRUFBRXdCLEdBQUcsQ0FBQ3hCLE9BQVE7UUFBQ0MsZUFBZSxFQUFFNkQ7TUFBb0IsQ0FBRSxDQUFDLGVBQzdFNUgsSUFBQSxDQUFDZCxXQUFXO1FBQUFrQyxRQUFBLGVBQ1ZoQixLQUFBLENBQUNqQixzQkFBc0I7VUFBQWlDLFFBQUEsZ0JBQ3JCcEIsSUFBQSxDQUFDWixlQUFlO1lBQUN5SSxZQUFZO1lBQUF6RyxRQUFBLGVBQzNCcEIsSUFBQSxDQUFDWCxlQUFlO2NBQUErQixRQUFBLEVBQUVMLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFb0UsZ0JBQWdCO1lBQUMsQ0FBa0I7VUFBQyxDQUM1RCxDQUFDLGVBQ2xCcEYsSUFBQSxDQUFDVixtQkFBbUI7WUFBQ21ILEtBQUssRUFBRWtCLFlBQWE7WUFBQXZHLFFBQUEsRUFBRXVHO1VBQVksQ0FBc0IsQ0FBQztRQUFBLENBQ3hEO01BQUMsQ0FDZCxDQUFDO0lBQUEsQ0FDSCxDQUFDO0VBRWxCO0VBRUEsSUFBSVosSUFBSSxLQUFLLFNBQVMsRUFBRTtJQUN0QixvQkFDRS9HLElBQUEsQ0FBQzFCLGNBQWM7TUFBQzRHLFdBQVcsRUFBRThCLFdBQVk7TUFBQ2QsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUE7UUFBQSxPQUFRZixRQUFPLGFBQVBBLFFBQU8sdUJBQVBBLFFBQU8sQ0FBR0gsSUFBSSxDQUFDO01BQUEsQ0FBQztNQUFBNUQsUUFBQSxlQUM1RXBCLElBQUEsQ0FBQ3pCLGtCQUFrQjtRQUFDNEgsT0FBTyxFQUFFbEIsTUFBTztRQUFBN0QsUUFBQSxlQUNsQ3BCLElBQUEsQ0FBQ3hCLFFBQVE7VUFBQTRDLFFBQUEsZUFDUHBCLElBQUEsQ0FBQ3RCLGdCQUFnQjtZQUFDK0gsS0FBSyxFQUFFekYsT0FBUTtZQUFBSSxRQUFBLEVBQUVMLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFb0UsZ0JBQWdCO1VBQUMsQ0FBbUI7UUFBQyxDQUNyRjtNQUFDLENBQ087SUFBQyxDQUNQLENBQUM7RUFFckI7RUFFQSxJQUFJMkIsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUNuQixvQkFDRS9HLElBQUEsQ0FBQzBFLHFCQUFxQjtNQUFDTSxJQUFJLEVBQUVBLElBQUs7TUFBQ0MsTUFBTSxFQUFFQSxNQUFPO01BQUNDLFdBQVcsRUFBRThCLFdBQVk7TUFBQzdCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUUEsUUFBTyxhQUFQQSxRQUFPLHVCQUFQQSxRQUFPLENBQUdILElBQUksQ0FBQztNQUFBO0lBQUMsQ0FBRSxDQUFDO0VBRW5IO0VBRUEsSUFBSStCLElBQUksS0FBSyxLQUFLLEVBQUU7SUFDbEIsb0JBQ0UvRyxJQUFBLENBQUMzQixPQUFPO01BQUM4SCxPQUFPLEVBQUVsQixNQUFPO01BQUNDLFdBQVcsRUFBRThCLFdBQVk7TUFBQ2QsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUE7UUFBQSxPQUFRZixRQUFPLGFBQVBBLFFBQU8sdUJBQVBBLFFBQU8sQ0FBR0gsSUFBSSxDQUFDO01BQUEsQ0FBQztNQUFBNUQsUUFBQSxlQUN0RmhCLEtBQUEsQ0FBQ1gsZ0JBQWdCO1FBQUEyQixRQUFBLGdCQUNmcEIsSUFBQTtVQUNFOEgsS0FBSyxFQUFFO1lBQ0xDLE9BQU8sRUFBRSxhQUFhO1lBQ3RCQyxVQUFVLEVBQUUsUUFBUTtZQUNwQkMsY0FBYyxFQUFFLFFBQVE7WUFDeEI1QixLQUFLLEVBQUUsRUFBRTtZQUNUQyxNQUFNLEVBQUUsRUFBRTtZQUNWNEIsSUFBSSxFQUFFO1VBQ1IsQ0FBRTtVQUFBOUcsUUFBQSxFQUVEaEQsZUFBZSxDQUFDa0gsR0FBRyxDQUFDNkMsRUFBRSxDQUFDLGdCQUN0Qm5JLElBQUEsQ0FBQy9CLFVBQVU7WUFBQ29JLEtBQUssRUFBRSxFQUFHO1lBQUNDLE1BQU0sRUFBRTtVQUFHLENBQUUsQ0FBQyxHQUVyQ25JLHFCQUFxQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUVtSCxHQUFHLENBQUM2QyxFQUFFLEVBQUUsRUFBRTtRQUNuRCxDQUNHLENBQUMsZUFDUG5JLElBQUEsQ0FBQ0YsYUFBYTtVQUFDMkcsS0FBSyxFQUFFekYsT0FBUTtVQUFBSSxRQUFBLEVBQUVMLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFb0UsZ0JBQWdCO1FBQUMsQ0FBZ0IsQ0FBQztNQUFBLENBQ3ZFO0lBQUMsQ0FDWixDQUFDO0VBRWQ7RUFFQSxvQkFDRXBGLElBQUEsQ0FBQzNCLE9BQU87SUFBQzhILE9BQU8sRUFBRWxCLE1BQU87SUFBQ0MsV0FBVyxFQUFFOEIsV0FBWTtJQUFDZCxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBQTtNQUFBLE9BQVFmLFFBQU8sYUFBUEEsUUFBTyx1QkFBUEEsUUFBTyxDQUFHSCxJQUFJLENBQUM7SUFBQSxDQUFDO0lBQUE1RCxRQUFBLGVBQ3RGaEIsS0FBQSxDQUFDNUIsUUFBUTtNQUFBNEMsUUFBQSxnQkFDUHBCLElBQUEsQ0FBQ3ZCLFNBQVM7UUFBQTJDLFFBQUEsRUFBRUwsV0FBVyxDQUFDQyxPQUFPLEVBQUVvRSxnQkFBZ0I7TUFBQyxDQUFZLENBQUMsRUFDOUQsQ0FBQ2dDLFFBQVEsSUFBSUUsU0FBUyxrQkFDckJsSCxLQUFBLENBQUN4QixjQUFjO1FBQUF3QyxRQUFBLEdBQ1pnRyxRQUFRLGlCQUNQaEgsS0FBQTtVQUFBZ0IsUUFBQSxHQUNHaUUsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVnQyxLQUFLLEVBQUMsR0FBQyxFQUFDRSxVQUFVO1FBQUEsQ0FDM0IsQ0FDUCxFQUNBRCxTQUFTLGlCQUNSbEgsS0FBQSxDQUFDdkIsb0JBQW9CO1VBQUF1QyxRQUFBLGdCQUNuQnBCLElBQUEsQ0FBQ25DLFlBQVk7WUFBQ3dJLEtBQUssRUFBQyxNQUFNO1lBQUNDLE1BQU0sRUFBQyxNQUFNO1lBQUNDLEtBQUssRUFBQztVQUFTLENBQUUsQ0FBQyxlQUMzRHZHLElBQUE7WUFBQW9CLFFBQUEsRUFBT2lFLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFRztVQUFNLENBQU8sQ0FBQztRQUFBLENBQ2IsQ0FDdkI7TUFBQSxDQUNhLENBQ2pCO0lBQUEsQ0FDTztFQUFDLENBQ0osQ0FBQztBQUVkLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|