@projectcor/maia-components 2.11.19-0 → 2.11.19-2

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 (37) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +2 -3
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +5 -6
  3. package/lib/components/atoms/icons/index.js +1 -3
  4. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -24
  5. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +53 -17
  6. package/lib/components/molecules/ChatAIHome/styles.js +42 -34
  7. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +6 -49
  8. package/lib/components/molecules/ChatAIMessages/newStyles.js +21 -24
  9. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -115
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +41 -16
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +13 -5
  12. package/lib/components/molecules/ChatAIModal/constants.js +2 -6
  13. package/lib/components/molecules/Sidebar/Sidebar.js +197 -162
  14. package/lib/components/molecules/Sidebar/Sidebar.styles.js +1 -13
  15. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +1 -10
  16. package/lib/hooks/useChatManager/useChatManager.js +103 -113
  17. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  18. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -14
  19. package/lib/lang/br/index.js +9 -68
  20. package/lib/lang/en/index.js +9 -68
  21. package/lib/lang/es/index.js +7 -66
  22. package/lib/lang/fr/index.js +4 -52
  23. package/lib/services/maia/Agents/getAgents.js +8 -5
  24. package/lib/services/maia/Orchestrator/orchestrator.js +25 -29
  25. package/lib/services/utils/mapChatMessages.js +149 -39
  26. package/lib/types/Chat.js +1 -1
  27. package/lib/types/agent.js +1 -1
  28. package/package.json +1 -1
  29. package/lib/components/atoms/icons/MaiaStoreIcon.js +0 -31
  30. package/lib/components/atoms/icons/MyAgentsNavIcon.js +0 -51
  31. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +0 -50
  32. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +0 -62
  33. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +0 -43
  34. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +0 -37
  35. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +0 -351
  36. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +0 -165
  37. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +0 -114
@@ -1,43 +0,0 @@
1
- /* eslint-disable react/function-component-definition */
2
- import { ArrowRight } from '@projectcor/icons/lib/components/ArrowRight';
3
- import { useT } from '../../../hooks/useT';
4
- import { SCSuggestionsWrapper, SCSuggestionsTitle, SCSuggestionsList, SCSuggestionButton, SCSuggestionText } from './ChatAISuggestions.styles';
5
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
- export var ChatAISuggestions = function ChatAISuggestions(_ref) {
7
- var suggestions = _ref.suggestions,
8
- onSelectSuggestion = _ref.onSelectSuggestion,
9
- _ref$disabled = _ref.disabled,
10
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
11
- _ref$hidden = _ref.hidden,
12
- hidden = _ref$hidden === void 0 ? false : _ref$hidden;
13
- var _useT = useT(),
14
- t = _useT.t;
15
- if (!(suggestions !== null && suggestions !== void 0 && suggestions.length)) return null;
16
- var suggestionOccurrences = new Map();
17
- return /*#__PURE__*/_jsxs(SCSuggestionsWrapper, {
18
- $hidden: hidden,
19
- children: [/*#__PURE__*/_jsx(SCSuggestionsTitle, {
20
- children: t('chat.suggestionsTitle')
21
- }), /*#__PURE__*/_jsx(SCSuggestionsList, {
22
- children: suggestions.map(function (suggestion) {
23
- var currentCount = (suggestionOccurrences.get(suggestion) || 0) + 1;
24
- suggestionOccurrences.set(suggestion, currentCount);
25
- return /*#__PURE__*/_jsxs(SCSuggestionButton, {
26
- type: "button",
27
- onClick: function onClick() {
28
- return onSelectSuggestion(suggestion);
29
- },
30
- disabled: disabled || hidden,
31
- children: [/*#__PURE__*/_jsx(ArrowRight, {
32
- width: 12,
33
- height: 12,
34
- color: "#20201F"
35
- }), /*#__PURE__*/_jsx(SCSuggestionText, {
36
- children: suggestion
37
- })]
38
- }, "".concat(suggestion, "-").concat(currentCount));
39
- })
40
- })]
41
- });
42
- };
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcnJvd1JpZ2h0IiwidXNlVCIsIlNDU3VnZ2VzdGlvbnNXcmFwcGVyIiwiU0NTdWdnZXN0aW9uc1RpdGxlIiwiU0NTdWdnZXN0aW9uc0xpc3QiLCJTQ1N1Z2dlc3Rpb25CdXR0b24iLCJTQ1N1Z2dlc3Rpb25UZXh0IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiX3JlZiIsInN1Z2dlc3Rpb25zIiwib25TZWxlY3RTdWdnZXN0aW9uIiwiX3JlZiRkaXNhYmxlZCIsImRpc2FibGVkIiwiX3JlZiRoaWRkZW4iLCJoaWRkZW4iLCJfdXNlVCIsInQiLCJsZW5ndGgiLCJzdWdnZXN0aW9uT2NjdXJyZW5jZXMiLCJNYXAiLCIkaGlkZGVuIiwiY2hpbGRyZW4iLCJtYXAiLCJzdWdnZXN0aW9uIiwiY3VycmVudENvdW50IiwiZ2V0Iiwic2V0IiwidHlwZSIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiY29uY2F0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSVN1Z2dlc3Rpb25zLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuaW1wb3J0IHsgQXJyb3dSaWdodCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93UmlnaHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7XG4gIFNDU3VnZ2VzdGlvbnNXcmFwcGVyLFxuICBTQ1N1Z2dlc3Rpb25zVGl0bGUsXG4gIFNDU3VnZ2VzdGlvbnNMaXN0LFxuICBTQ1N1Z2dlc3Rpb25CdXR0b24sXG4gIFNDU3VnZ2VzdGlvblRleHQsXG59IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMuc3R5bGVzJ1xuXG50eXBlIENoYXRBSVN1Z2dlc3Rpb25zUHJvcHMgPSB7XG4gIHN1Z2dlc3Rpb25zOiBzdHJpbmdbXVxuICBvblNlbGVjdFN1Z2dlc3Rpb246IChzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIGhpZGRlbj86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSVN1Z2dlc3Rpb25zID0gKHtcbiAgc3VnZ2VzdGlvbnMsXG4gIG9uU2VsZWN0U3VnZ2VzdGlvbixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaGlkZGVuID0gZmFsc2UsXG59OiBDaGF0QUlTdWdnZXN0aW9uc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGlmICghc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgc3VnZ2VzdGlvbk9jY3VycmVuY2VzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU3VnZ2VzdGlvbnNXcmFwcGVyICRoaWRkZW49e2hpZGRlbn0+XG4gICAgICA8U0NTdWdnZXN0aW9uc1RpdGxlPnt0KCdjaGF0LnN1Z2dlc3Rpb25zVGl0bGUnKX08L1NDU3VnZ2VzdGlvbnNUaXRsZT5cbiAgICAgIDxTQ1N1Z2dlc3Rpb25zTGlzdD5cbiAgICAgICAge3N1Z2dlc3Rpb25zLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSAoc3VnZ2VzdGlvbk9jY3VycmVuY2VzLmdldChzdWdnZXN0aW9uKSB8fCAwKSArIDFcbiAgICAgICAgICBzdWdnZXN0aW9uT2NjdXJyZW5jZXMuc2V0KHN1Z2dlc3Rpb24sIGN1cnJlbnRDb3VudClcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U0NTdWdnZXN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGtleT17YCR7c3VnZ2VzdGlvbn0tJHtjdXJyZW50Q291bnR9YH1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0U3VnZ2VzdGlvbihzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGhpZGRlbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgICAgICA8U0NTdWdnZXN0aW9uVGV4dD57c3VnZ2VzdGlvbn08L1NDU3VnZ2VzdGlvblRleHQ+XG4gICAgICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9TQ1N1Z2dlc3Rpb25zTGlzdD5cbiAgICA8L1NDU3VnZ2VzdGlvbnNXcmFwcGVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsU0FBU0EsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQ0VDLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLFFBQ1gsNEJBQTRCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQVNuQyxPQUFPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUFDLElBQUEsRUFLQTtFQUFBLElBSjVCQyxXQUFXLEdBQUFELElBQUEsQ0FBWEMsV0FBVztJQUNYQyxrQkFBa0IsR0FBQUYsSUFBQSxDQUFsQkUsa0JBQWtCO0lBQUFDLGFBQUEsR0FBQUgsSUFBQSxDQUNsQkksUUFBUTtJQUFSQSxRQUFRLEdBQUFELGFBQUEsY0FBRyxLQUFLLEdBQUFBLGFBQUE7SUFBQUUsV0FBQSxHQUFBTCxJQUFBLENBQ2hCTSxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLEtBQUssR0FBQUEsV0FBQTtFQUVkLElBQUFFLEtBQUEsR0FBY2xCLElBQUksQ0FBQyxDQUFDO0lBQVptQixDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQUksRUFBQ1AsV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRVEsTUFBTSxHQUFFLE9BQU8sSUFBSTtFQUNyQyxJQUFNQyxxQkFBcUIsR0FBRyxJQUFJQyxHQUFHLENBQWlCLENBQUM7RUFFdkQsb0JBQ0ViLEtBQUEsQ0FBQ1Isb0JBQW9CO0lBQUNzQixPQUFPLEVBQUVOLE1BQU87SUFBQU8sUUFBQSxnQkFDcENqQixJQUFBLENBQUNMLGtCQUFrQjtNQUFBc0IsUUFBQSxFQUFFTCxDQUFDLENBQUMsdUJBQXVCO0lBQUMsQ0FBcUIsQ0FBQyxlQUNyRVosSUFBQSxDQUFDSixpQkFBaUI7TUFBQXFCLFFBQUEsRUFDZlosV0FBVyxDQUFDYSxHQUFHLENBQUMsVUFBQUMsVUFBVSxFQUFJO1FBQzdCLElBQU1DLFlBQVksR0FBRyxDQUFDTixxQkFBcUIsQ0FBQ08sR0FBRyxDQUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNyRUwscUJBQXFCLENBQUNRLEdBQUcsQ0FBQ0gsVUFBVSxFQUFFQyxZQUFZLENBQUM7UUFFbkQsb0JBQ0VsQixLQUFBLENBQUNMLGtCQUFrQjtVQUVqQjBCLElBQUksRUFBQyxRQUFRO1VBQ2JDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1lBQUEsT0FBUWxCLGtCQUFrQixDQUFDYSxVQUFVLENBQUM7VUFBQSxDQUFDO1VBQzlDWCxRQUFRLEVBQUVBLFFBQVEsSUFBSUUsTUFBTztVQUFBTyxRQUFBLGdCQUU3QmpCLElBQUEsQ0FBQ1IsVUFBVTtZQUFDaUMsS0FBSyxFQUFFLEVBQUc7WUFBQ0MsTUFBTSxFQUFFLEVBQUc7WUFBQ0MsS0FBSyxFQUFDO1VBQVMsQ0FBRSxDQUFDLGVBQ3JEM0IsSUFBQSxDQUFDRixnQkFBZ0I7WUFBQW1CLFFBQUEsRUFBRUU7VUFBVSxDQUFtQixDQUFDO1FBQUEsTUFBQVMsTUFBQSxDQU56Q1QsVUFBVSxPQUFBUyxNQUFBLENBQUlSLFlBQVksQ0FPaEIsQ0FBQztNQUV6QixDQUFDO0lBQUMsQ0FDZSxDQUFDO0VBQUEsQ0FDQSxDQUFDO0FBRTNCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,37 +0,0 @@
1
- import styled from 'styled-components';
2
- export var SCSuggestionsWrapper = styled.div.withConfig({
3
- displayName: "ChatAISuggestionsstyles__SCSuggestionsWrapper",
4
- componentId: "sc-1154q2v-0"
5
- })(["display:flex;flex-direction:column;align-items:flex-start;gap:8px;align-self:stretch;overflow:hidden;max-height:", ";opacity:", ";transform:", ";margin-top:", ";transition:max-height 220ms ease,opacity 220ms ease,transform 220ms ease,margin-top 220ms ease;pointer-events:", ";"], function (_ref) {
6
- var $hidden = _ref.$hidden;
7
- return $hidden ? '0px' : '220px';
8
- }, function (_ref2) {
9
- var $hidden = _ref2.$hidden;
10
- return $hidden ? 0 : 1;
11
- }, function (_ref3) {
12
- var $hidden = _ref3.$hidden;
13
- return $hidden ? 'translateY(-6px)' : 'translateY(0)';
14
- }, function (_ref4) {
15
- var $hidden = _ref4.$hidden;
16
- return $hidden ? '0px' : '2px';
17
- }, function (_ref5) {
18
- var $hidden = _ref5.$hidden;
19
- return $hidden ? 'none' : 'auto';
20
- });
21
- export var SCSuggestionsTitle = styled.span.withConfig({
22
- displayName: "ChatAISuggestionsstyles__SCSuggestionsTitle",
23
- componentId: "sc-1154q2v-1"
24
- })(["align-self:stretch;color:var(--Text-Primary,#20201f);font-family:'Work Sans';font-size:14px;font-style:normal;font-weight:400;line-height:26px;"]);
25
- export var SCSuggestionsList = styled.div.withConfig({
26
- displayName: "ChatAISuggestionsstyles__SCSuggestionsList",
27
- componentId: "sc-1154q2v-2"
28
- })(["display:flex;flex-direction:column;align-items:flex-start;gap:8px;align-self:stretch;"]);
29
- export var SCSuggestionButton = styled.button.withConfig({
30
- displayName: "ChatAISuggestionsstyles__SCSuggestionButton",
31
- componentId: "sc-1154q2v-3"
32
- })(["display:flex;width:fit-content;max-width:100%;padding:4px 8px;justify-content:center;align-items:center;gap:10px;border-radius:18px;border:1px solid var(--Gray-100,#d9d9d9);background:transparent;color:var(--Text-Primary,#20201f);font-family:'Work Sans';font-size:14px;font-style:normal;font-weight:500;line-height:140%;letter-spacing:-0.21px;cursor:pointer;text-align:left;&:disabled{opacity:0.6;cursor:not-allowed;}"]);
33
- export var SCSuggestionText = styled.span.withConfig({
34
- displayName: "ChatAISuggestionsstyles__SCSuggestionText",
35
- componentId: "sc-1154q2v-4"
36
- })(["min-width:0;overflow-wrap:anywhere;"]);
37
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJTQ1N1Z2dlc3Rpb25zV3JhcHBlciIsImRpdiIsIndpdGhDb25maWciLCJkaXNwbGF5TmFtZSIsImNvbXBvbmVudElkIiwiX3JlZiIsIiRoaWRkZW4iLCJfcmVmMiIsIl9yZWYzIiwiX3JlZjQiLCJfcmVmNSIsIlNDU3VnZ2VzdGlvbnNUaXRsZSIsInNwYW4iLCJTQ1N1Z2dlc3Rpb25zTGlzdCIsIlNDU3VnZ2VzdGlvbkJ1dHRvbiIsImJ1dHRvbiIsIlNDU3VnZ2VzdGlvblRleHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJU3VnZ2VzdGlvbnMuc3R5bGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBTQ1N1Z2dlc3Rpb25zV3JhcHBlciA9IHN0eWxlZC5kaXY8eyAkaGlkZGVuPzogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGdhcDogOHB4O1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtaGVpZ2h0OiAkeyh7ICRoaWRkZW4gfSkgPT4gKCRoaWRkZW4gPyAnMHB4JyA6ICcyMjBweCcpfTtcbiAgb3BhY2l0eTogJHsoeyAkaGlkZGVuIH0pID0+ICgkaGlkZGVuID8gMCA6IDEpfTtcbiAgdHJhbnNmb3JtOiAkeyh7ICRoaWRkZW4gfSkgPT4gKCRoaWRkZW4gPyAndHJhbnNsYXRlWSgtNnB4KScgOiAndHJhbnNsYXRlWSgwKScpfTtcbiAgbWFyZ2luLXRvcDogJHsoeyAkaGlkZGVuIH0pID0+ICgkaGlkZGVuID8gJzBweCcgOiAnMnB4Jyl9O1xuICB0cmFuc2l0aW9uOlxuICAgIG1heC1oZWlnaHQgMjIwbXMgZWFzZSxcbiAgICBvcGFjaXR5IDIyMG1zIGVhc2UsXG4gICAgdHJhbnNmb3JtIDIyMG1zIGVhc2UsXG4gICAgbWFyZ2luLXRvcCAyMjBtcyBlYXNlO1xuICBwb2ludGVyLWV2ZW50czogJHsoeyAkaGlkZGVuIH0pID0+ICgkaGlkZGVuID8gJ25vbmUnIDogJ2F1dG8nKX07XG5gXG5cbmV4cG9ydCBjb25zdCBTQ1N1Z2dlc3Rpb25zVGl0bGUgPSBzdHlsZWQuc3BhbmBcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgY29sb3I6IHZhcigtLVRleHQtUHJpbWFyeSwgIzIwMjAxZik7XG4gIGZvbnQtZmFtaWx5OiAnV29yayBTYW5zJztcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuYFxuXG5leHBvcnQgY29uc3QgU0NTdWdnZXN0aW9uc0xpc3QgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZ2FwOiA4cHg7XG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ1N1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uYFxuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNHB4IDhweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tR3JheS0xMDAsICNkOWQ5ZDkpO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLVRleHQtUHJpbWFyeSwgIzIwMjAxZik7XG4gIGZvbnQtZmFtaWx5OiAnV29yayBTYW5zJztcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMjFweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICY6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNjtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBTQ1N1Z2dlc3Rpb25UZXh0ID0gc3R5bGVkLnNwYW5gXG4gIG1pbi13aWR0aDogMDtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG5gXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxtQkFBbUI7QUFFdEMsT0FBTyxJQUFNQyxvQkFBb0IsR0FBR0QsTUFBTSxDQUFDRSxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsNlJBTzlCLFVBQUFDLElBQUE7RUFBQSxJQUFHQyxPQUFPLEdBQUFELElBQUEsQ0FBUEMsT0FBTztFQUFBLE9BQVFBLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTztBQUFBLENBQUMsRUFDL0MsVUFBQUMsS0FBQTtFQUFBLElBQUdELE9BQU8sR0FBQUMsS0FBQSxDQUFQRCxPQUFPO0VBQUEsT0FBUUEsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQUEsQ0FBQyxFQUNoQyxVQUFBRSxLQUFBO0VBQUEsSUFBR0YsT0FBTyxHQUFBRSxLQUFBLENBQVBGLE9BQU87RUFBQSxPQUFRQSxPQUFPLEdBQUcsa0JBQWtCLEdBQUcsZUFBZTtBQUFBLENBQUMsRUFDaEUsVUFBQUcsS0FBQTtFQUFBLElBQUdILE9BQU8sR0FBQUcsS0FBQSxDQUFQSCxPQUFPO0VBQUEsT0FBUUEsT0FBTyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQUEsQ0FBQyxFQU10QyxVQUFBSSxLQUFBO0VBQUEsSUFBR0osT0FBTyxHQUFBSSxLQUFBLENBQVBKLE9BQU87RUFBQSxPQUFRQSxPQUFPLEdBQUcsTUFBTSxHQUFHLE1BQU07QUFBQSxDQUFDLENBQy9EO0FBRUQsT0FBTyxJQUFNSyxrQkFBa0IsR0FBR1osTUFBTSxDQUFDYSxJQUFJLENBQUFWLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsdUpBUTVDO0FBRUQsT0FBTyxJQUFNUyxpQkFBaUIsR0FBR2QsTUFBTSxDQUFDRSxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsNkZBTTFDO0FBRUQsT0FBTyxJQUFNVSxrQkFBa0IsR0FBR2YsTUFBTSxDQUFDZ0IsTUFBTSxDQUFBYixVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLHlhQXlCOUM7QUFFRCxPQUFPLElBQU1ZLGdCQUFnQixHQUFHakIsTUFBTSxDQUFDYSxJQUFJLENBQUFWLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsMkNBRzFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,351 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- import React, { useEffect, useMemo, useState } from 'react';
5
- import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
6
- import { Star } from '@projectcor/icons/lib/components/Star';
7
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
8
- import { useTranslation } from 'react-i18next';
9
- import { useGlobalContext } from '../../../context/global-context';
10
- import { useUser } from '../../../context/cor-user';
11
- import { deleteAgent } from '../../../services/maia/Agents/deleteAgent';
12
- import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
13
- import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal/DeleteQuestionModal';
14
- import { SECTIONS } from '../../../constants/config';
15
- import { Loader } from '../../atoms/Loader';
16
- import { useToggleFavorite } from '../../../hooks';
17
- import { EVENTS, useEvent } from '../../../hooks/useEvent';
18
- import { SCMAActionsRow, SCMABody, SCMACardBody, SCMACardButton, SCMACardFooter, SCMACardHeader, SCMACardIntroText, SCMACardMenu, SCMACardMenuItem, SCMACardMenuItems, SCMAFavoriteButton, SCMACardText, SCMACardTitle, SCMACardTitleEmoji, SCMACardTitleName, SCMACardsOuter, SCMACardsRow, SCMAEmptyStateRoot, SCMAEmptyStateColumn, SCMAEmptyStateTitleBlock, SCMAEmptyStateTitle, SCMAEmptyStateSubtitle, SCMAEmptyStateButton, SCMAKebabButton, SCMACreateManualButton, SCMACreateManualButtonText, SCMALoadMoreWrapper, SCMAMyAgentsContainer, SCMATitle, SCMATitleInner, SCMATitleWrap } from './ChatAIMyAgents.styles';
19
- import { MAIAIsologo } from '../../atoms/icons';
20
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
- export var ChatAIMyAgents = function ChatAIMyAgents(_ref) {
22
- var _user$permissions;
23
- var onBack = _ref.onBack,
24
- agents = _ref.agents,
25
- onDeleteAgent = _ref.onDeleteAgent,
26
- onFavoriteAgentUpdate = _ref.onFavoriteAgentUpdate,
27
- _ref$hasMoreAgents = _ref.hasMoreAgents,
28
- hasMoreAgents = _ref$hasMoreAgents === void 0 ? false : _ref$hasMoreAgents,
29
- _ref$loadingMoreAgent = _ref.loadingMoreAgents,
30
- loadingMoreAgents = _ref$loadingMoreAgent === void 0 ? false : _ref$loadingMoreAgent,
31
- onLoadMoreAgents = _ref.onLoadMoreAgents,
32
- onGoToMaiaker = _ref.onGoToMaiaker;
33
- var _useTranslation = useTranslation([SECTIONS.chatAI, SECTIONS.abmAgent]),
34
- t = _useTranslation.t;
35
- var user = useUser();
36
- var _useGlobalContext = useGlobalContext(),
37
- selectAgent = _useGlobalContext.selectAgent,
38
- setProject = _useGlobalContext.setProject,
39
- setClient = _useGlobalContext.setClient;
40
- var _useSnackBarManager = useSnackBarManager(),
41
- handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
42
- handleSnackbarError = _useSnackBarManager.handleSnackbarError;
43
- var customAgents = agents.filter(function (agent) {
44
- return agent.type === 'custom' && !agent.is_deleted;
45
- });
46
- var _useState = useState(null),
47
- _useState2 = _slicedToArray(_useState, 2),
48
- menuOpenForAgentId = _useState2[0],
49
- setMenuOpenForAgentId = _useState2[1];
50
- var _useState3 = useState(null),
51
- _useState4 = _slicedToArray(_useState3, 2),
52
- agentToDelete = _useState4[0],
53
- setAgentToDelete = _useState4[1];
54
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
55
- var canCreateAgent = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
56
- var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
57
- var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
58
- var canShowMenu = canEdit || canDelete;
59
- var _useToggleFavorite = useToggleFavorite(),
60
- toggleFavorite = _useToggleFavorite.toggleFavorite;
61
- var amplitudeEvent = useEvent();
62
- var handleLoadMore = function handleLoadMore() {
63
- if (!onLoadMoreAgents || !hasMoreAgents || loadingMoreAgents) {
64
- return;
65
- }
66
- onLoadMoreAgents();
67
- };
68
- var deleteModalChat = useMemo(function () {
69
- return agentToDelete ? {
70
- title: agentToDelete.name,
71
- id: agentToDelete.id
72
- } : null;
73
- }, [agentToDelete]);
74
- var handleUseAgent = function handleUseAgent(agent) {
75
- setProject(null);
76
- setClient === null || setClient === void 0 || setClient(null);
77
- selectAgent(agent);
78
- onBack();
79
- };
80
- var normalizeText = function normalizeText(value) {
81
- if (Array.isArray(value)) return value[0] || '';
82
- return value || '';
83
- };
84
- var getCreatedAtLabel = function getCreatedAtLabel(agent) {
85
- var createdAt = agent.created_at;
86
- if (!createdAt) return '';
87
- var createdAtDate = new Date(createdAt);
88
- if (Number.isNaN(createdAtDate.getTime())) return '';
89
- var diffMs = Date.now() - createdAtDate.getTime();
90
- var dayMs = 1000 * 60 * 60 * 24;
91
- var days = Math.max(0, Math.floor(diffMs / dayMs));
92
- if (days === 0) return t('marketplace.myAgentsToday');
93
- if (days === 1) return t('marketplace.myAgentsOneDayAgo');
94
- return t('marketplace.myAgentsDaysAgo', {
95
- days: days
96
- });
97
- };
98
- var handleOpenEditAgent = function handleOpenEditAgent(agent) {
99
- document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
100
- detail: {
101
- agentValues: {
102
- values: {
103
- isEditing: true,
104
- knowledge: (agent === null || agent === void 0 ? void 0 : agent.knowledge) || [],
105
- general: {
106
- name: agent.name,
107
- id: agent.id
108
- }
109
- },
110
- isOpen: true
111
- }
112
- }
113
- }));
114
- setMenuOpenForAgentId(null);
115
- };
116
- var handleToggleFavorite = function handleToggleFavorite(event, agent, isFavorite) {
117
- event.preventDefault();
118
- event.stopPropagation();
119
- toggleFavorite(agent.id, function (updatedAgent) {
120
- onFavoriteAgentUpdate === null || onFavoriteAgentUpdate === void 0 || onFavoriteAgentUpdate(updatedAgent);
121
- }, undefined, isFavorite);
122
- };
123
- var handleConfirmDelete = /*#__PURE__*/function () {
124
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
125
- var _t;
126
- return _regeneratorRuntime.wrap(function (_context) {
127
- while (1) switch (_context.prev = _context.next) {
128
- case 0:
129
- _context.prev = 0;
130
- _context.next = 1;
131
- return deleteAgent(chat.id);
132
- case 1:
133
- handleSnackbarSuccess(t('confirmAgentDeleted', {
134
- ns: SECTIONS.abmAgent
135
- }));
136
- onDeleteAgent === null || onDeleteAgent === void 0 || onDeleteAgent(chat.id);
137
- setAgentToDelete(null);
138
- setMenuOpenForAgentId(null);
139
- _context.next = 3;
140
- break;
141
- case 2:
142
- _context.prev = 2;
143
- _t = _context["catch"](0);
144
- handleSnackbarError(t('errorAgentCreated', {
145
- ns: SECTIONS.abmAgent
146
- }));
147
- case 3:
148
- case "end":
149
- return _context.stop();
150
- }
151
- }, _callee, null, [[0, 2]]);
152
- }));
153
- return function handleConfirmDelete(_x) {
154
- return _ref2.apply(this, arguments);
155
- };
156
- }();
157
- var handleOpenCreateAgent = function handleOpenCreateAgent() {
158
- amplitudeEvent(EVENTS.openModal, {
159
- option: 'create_agent'
160
- });
161
- document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
162
- detail: {
163
- agentValues: {
164
- values: {
165
- isEditing: false
166
- },
167
- isOpen: true
168
- }
169
- }
170
- }));
171
- };
172
- useEffect(function () {
173
- var handleClickOutside = function handleClickOutside() {
174
- if (menuOpenForAgentId) {
175
- setMenuOpenForAgentId(null);
176
- }
177
- };
178
- document.addEventListener('click', handleClickOutside);
179
- return function () {
180
- document.removeEventListener('click', handleClickOutside);
181
- };
182
- }, [menuOpenForAgentId]);
183
- useEffect(function () {
184
- var container = document.getElementById('my-agents-scroll-container');
185
- if (!container) {
186
- return undefined;
187
- }
188
- var onScroll = function onScroll() {
189
- if (!hasMoreAgents || loadingMoreAgents) return;
190
- var scrollTop = container.scrollTop,
191
- clientHeight = container.clientHeight,
192
- scrollHeight = container.scrollHeight;
193
- var nearBottom = scrollTop + clientHeight >= scrollHeight - 40;
194
- if (nearBottom) {
195
- handleLoadMore();
196
- }
197
- };
198
- container.addEventListener('scroll', onScroll);
199
- return function () {
200
- container.removeEventListener('scroll', onScroll);
201
- };
202
- }, [hasMoreAgents, loadingMoreAgents, onLoadMoreAgents]);
203
- useEffect(function () {
204
- var container = document.getElementById('my-agents-scroll-container');
205
- if (!container || !hasMoreAgents || loadingMoreAgents) {
206
- return undefined;
207
- }
208
- if (container.scrollHeight <= container.clientHeight + 1) {
209
- handleLoadMore();
210
- }
211
- return undefined;
212
- }, [customAgents.length, hasMoreAgents, loadingMoreAgents, onLoadMoreAgents]);
213
- return /*#__PURE__*/_jsxs(SCMAMyAgentsContainer, {
214
- id: "my-agents-scroll-container",
215
- $hasAgents: !!customAgents.length,
216
- children: [/*#__PURE__*/_jsx(MAIAIsologo, {}), /*#__PURE__*/_jsxs(SCMABody, {
217
- children: [customAgents.length ? /*#__PURE__*/_jsxs(SCMATitleWrap, {
218
- children: [/*#__PURE__*/_jsx(SCMATitleInner, {
219
- children: /*#__PURE__*/_jsx(SCMATitle, {
220
- children: t('marketplace.myAgentsReadyTitle')
221
- })
222
- }), canCreateAgent ? /*#__PURE__*/_jsx(SCMAActionsRow, {
223
- children: /*#__PURE__*/_jsx(SCMACreateManualButton, {
224
- type: "button",
225
- onClick: handleOpenCreateAgent,
226
- children: /*#__PURE__*/_jsx(SCMACreateManualButtonText, {
227
- children: "Crear agente manualmente"
228
- })
229
- })
230
- }) : null]
231
- }) : null, customAgents.length ? /*#__PURE__*/_jsx(SCMACardsOuter, {
232
- children: /*#__PURE__*/_jsx(SCMACardsRow, {
233
- children: customAgents.map(function (agent) {
234
- var _agent$emoji;
235
- return /*#__PURE__*/_jsxs(SCMACardButton, {
236
- type: "button",
237
- onClick: function onClick() {
238
- return handleUseAgent(agent);
239
- },
240
- children: [/*#__PURE__*/_jsxs(SCMACardHeader, {
241
- children: [/*#__PURE__*/_jsxs(SCMACardTitle, {
242
- children: [(_agent$emoji = agent.emoji) !== null && _agent$emoji !== void 0 && _agent$emoji.trim() ? /*#__PURE__*/_jsx(SCMACardTitleEmoji, {
243
- "aria-hidden": true,
244
- children: agent.emoji
245
- }) : null, /*#__PURE__*/_jsx(SCMACardTitleName, {
246
- children: agent.name
247
- })]
248
- }), canShowMenu ? /*#__PURE__*/_jsx(SCMAKebabButton, {
249
- type: "button",
250
- "aria-label": t('marketplace.cardMenuAriaLabel'),
251
- onClick: function onClick(event) {
252
- event.preventDefault();
253
- event.stopPropagation();
254
- setMenuOpenForAgentId(function (prev) {
255
- return prev === agent.id ? null : agent.id;
256
- });
257
- },
258
- children: /*#__PURE__*/_jsx(MenuDots, {
259
- color: "#999",
260
- width: 15,
261
- height: 15
262
- })
263
- }) : null]
264
- }), /*#__PURE__*/_jsxs(SCMACardBody, {
265
- children: [/*#__PURE__*/_jsx(SCMACardIntroText, {
266
- children: normalizeText(agent.introduction)
267
- }), /*#__PURE__*/_jsxs(SCMACardFooter, {
268
- children: [/*#__PURE__*/_jsx(SCMACardText, {
269
- children: getCreatedAtLabel(agent) || t('marketplace.myAgentsFallbackDate')
270
- }), /*#__PURE__*/_jsx(Tooltip, {
271
- title: agent.is_favorite ? t('agents.removeFavorite') : t('agents.addFavorite'),
272
- children: /*#__PURE__*/_jsx(SCMAFavoriteButton, {
273
- type: "button",
274
- "aria-label": agent.is_favorite ? t('agents.removeFavorite') : t('agents.addFavorite'),
275
- $alwaysVisible: !!agent.is_favorite,
276
- onClick: function onClick(event) {
277
- return handleToggleFavorite(event, agent, !!agent.is_favorite);
278
- },
279
- children: /*#__PURE__*/_jsx(Star, {
280
- width: 20,
281
- height: 20,
282
- color: agent.is_favorite ? '#FFC624' : '#a6a6a6',
283
- fill: agent.is_favorite ? '#FFC624' : 'none',
284
- variant: "solid",
285
- className: agent.is_favorite ? '' : 'star-favorite-icon'
286
- })
287
- })
288
- })]
289
- })]
290
- }), menuOpenForAgentId === agent.id && canShowMenu ? /*#__PURE__*/_jsx(SCMACardMenu, {
291
- onClick: function onClick(event) {
292
- event.preventDefault();
293
- event.stopPropagation();
294
- },
295
- children: /*#__PURE__*/_jsxs(SCMACardMenuItems, {
296
- children: [canDelete ? /*#__PURE__*/_jsx(SCMACardMenuItem, {
297
- type: "button",
298
- onClick: function onClick() {
299
- setAgentToDelete(agent);
300
- },
301
- children: t('deleteAgent', {
302
- ns: SECTIONS.abmAgent
303
- })
304
- }) : null, canEdit ? /*#__PURE__*/_jsx(SCMACardMenuItem, {
305
- type: "button",
306
- onClick: function onClick() {
307
- handleOpenEditAgent(agent);
308
- },
309
- children: t('editAgent', {
310
- ns: SECTIONS.abmAgent
311
- })
312
- }) : null]
313
- })
314
- }) : null]
315
- }, agent.id);
316
- })
317
- })
318
- }) : /*#__PURE__*/_jsxs(SCMAEmptyStateRoot, {
319
- children: [/*#__PURE__*/_jsx(SCMAEmptyStateColumn, {
320
- children: /*#__PURE__*/_jsxs(SCMAEmptyStateTitleBlock, {
321
- children: [/*#__PURE__*/_jsx(SCMAEmptyStateTitle, {
322
- children: t('marketplace.myAgentsEmptyStateTitle')
323
- }), /*#__PURE__*/_jsx(SCMAEmptyStateSubtitle, {
324
- children: canCreateAgent ? t('marketplace.myAgentsEmptyStateDescription') : t('marketplace.myAgentsEmptyStateDescriptionNoPerm')
325
- })]
326
- })
327
- }), canCreateAgent && onGoToMaiaker ? /*#__PURE__*/_jsx(SCMAEmptyStateButton, {
328
- type: "button",
329
- onClick: function onClick() {
330
- return onGoToMaiaker();
331
- },
332
- children: t('marketplace.myAgentsEmptyStateButton')
333
- }) : null]
334
- }), loadingMoreAgents ? /*#__PURE__*/_jsx(SCMALoadMoreWrapper, {
335
- children: /*#__PURE__*/_jsx(Loader, {
336
- size: "small"
337
- })
338
- }) : null]
339
- }), deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
340
- onClose: function onClose() {
341
- return setAgentToDelete(null);
342
- },
343
- handlers: {
344
- handleConfirmAction: handleConfirmDelete
345
- },
346
- chat: deleteModalChat,
347
- action: "agent"
348
- }) : null]
349
- });
350
- };
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIk1lbnVEb3RzIiwiU3RhciIsIlRvb2x0aXAiLCJ1c2VUcmFuc2xhdGlvbiIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VVc2VyIiwiZGVsZXRlQWdlbnQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiU0VDVElPTlMiLCJMb2FkZXIiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NNQUFjdGlvbnNSb3ciLCJTQ01BQm9keSIsIlNDTUFDYXJkQm9keSIsIlNDTUFDYXJkQnV0dG9uIiwiU0NNQUNhcmRGb290ZXIiLCJTQ01BQ2FyZEhlYWRlciIsIlNDTUFDYXJkSW50cm9UZXh0IiwiU0NNQUNhcmRNZW51IiwiU0NNQUNhcmRNZW51SXRlbSIsIlNDTUFDYXJkTWVudUl0ZW1zIiwiU0NNQUZhdm9yaXRlQnV0dG9uIiwiU0NNQUNhcmRUZXh0IiwiU0NNQUNhcmRUaXRsZSIsIlNDTUFDYXJkVGl0bGVFbW9qaSIsIlNDTUFDYXJkVGl0bGVOYW1lIiwiU0NNQUNhcmRzT3V0ZXIiLCJTQ01BQ2FyZHNSb3ciLCJTQ01BRW1wdHlTdGF0ZVJvb3QiLCJTQ01BRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTUFFbXB0eVN0YXRlVGl0bGUiLCJTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNQUVtcHR5U3RhdGVCdXR0b24iLCJTQ01BS2ViYWJCdXR0b24iLCJTQ01BQ3JlYXRlTWFudWFsQnV0dG9uIiwiU0NNQUNyZWF0ZU1hbnVhbEJ1dHRvblRleHQiLCJTQ01BTG9hZE1vcmVXcmFwcGVyIiwiU0NNQU15QWdlbnRzQ29udGFpbmVyIiwiU0NNQVRpdGxlIiwiU0NNQVRpdGxlSW5uZXIiLCJTQ01BVGl0bGVXcmFwIiwiTUFJQUlzb2xvZ28iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQ2hhdEFJTXlBZ2VudHMiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJvbkJhY2siLCJhZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiX3JlZiRoYXNNb3JlQWdlbnRzIiwiaGFzTW9yZUFnZW50cyIsIl9yZWYkbG9hZGluZ01vcmVBZ2VudCIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJhYm1BZ2VudCIsInQiLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsImN1c3RvbUFnZW50cyIsImZpbHRlciIsImFnZW50IiwidHlwZSIsImlzX2RlbGV0ZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJtZW51T3BlbkZvckFnZW50SWQiLCJzZXRNZW51T3BlbkZvckFnZW50SWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFnZW50VG9EZWxldGUiLCJzZXRBZ2VudFRvRGVsZXRlIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGVBZ2VudCIsImNyZWF0ZSIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJjYW5FZGl0IiwiZWRpdCIsImNhbkRlbGV0ZSIsImNhblNob3dNZW51IiwiX3VzZVRvZ2dsZUZhdm9yaXRlIiwidG9nZ2xlRmF2b3JpdGUiLCJhbXBsaXR1ZGVFdmVudCIsImhhbmRsZUxvYWRNb3JlIiwiZGVsZXRlTW9kYWxDaGF0IiwidGl0bGUiLCJuYW1lIiwiaWQiLCJoYW5kbGVVc2VBZ2VudCIsIm5vcm1hbGl6ZVRleHQiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImdldENyZWF0ZWRBdExhYmVsIiwiY3JlYXRlZEF0IiwiY3JlYXRlZF9hdCIsImNyZWF0ZWRBdERhdGUiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiZGlmZk1zIiwibm93IiwiZGF5TXMiLCJkYXlzIiwiTWF0aCIsIm1heCIsImZsb29yIiwiaGFuZGxlT3BlbkVkaXRBZ2VudCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJrbm93bGVkZ2UiLCJnZW5lcmFsIiwiaXNPcGVuIiwiaGFuZGxlVG9nZ2xlRmF2b3JpdGUiLCJldmVudCIsImlzRmF2b3JpdGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInVwZGF0ZWRBZ2VudCIsInVuZGVmaW5lZCIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJucyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50Iiwib3Blbk1vZGFsIiwib3B0aW9uIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsIm9uU2Nyb2xsIiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwibmVhckJvdHRvbSIsImxlbmd0aCIsIiRoYXNBZ2VudHMiLCJjaGlsZHJlbiIsIm9uQ2xpY2siLCJtYXAiLCJfYWdlbnQkZW1vamkiLCJlbW9qaSIsInRyaW0iLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiaW50cm9kdWN0aW9uIiwiaXNfZmF2b3JpdGUiLCIkYWx3YXlzVmlzaWJsZSIsImZpbGwiLCJ2YXJpYW50IiwiY2xhc3NOYW1lIiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlBZ2VudHMvQ2hhdEFJTXlBZ2VudHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IGRlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyB1c2VUb2dnbGVGYXZvcml0ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHtcbiAgU0NNQUFjdGlvbnNSb3csXG4gIFNDTUFCb2R5LFxuICBTQ01BQ2FyZEJvZHksXG4gIFNDTUFDYXJkQnV0dG9uLFxuICBTQ01BQ2FyZEZvb3RlcixcbiAgU0NNQUNhcmRIZWFkZXIsXG4gIFNDTUFDYXJkSW50cm9UZXh0LFxuICBTQ01BQ2FyZE1lbnUsXG4gIFNDTUFDYXJkTWVudUl0ZW0sXG4gIFNDTUFDYXJkTWVudUl0ZW1zLFxuICBTQ01BRmF2b3JpdGVCdXR0b24sXG4gIFNDTUFDYXJkVGV4dCxcbiAgU0NNQUNhcmRUaXRsZSxcbiAgU0NNQUNhcmRUaXRsZUVtb2ppLFxuICBTQ01BQ2FyZFRpdGxlTmFtZSxcbiAgU0NNQUNhcmRzT3V0ZXIsXG4gIFNDTUFDYXJkc1JvdyxcbiAgU0NNQUVtcHR5U3RhdGVSb290LFxuICBTQ01BRW1wdHlTdGF0ZUNvbHVtbixcbiAgU0NNQUVtcHR5U3RhdGVUaXRsZUJsb2NrLFxuICBTQ01BRW1wdHlTdGF0ZVRpdGxlLFxuICBTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlLFxuICBTQ01BRW1wdHlTdGF0ZUJ1dHRvbixcbiAgU0NNQUtlYmFiQnV0dG9uLFxuICBTQ01BQ3JlYXRlTWFudWFsQnV0dG9uLFxuICBTQ01BQ3JlYXRlTWFudWFsQnV0dG9uVGV4dCxcbiAgU0NNQUxvYWRNb3JlV3JhcHBlcixcbiAgU0NNQU15QWdlbnRzQ29udGFpbmVyLFxuICBTQ01BVGl0bGUsXG4gIFNDTUFUaXRsZUlubmVyLFxuICBTQ01BVGl0bGVXcmFwLFxufSBmcm9tICcuL0NoYXRBSU15QWdlbnRzLnN0eWxlcydcbmltcG9ydCB7IE1BSUFJc29sb2dvIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5cbnR5cGUgQ2hhdEFJTXlBZ2VudHNQcm9wcyA9IHtcbiAgb25CYWNrOiAoKSA9PiB2b2lkXG4gIGFnZW50czogQWdlbnRbXVxuICBvbkRlbGV0ZUFnZW50PzogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGhhc01vcmVBZ2VudHM/OiBib29sZWFuXG4gIGxvYWRpbmdNb3JlQWdlbnRzPzogYm9vbGVhblxuICBvbkxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBvbkdvVG9NYWlha2VyPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU15QWdlbnRzID0gKHtcbiAgb25CYWNrLFxuICBhZ2VudHMsXG4gIG9uRGVsZXRlQWdlbnQsXG4gIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZSxcbiAgaGFzTW9yZUFnZW50cyA9IGZhbHNlLFxuICBsb2FkaW5nTW9yZUFnZW50cyA9IGZhbHNlLFxuICBvbkxvYWRNb3JlQWdlbnRzLFxuICBvbkdvVG9NYWlha2VyLFxufTogQ2hhdEFJTXlBZ2VudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUksIFNFQ1RJT05TLmFibUFnZW50XSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IHNlbGVjdEFnZW50LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgY3VzdG9tQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZ2VudCA9PiBhZ2VudC50eXBlID09PSAnY3VzdG9tJyAmJiAhYWdlbnQuaXNfZGVsZXRlZClcbiAgY29uc3QgW21lbnVPcGVuRm9yQWdlbnRJZCwgc2V0TWVudU9wZW5Gb3JBZ2VudElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthZ2VudFRvRGVsZXRlLCBzZXRBZ2VudFRvRGVsZXRlXSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBjYW5DcmVhdGVBZ2VudCA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5EZWxldGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuU2hvd01lbnUgPSBjYW5FZGl0IHx8IGNhbkRlbGV0ZVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IGFtcGxpdHVkZUV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IGhhbmRsZUxvYWRNb3JlID0gKCkgPT4ge1xuICAgIGlmICghb25Mb2FkTW9yZUFnZW50cyB8fCAhaGFzTW9yZUFnZW50cyB8fCBsb2FkaW5nTW9yZUFnZW50cykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9uTG9hZE1vcmVBZ2VudHMoKVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoYWdlbnRUb0RlbGV0ZSA/IHsgdGl0bGU6IGFnZW50VG9EZWxldGUubmFtZSwgaWQ6IGFnZW50VG9EZWxldGUuaWQgfSA6IG51bGwpLFxuICAgIFthZ2VudFRvRGVsZXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVXNlQWdlbnQgPSAoYWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQoYWdlbnQpXG4gICAgb25CYWNrKClcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZVRleHQgPSAodmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZVswXSB8fCAnJ1xuICAgIHJldHVybiB2YWx1ZSB8fCAnJ1xuICB9XG5cbiAgY29uc3QgZ2V0Q3JlYXRlZEF0TGFiZWwgPSAoYWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gKGFnZW50IGFzIEFnZW50ICYgeyBjcmVhdGVkX2F0Pzogc3RyaW5nIH0pLmNyZWF0ZWRfYXRcbiAgICBpZiAoIWNyZWF0ZWRBdCkgcmV0dXJuICcnXG5cbiAgICBjb25zdCBjcmVhdGVkQXREYXRlID0gbmV3IERhdGUoY3JlYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4oY3JlYXRlZEF0RGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gJydcblxuICAgIGNvbnN0IGRpZmZNcyA9IERhdGUubm93KCkgLSBjcmVhdGVkQXREYXRlLmdldFRpbWUoKVxuICAgIGNvbnN0IGRheU1zID0gMTAwMCAqIDYwICogNjAgKiAyNFxuICAgIGNvbnN0IGRheXMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRpZmZNcyAvIGRheU1zKSlcblxuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpXG4gICAgaWYgKGRheXMgPT09IDEpIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c09uZURheUFnbycpXG4gICAgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRGF5c0FnbycsIHsgZGF5cyB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlbkVkaXRBZ2VudCA9IChhZ2VudDogQWdlbnQpID0+IHtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgIGtub3dsZWRnZTogYWdlbnQ/Lmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFnZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFnZW50LmlkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4sIGFnZW50OiBBZ2VudCwgaXNGYXZvcml0ZTogYm9vbGVhbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICBhZ2VudC5pZCxcbiAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT8uKHVwZGF0ZWRBZ2VudClcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpc0Zhdm9yaXRlXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVBZ2VudChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICAgIG9uRGVsZXRlQWdlbnQ/LihjaGF0LmlkKVxuICAgICAgc2V0QWdlbnRUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQgPSAoKSA9PiB7XG4gICAgYW1wbGl0dWRlRXZlbnQoRVZFTlRTLm9wZW5Nb2RhbCwgeyBvcHRpb246ICdjcmVhdGVfYWdlbnQnIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgICBpZiAobWVudU9wZW5Gb3JBZ2VudElkKSB7XG4gICAgICAgIHNldE1lbnVPcGVuRm9yQWdlbnRJZChudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFttZW51T3BlbkZvckFnZW50SWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215LWFnZW50cy1zY3JvbGwtY29udGFpbmVyJylcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaWYgKCFoYXNNb3JlQWdlbnRzIHx8IGxvYWRpbmdNb3JlQWdlbnRzKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBjbGllbnRIZWlnaHQsIHNjcm9sbEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgICBjb25zdCBuZWFyQm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDQwXG4gICAgICBpZiAobmVhckJvdHRvbSkge1xuICAgICAgICBoYW5kbGVMb2FkTW9yZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpXG4gICAgfVxuICB9LCBbaGFzTW9yZUFnZW50cywgbG9hZGluZ01vcmVBZ2VudHMsIG9uTG9hZE1vcmVBZ2VudHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215LWFnZW50cy1zY3JvbGwtY29udGFpbmVyJylcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhaGFzTW9yZUFnZW50cyB8fCBsb2FkaW5nTW9yZUFnZW50cykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChjb250YWluZXIuc2Nyb2xsSGVpZ2h0IDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxKSB7XG4gICAgICBoYW5kbGVMb2FkTW9yZSgpXG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSwgW2N1c3RvbUFnZW50cy5sZW5ndGgsIGhhc01vcmVBZ2VudHMsIGxvYWRpbmdNb3JlQWdlbnRzLCBvbkxvYWRNb3JlQWdlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ01BTXlBZ2VudHNDb250YWluZXIgaWQ9XCJteS1hZ2VudHMtc2Nyb2xsLWNvbnRhaW5lclwiICRoYXNBZ2VudHM9eyEhY3VzdG9tQWdlbnRzLmxlbmd0aH0+XG4gICAgICA8TUFJQUlzb2xvZ28gLz5cblxuICAgICAgPFNDTUFCb2R5PlxuICAgICAgICB7Y3VzdG9tQWdlbnRzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNQVRpdGxlV3JhcD5cbiAgICAgICAgICAgIDxTQ01BVGl0bGVJbm5lcj5cbiAgICAgICAgICAgICAgPFNDTUFUaXRsZT57dCgnbWFya2V0cGxhY2UubXlBZ2VudHNSZWFkeVRpdGxlJyl9PC9TQ01BVGl0bGU+XG4gICAgICAgICAgICA8L1NDTUFUaXRsZUlubmVyPlxuICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50ID8gKFxuICAgICAgICAgICAgICA8U0NNQUFjdGlvbnNSb3c+XG4gICAgICAgICAgICAgICAgPFNDTUFDcmVhdGVNYW51YWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudH0+XG4gICAgICAgICAgICAgICAgICA8U0NNQUNyZWF0ZU1hbnVhbEJ1dHRvblRleHQ+Q3JlYXIgYWdlbnRlIG1hbnVhbG1lbnRlPC9TQ01BQ3JlYXRlTWFudWFsQnV0dG9uVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDTUFDcmVhdGVNYW51YWxCdXR0b24+XG4gICAgICAgICAgICAgIDwvU0NNQUFjdGlvbnNSb3c+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTUFUaXRsZVdyYXA+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtjdXN0b21BZ2VudHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxTQ01BQ2FyZHNPdXRlcj5cbiAgICAgICAgICAgIDxTQ01BQ2FyZHNSb3c+XG4gICAgICAgICAgICAgIHtjdXN0b21BZ2VudHMubWFwKGFnZW50ID0+IChcbiAgICAgICAgICAgICAgICA8U0NNQUNhcmRCdXR0b24ga2V5PXthZ2VudC5pZH0gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZVVzZUFnZW50KGFnZW50KX0+XG4gICAgICAgICAgICAgICAgICA8U0NNQUNhcmRIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHthZ2VudC5lbW9qaT8udHJpbSgpID8gPFNDTUFDYXJkVGl0bGVFbW9qaSBhcmlhLWhpZGRlbj57YWdlbnQuZW1vaml9PC9TQ01BQ2FyZFRpdGxlRW1vamk+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRUaXRsZU5hbWU+e2FnZW50Lm5hbWV9PC9TQ01BQ2FyZFRpdGxlTmFtZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7Y2FuU2hvd01lbnUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFLZWJhYkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdtYXJrZXRwbGFjZS5jYXJkTWVudUFyaWFMYWJlbCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lbnVPcGVuRm9yQWdlbnRJZChwcmV2ID0+IChwcmV2ID09PSBhZ2VudC5pZCA/IG51bGwgOiBhZ2VudC5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51RG90cyBjb2xvcj1cIiM5OTlcIiB3aWR0aD17MTV9IGhlaWdodD17MTV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEludHJvVGV4dD57bm9ybWFsaXplVGV4dChhZ2VudC5pbnRyb2R1Y3Rpb24pfTwvU0NNQUNhcmRJbnRyb1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRUZXh0PntnZXRDcmVhdGVkQXRMYWJlbChhZ2VudCkgfHwgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNGYWxsYmFja0RhdGUnKX08L1NDTUFDYXJkVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YWdlbnQuaXNfZmF2b3JpdGUgPyB0KCdhZ2VudHMucmVtb3ZlRmF2b3JpdGUnKSA6IHQoJ2FnZW50cy5hZGRGYXZvcml0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BRmF2b3JpdGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FnZW50LmlzX2Zhdm9yaXRlID8gdCgnYWdlbnRzLnJlbW92ZUZhdm9yaXRlJykgOiB0KCdhZ2VudHMuYWRkRmF2b3JpdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsd2F5c1Zpc2libGU9eyEhYWdlbnQuaXNfZmF2b3JpdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZVRvZ2dsZUZhdm9yaXRlKGV2ZW50LCBhZ2VudCwgISFhZ2VudC5pc19mYXZvcml0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2FnZW50LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJyNhNmE2YTYnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e2FnZW50LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXthZ2VudC5pc19mYXZvcml0ZSA/ICcnIDogJ3N0YXItZmF2b3JpdGUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFGYXZvcml0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvckFnZW50SWQgPT09IGFnZW50LmlkICYmIGNhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkRlbGV0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZ2VudFRvRGVsZXRlKGFnZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlQWdlbnQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FuRWRpdCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuRWRpdEFnZW50KGFnZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZWRpdEFnZW50JywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEJ1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTUFDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTUFDYXJkc091dGVyPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlVGl0bGU+e3QoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01BRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50XG4gICAgICAgICAgICAgICAgICAgID8gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlRGVzY3JpcHRpb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZURlc2NyaXB0aW9uTm9QZXJtJyl9XG4gICAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnQgJiYgb25Hb1RvTWFpYWtlciA/IChcbiAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBvbkdvVG9NYWlha2VyKCl9PlxuICAgICAgICAgICAgICAgIHt0KCdtYXJrZXRwbGFjZS5teUFnZW50c0VtcHR5U3RhdGVCdXR0b24nKX1cbiAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVSb290PlxuICAgICAgICApfVxuICAgICAgICB7bG9hZGluZ01vcmVBZ2VudHMgPyAoXG4gICAgICAgICAgPFNDTUFMb2FkTW9yZVdyYXBwZXI+XG4gICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgPC9TQ01BTG9hZE1vcmVXcmFwcGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NNQUJvZHk+XG4gICAgICB7ZGVsZXRlTW9kYWxDaGF0ID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldEFnZW50VG9EZWxldGUobnVsbCl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IGhhbmRsZUNvbmZpcm1EZWxldGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXtkZWxldGVNb2RhbENoYXR9XG4gICAgICAgICAgYWN0aW9uPVwiYWdlbnRcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TQ01BTXlBZ2VudHNDb250YWluZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDM0QsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFFbkQsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsbUJBQW1CLFFBQVEseURBQXlEO0FBQzdGLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxpQkFBaUIsUUFBUSxnQkFBZ0I7QUFDbEQsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBQzFELFNBQ0VDLGNBQWMsRUFDZEMsUUFBUSxFQUNSQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hCQyxtQkFBbUIsRUFDbkJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLEVBQ3BCQyxlQUFlLEVBQ2ZDLHNCQUFzQixFQUN0QkMsMEJBQTBCLEVBQzFCQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLGFBQWEsUUFDUix5QkFBeUI7QUFDaEMsU0FBU0MsV0FBVyxRQUFRLG1CQUFtQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFhL0MsT0FBTyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLElBQUEsRUFTQTtFQUFBLElBQUFDLGlCQUFBO0VBQUEsSUFSekJDLE1BQU0sR0FBQUYsSUFBQSxDQUFORSxNQUFNO0lBQ05DLE1BQU0sR0FBQUgsSUFBQSxDQUFORyxNQUFNO0lBQ05DLGFBQWEsR0FBQUosSUFBQSxDQUFiSSxhQUFhO0lBQ2JDLHFCQUFxQixHQUFBTCxJQUFBLENBQXJCSyxxQkFBcUI7SUFBQUMsa0JBQUEsR0FBQU4sSUFBQSxDQUNyQk8sYUFBYTtJQUFiQSxhQUFhLEdBQUFELGtCQUFBLGNBQUcsS0FBSyxHQUFBQSxrQkFBQTtJQUFBRSxxQkFBQSxHQUFBUixJQUFBLENBQ3JCUyxpQkFBaUI7SUFBakJBLGlCQUFpQixHQUFBRCxxQkFBQSxjQUFHLEtBQUssR0FBQUEscUJBQUE7SUFDekJFLGdCQUFnQixHQUFBVixJQUFBLENBQWhCVSxnQkFBZ0I7SUFDaEJDLGFBQWEsR0FBQVgsSUFBQSxDQUFiVyxhQUFhO0VBRWIsSUFBQUMsZUFBQSxHQUFjNUQsY0FBYyxDQUFDLENBQUNNLFFBQVEsQ0FBQ3VELE1BQU0sRUFBRXZELFFBQVEsQ0FBQ3dELFFBQVEsQ0FBQyxDQUFDO0lBQTFEQyxDQUFDLEdBQUFILGVBQUEsQ0FBREcsQ0FBQztFQUNULElBQU1DLElBQUksR0FBRzlELE9BQU8sQ0FBQyxDQUFDO0VBQ3RCLElBQUErRCxpQkFBQSxHQUErQ2hFLGdCQUFnQixDQUFDLENBQUM7SUFBekRpRSxXQUFXLEdBQUFELGlCQUFBLENBQVhDLFdBQVc7SUFBRUMsVUFBVSxHQUFBRixpQkFBQSxDQUFWRSxVQUFVO0lBQUVDLFNBQVMsR0FBQUgsaUJBQUEsQ0FBVEcsU0FBUztFQUMxQyxJQUFBQyxtQkFBQSxHQUF1RGpFLGtCQUFrQixDQUFDLENBQUM7SUFBbkVrRSxxQkFBcUIsR0FBQUQsbUJBQUEsQ0FBckJDLHFCQUFxQjtJQUFFQyxtQkFBbUIsR0FBQUYsbUJBQUEsQ0FBbkJFLG1CQUFtQjtFQUNsRCxJQUFNQyxZQUFZLEdBQUdyQixNQUFNLENBQUNzQixNQUFNLENBQUMsVUFBQUMsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDRCxLQUFLLENBQUNFLFVBQVU7RUFBQSxFQUFDO0VBQ3pGLElBQUFDLFNBQUEsR0FBb0RqRixRQUFRLENBQWdCLElBQUksQ0FBQztJQUFBa0YsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBMUVHLGtCQUFrQixHQUFBRixVQUFBO0lBQUVHLHFCQUFxQixHQUFBSCxVQUFBO0VBQ2hELElBQUFJLFVBQUEsR0FBMEN0RixRQUFRLENBQWUsSUFBSSxDQUFDO0lBQUF1RixVQUFBLEdBQUFKLGNBQUEsQ0FBQUcsVUFBQTtJQUEvREUsYUFBYSxHQUFBRCxVQUFBO0lBQUVFLGdCQUFnQixHQUFBRixVQUFBO0VBQ3RDLElBQU1HLGVBQWUsR0FBR3RCLElBQUksYUFBSkEsSUFBSSxnQkFBQWYsaUJBQUEsR0FBSmUsSUFBSSxDQUFFdUIsV0FBVyxjQUFBdEMsaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQnVDLFNBQVM7RUFDcEQsSUFBTUMsY0FBYyxHQUFHLENBQUMsRUFBQ0gsZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsQ0FBRUksTUFBTSxLQUFJLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyx3Q0FBd0M7RUFDckcsSUFBTUMsT0FBTyxHQUFHLENBQUMsRUFBQ1AsZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsQ0FBRVEsSUFBSSxLQUFJLENBQUMsQ0FBQ0gsTUFBTSxDQUFDQyx3Q0FBd0M7RUFDNUYsSUFBTUcsU0FBUyxHQUFHLENBQUMsRUFBQ1QsZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsVUFBUSxLQUFJLENBQUMsQ0FBQ0ssTUFBTSxDQUFDQyx3Q0FBd0M7RUFDaEcsSUFBTUksV0FBVyxHQUFHSCxPQUFPLElBQUlFLFNBQVM7RUFDeEMsSUFBQUUsa0JBQUEsR0FBMkJ6RixpQkFBaUIsQ0FBQyxDQUFDO0lBQXRDMEYsY0FBYyxHQUFBRCxrQkFBQSxDQUFkQyxjQUFjO0VBQ3RCLElBQU1DLGNBQWMsR0FBR3pGLFFBQVEsQ0FBQyxDQUFDO0VBRWpDLElBQU0wRixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUEsRUFBUztJQUMzQixJQUFJLENBQUMxQyxnQkFBZ0IsSUFBSSxDQUFDSCxhQUFhLElBQUlFLGlCQUFpQixFQUFFO01BQzVEO0lBQ0Y7SUFDQUMsZ0JBQWdCLENBQUMsQ0FBQztFQUNwQixDQUFDO0VBRUQsSUFBTTJDLGVBQWUsR0FBRzFHLE9BQU8sQ0FDN0I7SUFBQSxPQUFPeUYsYUFBYSxHQUFHO01BQUVrQixLQUFLLEVBQUVsQixhQUFhLENBQUNtQixJQUFJO01BQUVDLEVBQUUsRUFBRXBCLGFBQWEsQ0FBQ29CO0lBQUcsQ0FBQyxHQUFHLElBQUk7RUFBQSxDQUFDLEVBQ2xGLENBQUNwQixhQUFhLENBQ2hCLENBQUM7RUFFRCxJQUFNcUIsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJL0IsS0FBWSxFQUFLO0lBQ3ZDUCxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2hCQyxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztJQUNqQkYsV0FBVyxDQUFDUSxLQUFLLENBQUM7SUFDbEJ4QixNQUFNLENBQUMsQ0FBQztFQUNWLENBQUM7RUFFRCxJQUFNd0QsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJQyxLQUFnQyxFQUFLO0lBQzFELElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixLQUFLLENBQUMsRUFBRSxPQUFPQSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtJQUMvQyxPQUFPQSxLQUFLLElBQUksRUFBRTtFQUNwQixDQUFDO0VBRUQsSUFBTUcsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSXBDLEtBQVksRUFBSztJQUMxQyxJQUFNcUMsU0FBUyxHQUFJckMsS0FBSyxDQUFxQ3NDLFVBQVU7SUFDdkUsSUFBSSxDQUFDRCxTQUFTLEVBQUUsT0FBTyxFQUFFO0lBRXpCLElBQU1FLGFBQWEsR0FBRyxJQUFJQyxJQUFJLENBQUNILFNBQVMsQ0FBQztJQUN6QyxJQUFJSSxNQUFNLENBQUNDLEtBQUssQ0FBQ0gsYUFBYSxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFO0lBRXBELElBQU1DLE1BQU0sR0FBR0osSUFBSSxDQUFDSyxHQUFHLENBQUMsQ0FBQyxHQUFHTixhQUFhLENBQUNJLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELElBQU1HLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQU1DLElBQUksR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFRCxJQUFJLENBQUNFLEtBQUssQ0FBQ04sTUFBTSxHQUFHRSxLQUFLLENBQUMsQ0FBQztJQUVwRCxJQUFJQyxJQUFJLEtBQUssQ0FBQyxFQUFFLE9BQU8xRCxDQUFDLENBQUMsMkJBQTJCLENBQUM7SUFDckQsSUFBSTBELElBQUksS0FBSyxDQUFDLEVBQUUsT0FBTzFELENBQUMsQ0FBQywrQkFBK0IsQ0FBQztJQUN6RCxPQUFPQSxDQUFDLENBQUMsNkJBQTZCLEVBQUU7TUFBRTBELElBQUksRUFBSkE7SUFBSyxDQUFDLENBQUM7RUFDbkQsQ0FBQztFQUVELElBQU1JLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUluRCxLQUFZLEVBQUs7SUFDNUNvRCxRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUMsV0FBVyxDQUFDLDRCQUE0QixFQUFFO01BQzVDQyxNQUFNLEVBQUU7UUFDTkMsV0FBVyxFQUFFO1VBQ1hDLE1BQU0sRUFBRTtZQUNOQyxTQUFTLEVBQUUsSUFBSTtZQUNmQyxTQUFTLEVBQUUsQ0FBQTNELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFMkQsU0FBUyxLQUFJLEVBQUU7WUFDakNDLE9BQU8sRUFBRTtjQUNQL0IsSUFBSSxFQUFFN0IsS0FBSyxDQUFDNkIsSUFBSTtjQUNoQkMsRUFBRSxFQUFFOUIsS0FBSyxDQUFDOEI7WUFDWjtVQUNGLENBQUM7VUFDRCtCLE1BQU0sRUFBRTtRQUNWO01BQ0Y7SUFDRixDQUFDLENBQ0gsQ0FBQztJQUNEdEQscUJBQXFCLENBQUMsSUFBSSxDQUFDO0VBQzdCLENBQUM7RUFFRCxJQUFNdUQsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsS0FBMEMsRUFBRS9ELEtBQVksRUFBRWdFLFVBQW1CLEVBQUs7SUFDOUdELEtBQUssQ0FBQ0UsY0FBYyxDQUFDLENBQUM7SUFDdEJGLEtBQUssQ0FBQ0csZUFBZSxDQUFDLENBQUM7SUFFdkIxQyxjQUFjLENBQ1p4QixLQUFLLENBQUM4QixFQUFFLEVBQ1IsVUFBQXFDLFlBQVksRUFBSTtNQUNkeEYscUJBQXFCLGFBQXJCQSxxQkFBcUIsZUFBckJBLHFCQUFxQixDQUFHd0YsWUFBWSxDQUFDO0lBQ3ZDLENBQUMsRUFDREMsU0FBUyxFQUNUSixVQUNGLENBQUM7RUFDSCxDQUFDO0VBRUQsSUFBTUssbUJBQW1CO0lBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBT0MsSUFBb0I7TUFBQSxJQUFBQyxFQUFBO01BQUEsT0FBQUosbUJBQUEsQ0FBQUssSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUFBRixRQUFBLENBQUFDLElBQUE7WUFBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FFN0N2SixXQUFXLENBQUNrSixJQUFJLENBQUM3QyxFQUFFLENBQUM7VUFBQTtZQUMxQmxDLHFCQUFxQixDQUFDUCxDQUFDLENBQUMscUJBQXFCLEVBQUU7Y0FBRTRGLEVBQUUsRUFBRXJKLFFBQVEsQ0FBQ3dEO1lBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUVWLGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUdpRyxJQUFJLENBQUM3QyxFQUFFLENBQUM7WUFDeEJuQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDdEJKLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUFBdUUsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtZQUFBRixRQUFBLENBQUFDLElBQUE7WUFBQUgsRUFBQSxHQUFBRSxRQUFBO1lBRTNCakYsbUJBQW1CLENBQUNSLENBQUMsQ0FBQyxtQkFBbUIsRUFBRTtjQUFFNEYsRUFBRSxFQUFFckosUUFBUSxDQUFDd0Q7WUFBUyxDQUFDLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBMEYsUUFBQSxDQUFBSSxJQUFBO1FBQUE7TUFBQSxHQUFBUixPQUFBO0lBQUEsQ0FFekU7SUFBQSxnQkFWS0wsbUJBQW1CQSxDQUFBYyxFQUFBO01BQUEsT0FBQWIsS0FBQSxDQUFBYyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEdBVXhCO0VBRUQsSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQSxFQUFTO0lBQ2xDN0QsY0FBYyxDQUFDMUYsTUFBTSxDQUFDd0osU0FBUyxFQUFFO01BQUVDLE1BQU0sRUFBRTtJQUFlLENBQUMsQ0FBQztJQUM1RHBDLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJQyxXQUFXLENBQUMsNEJBQTRCLEVBQUU7TUFDNUNDLE1BQU0sRUFBRTtRQUNOQyxXQUFXLEVBQUU7VUFDWEMsTUFBTSxFQUFFO1lBQ05DLFNBQVMsRUFBRTtVQUNiLENBQUM7VUFDREcsTUFBTSxFQUFFO1FBQ1Y7TUFDRjtJQUNGLENBQUMsQ0FDSCxDQUFDO0VBQ0gsQ0FBQztFQUVEN0ksU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNeUssa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFTO01BQy9CLElBQUluRixrQkFBa0IsRUFBRTtRQUN0QkMscUJBQXFCLENBQUMsSUFBSSxDQUFDO01BQzdCO0lBQ0YsQ0FBQztJQUVENkMsUUFBUSxDQUFDc0MsZ0JBQWdCLENBQUMsT0FBTyxFQUFFRCxrQkFBa0IsQ0FBQztJQUN0RCxPQUFPLFlBQU07TUFDWHJDLFFBQVEsQ0FBQ3VDLG1CQUFtQixDQUFDLE9BQU8sRUFBRUYsa0JBQWtCLENBQUM7SUFDM0QsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDbkYsa0JBQWtCLENBQUMsQ0FBQztFQUV4QnRGLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTTRLLFNBQVMsR0FBR3hDLFFBQVEsQ0FBQ3lDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQztJQUN2RSxJQUFJLENBQUNELFNBQVMsRUFBRTtNQUNkLE9BQU94QixTQUFTO0lBQ2xCO0lBRUEsSUFBTTBCLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDakgsYUFBYSxJQUFJRSxpQkFBaUIsRUFBRTtNQUN6QyxJQUFRZ0gsU0FBUyxHQUFpQ0gsU0FBUyxDQUFuREcsU0FBUztRQUFFQyxZQUFZLEdBQW1CSixTQUFTLENBQXhDSSxZQUFZO1FBQUVDLFlBQVksR0FBS0wsU0FBUyxDQUExQkssWUFBWTtNQUM3QyxJQUFNQyxVQUFVLEdBQUdILFNBQVMsR0FBR0MsWUFBWSxJQUFJQyxZQUFZLEdBQUcsRUFBRTtNQUNoRSxJQUFJQyxVQUFVLEVBQUU7UUFDZHhFLGNBQWMsQ0FBQyxDQUFDO01BQ2xCO0lBQ0YsQ0FBQztJQUVEa0UsU0FBUyxDQUFDRixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVJLFFBQVEsQ0FBQztJQUM5QyxPQUFPLFlBQU07TUFDWEYsU0FBUyxDQUFDRCxtQkFBbUIsQ0FBQyxRQUFRLEVBQUVHLFFBQVEsQ0FBQztJQUNuRCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNqSCxhQUFhLEVBQUVFLGlCQUFpQixFQUFFQyxnQkFBZ0IsQ0FBQyxDQUFDO0VBRXhEaEUsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNNEssU0FBUyxHQUFHeEMsUUFBUSxDQUFDeUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDO0lBQ3ZFLElBQUksQ0FBQ0QsU0FBUyxJQUFJLENBQUMvRyxhQUFhLElBQUlFLGlCQUFpQixFQUFFO01BQ3JELE9BQU9xRixTQUFTO0lBQ2xCO0lBRUEsSUFBSXdCLFNBQVMsQ0FBQ0ssWUFBWSxJQUFJTCxTQUFTLENBQUNJLFlBQVksR0FBRyxDQUFDLEVBQUU7TUFDeER0RSxjQUFjLENBQUMsQ0FBQztJQUNsQjtJQUNBLE9BQU8wQyxTQUFTO0VBQ2xCLENBQUMsRUFBRSxDQUFDdEUsWUFBWSxDQUFDcUcsTUFBTSxFQUFFdEgsYUFBYSxFQUFFRSxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUMsQ0FBQztFQUU3RSxvQkFDRVosS0FBQSxDQUFDUixxQkFBcUI7SUFBQ2tFLEVBQUUsRUFBQyw0QkFBNEI7SUFBQ3NFLFVBQVUsRUFBRSxDQUFDLENBQUN0RyxZQUFZLENBQUNxRyxNQUFPO0lBQUFFLFFBQUEsZ0JBQ3ZGbkksSUFBQSxDQUFDRixXQUFXLElBQUUsQ0FBQyxlQUVmSSxLQUFBLENBQUNsQyxRQUFRO01BQUFtSyxRQUFBLEdBQ052RyxZQUFZLENBQUNxRyxNQUFNLGdCQUNsQi9ILEtBQUEsQ0FBQ0wsYUFBYTtRQUFBc0ksUUFBQSxnQkFDWm5JLElBQUEsQ0FBQ0osY0FBYztVQUFBdUksUUFBQSxlQUNibkksSUFBQSxDQUFDTCxTQUFTO1lBQUF3SSxRQUFBLEVBQUVoSCxDQUFDLENBQUMsZ0NBQWdDO1VBQUMsQ0FBWTtRQUFDLENBQzlDLENBQUMsRUFDaEIwQixjQUFjLGdCQUNiN0MsSUFBQSxDQUFDakMsY0FBYztVQUFBb0ssUUFBQSxlQUNibkksSUFBQSxDQUFDVCxzQkFBc0I7WUFBQ3dDLElBQUksRUFBQyxRQUFRO1lBQUNxRyxPQUFPLEVBQUVoQixxQkFBc0I7WUFBQWUsUUFBQSxlQUNuRW5JLElBQUEsQ0FBQ1IsMEJBQTBCO2NBQUEySSxRQUFBLEVBQUM7WUFBd0IsQ0FBNEI7VUFBQyxDQUMzRDtRQUFDLENBQ1gsQ0FBQyxHQUNmLElBQUk7TUFBQSxDQUNLLENBQUMsR0FDZCxJQUFJLEVBRVB2RyxZQUFZLENBQUNxRyxNQUFNLGdCQUNsQmpJLElBQUEsQ0FBQ2xCLGNBQWM7UUFBQXFKLFFBQUEsZUFDYm5JLElBQUEsQ0FBQ2pCLFlBQVk7VUFBQW9KLFFBQUEsRUFDVnZHLFlBQVksQ0FBQ3lHLEdBQUcsQ0FBQyxVQUFBdkcsS0FBSztZQUFBLElBQUF3RyxZQUFBO1lBQUEsb0JBQ3JCcEksS0FBQSxDQUFDaEMsY0FBYztjQUFnQjZELElBQUksRUFBQyxRQUFRO2NBQUNxRyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtnQkFBQSxPQUFRdkUsY0FBYyxDQUFDL0IsS0FBSyxDQUFDO2NBQUEsQ0FBQztjQUFBcUcsUUFBQSxnQkFDaEZqSSxLQUFBLENBQUM5QixjQUFjO2dCQUFBK0osUUFBQSxnQkFDYmpJLEtBQUEsQ0FBQ3ZCLGFBQWE7a0JBQUF3SixRQUFBLEdBQ1gsQ0FBQUcsWUFBQSxHQUFBeEcsS0FBSyxDQUFDeUcsS0FBSyxjQUFBRCxZQUFBLGVBQVhBLFlBQUEsQ0FBYUUsSUFBSSxDQUFDLENBQUMsZ0JBQUd4SSxJQUFBLENBQUNwQixrQkFBa0I7b0JBQUMsbUJBQVc7b0JBQUF1SixRQUFBLEVBQUVyRyxLQUFLLENBQUN5RztrQkFBSyxDQUFxQixDQUFDLEdBQUcsSUFBSSxlQUNoR3ZJLElBQUEsQ0FBQ25CLGlCQUFpQjtvQkFBQXNKLFFBQUEsRUFBRXJHLEtBQUssQ0FBQzZCO2tCQUFJLENBQW9CLENBQUM7Z0JBQUEsQ0FDdEMsQ0FBQyxFQUNmUCxXQUFXLGdCQUNWcEQsSUFBQSxDQUFDVixlQUFlO2tCQUNkeUMsSUFBSSxFQUFDLFFBQVE7a0JBQ2IsY0FBWVosQ0FBQyxDQUFDLCtCQUErQixDQUFFO2tCQUMvQ2lILE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFdkMsS0FBSyxFQUFJO29CQUNoQkEsS0FBSyxDQUFDRSxjQUFjLENBQUMsQ0FBQztvQkFDdEJGLEtBQUssQ0FBQ0csZUFBZSxDQUFDLENBQUM7b0JBQ3ZCM0QscUJBQXFCLENBQUMsVUFBQXdFLElBQUk7c0JBQUEsT0FBS0EsSUFBSSxLQUFLL0UsS0FBSyxDQUFDOEIsRUFBRSxHQUFHLElBQUksR0FBRzlCLEtBQUssQ0FBQzhCLEVBQUU7b0JBQUEsQ0FBQyxDQUFDO2tCQUN0RSxDQUFFO2tCQUFBdUUsUUFBQSxlQUVGbkksSUFBQSxDQUFDL0MsUUFBUTtvQkFBQ3dMLEtBQUssRUFBQyxNQUFNO29CQUFDQyxLQUFLLEVBQUUsRUFBRztvQkFBQ0MsTUFBTSxFQUFFO2tCQUFHLENBQUU7Z0JBQUMsQ0FDakMsQ0FBQyxHQUNoQixJQUFJO2NBQUEsQ0FDTSxDQUFDLGVBQ2pCekksS0FBQSxDQUFDakMsWUFBWTtnQkFBQWtLLFFBQUEsZ0JBQ1huSSxJQUFBLENBQUMzQixpQkFBaUI7a0JBQUE4SixRQUFBLEVBQUVyRSxhQUFhLENBQUNoQyxLQUFLLENBQUM4RyxZQUFZO2dCQUFDLENBQW9CLENBQUMsZUFDMUUxSSxLQUFBLENBQUMvQixjQUFjO2tCQUFBZ0ssUUFBQSxnQkFDYm5JLElBQUEsQ0FBQ3RCLFlBQVk7b0JBQUF5SixRQUFBLEVBQUVqRSxpQkFBaUIsQ0FBQ3BDLEtBQUssQ0FBQyxJQUFJWCxDQUFDLENBQUMsa0NBQWtDO2tCQUFDLENBQWUsQ0FBQyxlQUNoR25CLElBQUEsQ0FBQzdDLE9BQU87b0JBQUN1RyxLQUFLLEVBQUU1QixLQUFLLENBQUMrRyxXQUFXLEdBQUcxSCxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBR0EsQ0FBQyxDQUFDLG9CQUFvQixDQUFFO29CQUFBZ0gsUUFBQSxlQUN2Rm5JLElBQUEsQ0FBQ3ZCLGtCQUFrQjtzQkFDakJzRCxJQUFJLEVBQUMsUUFBUTtzQkFDYixjQUFZRCxLQUFLLENBQUMrRyxXQUFXLEdBQUcxSCxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBR0EsQ0FBQyxDQUFDLG9CQUFvQixDQUFFO3NCQUNyRjJILGNBQWMsRUFBRSxDQUFDLENBQUNoSCxLQUFLLENBQUMrRyxXQUFZO3NCQUNwQ1QsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUV2QyxLQUFLO3dCQUFBLE9BQUlELG9CQUFvQixDQUFDQyxLQUFLLEVBQUUvRCxLQUFLLEVBQUUsQ0FBQyxDQUFDQSxLQUFLLENBQUMrRyxXQUFXLENBQUM7c0JBQUEsQ0FBQztzQkFBQVYsUUFBQSxlQUUxRW5JLElBQUEsQ0FBQzlDLElBQUk7d0JBQ0h3TCxLQUFLLEVBQUUsRUFBRzt3QkFDVkMsTUFBTSxFQUFFLEVBQUc7d0JBQ1hGLEtBQUssRUFBRTNHLEtBQUssQ0FBQytHLFdBQVcsR0FBRyxTQUFTLEdBQUcsU0FBVTt3QkFDakRFLElBQUksRUFBRWpILEtBQUssQ0FBQytHLFdBQVcsR0FBRyxTQUFTLEdBQUcsTUFBTzt3QkFDN0NHLE9BQU8sRUFBQyxPQUFPO3dCQUNmQyxTQUFTLEVBQUVuSCxLQUFLLENBQUMrRyxXQUFXLEdBQUcsRUFBRSxHQUFHO3NCQUFxQixDQUMxRDtvQkFBQyxDQUNnQjtrQkFBQyxDQUNkLENBQUM7Z0JBQUEsQ0FDSSxDQUFDO2NBQUEsQ0FDTCxDQUFDLEVBQ2R6RyxrQkFBa0IsS0FBS04sS0FBSyxDQUFDOEIsRUFBRSxJQUFJUixXQUFXLGdCQUM3Q3BELElBQUEsQ0FBQzFCLFlBQVk7Z0JBQ1g4SixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRXZDLEtBQUssRUFBSTtrQkFDaEJBLEtBQUssQ0FBQ0UsY0FBYyxDQUFDLENBQUM7a0JBQ3RCRixLQUFLLENBQUNHLGVBQWUsQ0FBQyxDQUFDO2dCQUN6QixDQUFFO2dCQUFBbUMsUUFBQSxlQUVGakksS0FBQSxDQUFDMUIsaUJBQWlCO2tCQUFBMkosUUFBQSxHQUNmaEYsU0FBUyxnQkFDUm5ELElBQUEsQ0FBQ3pCLGdCQUFnQjtvQkFDZndELElBQUksRUFBQyxRQUFRO29CQUNicUcsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtzQkFDYjNGLGdCQUFnQixDQUFDWCxLQUFLLENBQUM7b0JBQ3pCLENBQUU7b0JBQUFxRyxRQUFBLEVBRURoSCxDQUFDLENBQUMsYUFBYSxFQUFFO3NCQUFFNEYsRUFBRSxFQUFFckosUUFBUSxDQUFDd0Q7b0JBQVMsQ0FBQztrQkFBQyxDQUM1QixDQUFDLEdBQ2pCLElBQUksRUFDUCtCLE9BQU8sZ0JBQ05qRCxJQUFBLENBQUN6QixnQkFBZ0I7b0JBQ2Z3RCxJQUFJLEVBQUMsUUFBUTtvQkFDYnFHLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7c0JBQ2JuRCxtQkFBbUIsQ0FBQ25ELEtBQUssQ0FBQztvQkFDNUIsQ0FBRTtvQkFBQXFHLFFBQUEsRUFFRGhILENBQUMsQ0FBQyxXQUFXLEVBQUU7c0JBQUU0RixFQUFFLEVBQUVySixRQUFRLENBQUN3RDtvQkFBUyxDQUFDO2tCQUFDLENBQzFCLENBQUMsR0FDakIsSUFBSTtnQkFBQSxDQUNTO2NBQUMsQ0FDUixDQUFDLEdBQ2IsSUFBSTtZQUFBLEdBekVXWSxLQUFLLENBQUM4QixFQTBFWCxDQUFDO1VBQUEsQ0FDbEI7UUFBQyxDQUNVO01BQUMsQ0FDRCxDQUFDLGdCQUVqQjFELEtBQUEsQ0FBQ2xCLGtCQUFrQjtRQUFBbUosUUFBQSxnQkFDakJuSSxJQUFBLENBQUNmLG9CQUFvQjtVQUFBa0osUUFBQSxlQUNuQmpJLEtBQUEsQ0FBQ2hCLHdCQUF3QjtZQUFBaUosUUFBQSxnQkFDdkJuSSxJQUFBLENBQUNiLG1CQUFtQjtjQUFBZ0osUUFBQSxFQUFFaEgsQ0FBQyxDQUFDLHFDQUFxQztZQUFDLENBQXNCLENBQUMsZUFDckZuQixJQUFBLENBQUNaLHNCQUFzQjtjQUFBK0ksUUFBQSxFQUNwQnRGLGNBQWMsR0FDWDFCLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxHQUM5Q0EsQ0FBQyxDQUFDLGlEQUFpRDtZQUFDLENBQ2xDLENBQUM7VUFBQSxDQUNEO1FBQUMsQ0FDUCxDQUFDLEVBQ3RCMEIsY0FBYyxJQUFJOUIsYUFBYSxnQkFDOUJmLElBQUEsQ0FBQ1gsb0JBQW9CO1VBQUMwQyxJQUFJLEVBQUMsUUFBUTtVQUFDcUcsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRckgsYUFBYSxDQUFDLENBQUM7VUFBQSxDQUFDO1VBQUFvSCxRQUFBLEVBQ2hFaEgsQ0FBQyxDQUFDLHNDQUFzQztRQUFDLENBQ3RCLENBQUMsR0FDckIsSUFBSTtNQUFBLENBQ1UsQ0FDckIsRUFDQU4saUJBQWlCLGdCQUNoQmIsSUFBQSxDQUFDUCxtQkFBbUI7UUFBQTBJLFFBQUEsZUFDbEJuSSxJQUFBLENBQUNyQyxNQUFNO1VBQUN1TCxJQUFJLEVBQUM7UUFBTyxDQUFFO01BQUMsQ0FDSixDQUFDLEdBQ3BCLElBQUk7SUFBQSxDQUNBLENBQUMsRUFDVnpGLGVBQWUsZ0JBQ2R6RCxJQUFBLENBQUN2QyxtQkFBbUI7TUFDbEIwTCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVExRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDO01BQ3RDMkcsUUFBUSxFQUFFO1FBQ1JDLG1CQUFtQixFQUFFbEQ7TUFDdkIsQ0FBRTtNQUNGTSxJQUFJLEVBQUVoRCxlQUFnQjtNQUN0QjZGLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNhLENBQUM7QUFFNUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==