@digital-ai/dot-components 2.4.0 → 2.5.1

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 (69) hide show
  1. package/CHANGE_LOG.md +44 -11
  2. package/README.md +15 -0
  3. package/index.esm.js +523 -407
  4. package/index.umd.js +706 -574
  5. package/lib/Typography.stories.d.ts +4 -0
  6. package/lib/components/accordion/Accordion.stories.d.ts +8 -0
  7. package/lib/components/action-toolbar/ActionToolbar.stories.d.ts +5 -0
  8. package/lib/components/alert-banner/AlertBanner.stories.d.ts +5 -0
  9. package/lib/components/app-switcher/AppSwitcher.d.ts +2 -1
  10. package/lib/components/app-switcher/utils/helpers.d.ts +1 -1
  11. package/lib/components/app-toolbar/AppToolbar.stories.d.ts +8 -0
  12. package/lib/components/auto-complete/AutoComplete.d.ts +3 -3
  13. package/lib/components/auto-complete/AutoComplete.stories.d.ts +22 -0
  14. package/lib/components/avatar/Avatar.stories.d.ts +7 -0
  15. package/lib/components/avatar-group/AvatarGroup.stories.d.ts +5 -0
  16. package/lib/components/badge/Badge.stories.d.ts +8 -0
  17. package/lib/components/breadcrumbs/Breadcrumbs.stories.d.ts +5 -0
  18. package/lib/components/button/Button.stories.d.ts +11 -0
  19. package/lib/components/button/CopyButton.stories.d.ts +5 -0
  20. package/lib/components/button/CopyButton.styles.d.ts +1 -1
  21. package/lib/components/button/IconButton.stories.d.ts +10 -0
  22. package/lib/components/button-toggle/ButtonToggle.stories.d.ts +11 -0
  23. package/lib/components/card/Card.stories.d.ts +6 -0
  24. package/lib/components/checkbox/Checkbox.stories.d.ts +9 -0
  25. package/lib/components/checkbox/CheckboxGroup.stories.d.ts +6 -0
  26. package/lib/components/chip/Chip.stories.d.ts +8 -0
  27. package/lib/components/confirmation-dialog/ConfirmationDialog.stories.d.ts +6 -0
  28. package/lib/components/css-grid/CssGrid.stories.d.ts +7 -0
  29. package/lib/components/dialog/Dialog.stories.d.ts +5 -0
  30. package/lib/components/divider/Divider.stories.d.ts +6 -0
  31. package/lib/components/draggable-list/DraggableList.stories.d.ts +10 -0
  32. package/lib/components/drawer/Drawer.d.ts +1 -0
  33. package/lib/components/drawer/Drawer.stories.d.ts +9 -0
  34. package/lib/components/dynamic-form/DynamicForm.stories.d.ts +5 -0
  35. package/lib/components/dynamic-form/utils/helpers.d.ts +1 -1
  36. package/lib/components/empty-state/EmptyState.stories.d.ts +5 -0
  37. package/lib/components/file-upload/FileUpload.stories.d.ts +8 -0
  38. package/lib/components/form/Form.stories.d.ts +5 -0
  39. package/lib/components/form-group/FormGroup.stories.d.ts +5 -0
  40. package/lib/components/helpers.d.ts +1 -0
  41. package/lib/components/icon/Icon.stories.d.ts +5 -0
  42. package/lib/components/inline-edit/InlineEdit.stories.d.ts +15 -0
  43. package/lib/components/input-form-fields/InputSelect.stories.d.ts +10 -0
  44. package/lib/components/input-form-fields/InputText.stories.d.ts +14 -0
  45. package/lib/components/linear-progress/LinearProgress.stories.d.ts +13 -0
  46. package/lib/components/link/Link.stories.d.ts +6 -0
  47. package/lib/components/list/List.stories.d.ts +6 -0
  48. package/lib/components/menu/Menu.stories.d.ts +9 -0
  49. package/lib/components/navigation-rail/NavigationRail.stories.d.ts +7 -0
  50. package/lib/components/pill/Pill.stories.d.ts +5 -0
  51. package/lib/components/popper/Popper.stories.d.ts +6 -0
  52. package/lib/components/progress/Progress.stories.d.ts +9 -0
  53. package/lib/components/progress-button/ProgressButton.stories.d.ts +5 -0
  54. package/lib/components/radio/RadioButton.stories.d.ts +5 -0
  55. package/lib/components/radio/RadioGroup.stories.d.ts +7 -0
  56. package/lib/components/search-input/SearchInput.d.ts +11 -0
  57. package/lib/components/search-input/SearchInput.styles.d.ts +2 -0
  58. package/lib/components/sidebar/Sidebar.stories.d.ts +8 -0
  59. package/lib/components/skeleton/Skeleton.stories.d.ts +5 -0
  60. package/lib/components/snackbar/Snackbar.stories.d.ts +6 -0
  61. package/lib/components/split-button/SplitButton.stories.d.ts +9 -0
  62. package/lib/components/switch/Switch.stories.d.ts +12 -0
  63. package/lib/components/table/Table.stories.d.ts +10 -0
  64. package/lib/components/table/TablePagination.stories.d.ts +5 -0
  65. package/lib/components/tabs/Tabs.stories.d.ts +6 -0
  66. package/lib/components/tooltip/Tooltip.stories.d.ts +5 -0
  67. package/lib/components/truncate-with-tooltip/TruncateWithTooltip.stories.d.ts +8 -0
  68. package/lib/components/typography/Typography.stories.d.ts +7 -0
  69. package/package.json +3 -3
package/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useState, useEffect, useRef, useMemo, useContext, createContext, useCallback, forwardRef, Fragment as Fragment$1, createElement } from 'react';
4
- import { Tooltip, Icon, Typography, Accordion, AccordionSummary, AccordionDetails, AccordionActions, InputAdornment, InputLabel, TextField, Toolbar, Alert, Fade, Avatar, IconButton, Link, Drawer, Button, darken, List, ListItem, CircularProgress, Popper, MenuList, MenuItem, Paper, ClickAwayListener, ListItemIcon, Collapse, ListSubheader, Divider, ListItemText, Badge, useMediaQuery, Autocomplete, Chip, AvatarGroup, Breadcrumbs, ToggleButtonGroup, ToggleButton, Card, CardContent, CardHeader, FormControlLabel, Checkbox, FormControl, FormGroup, FormLabel, FormHelperText, Dialog, DialogContent, DialogActions, useTheme as useTheme$1, RadioGroup, Radio, Switch, Skeleton, Snackbar, ButtonGroup, TablePagination, TableContainer, TableCell, TableRow, TableBody, TableSortLabel, TableHead, Table, Tabs, Tab, LinearProgress } from '@mui/material';
3
+ import { useState, useEffect, useRef, useMemo, useContext, createContext, forwardRef, useCallback, Fragment as Fragment$1, createElement } from 'react';
4
+ import { Tooltip, Icon, Typography, Accordion, AccordionSummary, AccordionDetails, AccordionActions, InputAdornment, InputLabel, TextField, Toolbar, Alert, Fade, Avatar, Button, darken, IconButton, Link, Drawer, List, ListItem, CircularProgress, Popper, MenuList, MenuItem, Paper, ClickAwayListener, ListItemIcon, Collapse, ListSubheader, Divider, ListItemText, Badge, useMediaQuery, Autocomplete, Chip, AvatarGroup, Breadcrumbs, ToggleButtonGroup, ToggleButton, Card, CardContent, CardHeader, FormControlLabel, Checkbox, FormControl, FormGroup, FormLabel, FormHelperText, Dialog, DialogContent, DialogActions, useTheme as useTheme$1, RadioGroup, Radio, Switch, Skeleton, Snackbar, ButtonGroup, TablePagination, TableContainer, TableCell, TableRow, TableBody, TableSortLabel, TableHead, Table, Tabs, Tab, LinearProgress } from '@mui/material';
5
5
  import '@digital-ai/dot-icons';
6
6
  import styled, { css, createGlobalStyle, ThemeProvider as ThemeProvider$1, keyframes } from 'styled-components';
7
7
  import { createTheme, ThemeProvider, alpha, useTheme } from '@mui/material/styles';
@@ -43,11 +43,11 @@ const DotTooltip = ({
43
43
  }), void 0) : children;
44
44
  };
45
45
 
46
- const rootClassName$11 = 'dot-icon';
46
+ const rootClassName$12 = 'dot-icon';
47
47
  const StyledIcon = styled(Icon).withConfig({
48
48
  displayName: "Iconstyles__StyledIcon",
49
49
  componentId: "st0ybo-0"
50
- })(["", ""], () => css(["&.", "{font-size:20px;&.MuiIcon-fontSizeLarge{font-size:28px;height:35px;width:35px;i{height:28px;}}&.MuiIcon-fontSizeSmall{font-size:18px;i{height:18px;}}i{height:20px;}}"], rootClassName$11));
50
+ })(["", ""], () => css(["&.", "{font-size:20px;&.MuiIcon-fontSizeLarge{font-size:28px;height:35px;width:35px;i{height:28px;}}&.MuiIcon-fontSizeSmall{font-size:18px;i{height:18px;}}i{height:20px;}}"], rootClassName$12));
51
51
 
52
52
  const DotIcon = ({
53
53
  ariaLabel,
@@ -57,7 +57,7 @@ const DotIcon = ({
57
57
  iconId,
58
58
  tooltip
59
59
  }) => {
60
- const rootClasses = useStylesWithRootClass(rootClassName$11, className);
60
+ const rootClasses = useStylesWithRootClass(rootClassName$12, className);
61
61
  return jsx(DotTooltip, Object.assign({
62
62
  title: tooltip
63
63
  }, {
@@ -106,7 +106,7 @@ const DotTypography = ({
106
106
  }), void 0);
107
107
  };
108
108
 
109
- const rootClassName$10 = 'dot-accordion';
109
+ const rootClassName$11 = 'dot-accordion';
110
110
  const summaryClassName = 'dot-accordion-summary';
111
111
  const detailClassName = 'dot-accordion-details';
112
112
  const StyledAccordion = styled(Accordion).withConfig({
@@ -114,7 +114,7 @@ const StyledAccordion = styled(Accordion).withConfig({
114
114
  componentId: "sc-1amx4r3-0"
115
115
  })(["", ""], ({
116
116
  theme
117
- }) => css(["&.", " .", "{align-items:center;display:flex;&.Mui-expanded{border-top:1px solid rgba(0,0,0,0.12);&:before{opacity:1;}}.MuiAccordionSummary-content{align-items:center;gap:", ";width:calc(100% - ", ");.dot-tooltip{overflow:hidden;}}.MuiAccordionSummary-expandIconWrapper{padding:", ";margin-right:", ";}.MuiTypography-root{margin-bottom:0;}.MuiTypography-body1{padding:2px 0;}}"], rootClassName$10, summaryClassName, theme.spacing(1), theme.spacing(5), theme.spacing(1.5), theme.spacing(-1.5)));
117
+ }) => css(["&.", " .", "{align-items:center;display:flex;&.Mui-expanded{border-top:1px solid rgba(0,0,0,0.12);&:before{opacity:1;}}.MuiAccordionSummary-content{align-items:center;gap:", ";width:calc(100% - ", ");.dot-tooltip{overflow:hidden;}}.MuiAccordionSummary-expandIconWrapper{padding:", ";margin-right:", ";}.MuiTypography-root{margin-bottom:0;}.MuiTypography-body1{padding:2px 0;}}"], rootClassName$11, summaryClassName, theme.spacing(1), theme.spacing(5), theme.spacing(1.5), theme.spacing(-1.5)));
118
118
 
119
119
  const DotAccordion = ({
120
120
  actions,
@@ -131,7 +131,7 @@ const DotAccordion = ({
131
131
  summary,
132
132
  noWrap: _noWrap = true
133
133
  }) => {
134
- const rootClasses = useStylesWithRootClass(rootClassName$10, className);
134
+ const rootClasses = useStylesWithRootClass(rootClassName$11, className);
135
135
  const [elevation, setElevation] = useState();
136
136
  useEffect(() => {
137
137
  if (onChange && expanded === undefined) {
@@ -184,7 +184,7 @@ const DotAccordion = ({
184
184
  }), void 0);
185
185
  };
186
186
 
187
- const rootClassName$$ = 'dot-text-field';
187
+ const rootClassName$10 = 'dot-text-field';
188
188
  const rootSelectClassName = 'dot-select-field';
189
189
  const labelClassName = 'dot-input-label';
190
190
  const errorClassName = 'dot-error';
@@ -212,15 +212,15 @@ const StyledTextField = styled(TextField).withConfig({
212
212
  })(["", ""], ({
213
213
  theme,
214
214
  InputProps
215
- }) => css(["&.", "{.MuiInputBase-root{margin-bottom:0;}.MuiInputBase-input{box-sizing:content-box;}.MuiOutlinedInput-input{padding:", ";}.MuiInputBase-inputSizeSmall{padding-top:10.5px;padding-bottom:10.5px;&:not(textarea){height:19px;}}.MuiInputBase-inputMultiline{padding:0;}}&.", ",&.", "{.", "{color:", ";.dot-icon i{margin-top:-2px;}}.MuiInputBase-root{margin-bottom:0;}.MuiInputBase-inputSizeSmall:not(textarea){height:19px;padding-top:10.5px;padding-bottom:10.5px;}select.dot-select{padding-left:", ";}.MuiSelect-select:focus{background-color:transparent;}.MuiSelect-icon{right:", ";}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiFormLabel-root.Mui-focused{color:", ";}.", " .dot-icon{color:", ";}}&.", "{.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", " .dot-icon{color:", ";}}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", " .dot-icon{color:", ";}}.MuiOutlinedInput-adornedStart{padding-left:12px;&.", " .", "{border-color:", ";}}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.MuiInputBase-inputAdornedStart{padding-left:12px;}.MuiInputBase-inputAdornedEnd{padding-right:12px;}.MuiFormHelperText-root{font-family:", ";font-size:", "px;font-weight:400;margin:", ";display:flex;align-items:flex-end;&:not(.Mui-error){color:", ";}&.read-only .MuiOutlinedInput-root:hover > fieldset{border-color:", ";}}}"], rootClassName$$, InputProps.startAdornment ? `18px 12px 18px 0px` : `18px 12px`, rootSelectClassName, rootClassName$$, adornmentIconClassName, theme.palette.layer.n700, theme.spacing(1.5), InputProps.endAdornment ? `44px` : `12px`, successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, errorClassName, theme.palette.error.main, adornmentIconClassName, theme.palette.error.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, warningClassName, fieldsetClassName, theme.palette.warning[500], theme.palette.grey[700], theme.typography.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 1.5), theme.palette.grey[400], theme.palette.layer.n200));
215
+ }) => css(["&.", "{.MuiInputBase-root{margin-bottom:0;}.MuiInputBase-input{box-sizing:content-box;}.MuiOutlinedInput-input{padding:", ";}.MuiInputBase-inputSizeSmall{padding-top:10.5px;padding-bottom:10.5px;&:not(textarea){height:19px;}}.MuiInputBase-inputMultiline{padding:0;}}&.", ",&.", "{.", "{color:", ";.dot-icon i{margin-top:-2px;}}.MuiInputBase-root{margin-bottom:0;}.MuiInputBase-inputSizeSmall:not(textarea){height:19px;padding-top:10.5px;padding-bottom:10.5px;}select.dot-select{padding-left:", ";}.MuiSelect-select:focus{background-color:transparent;}.MuiSelect-icon{right:", ";}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiFormLabel-root.Mui-focused{color:", ";}.", " .dot-icon{color:", ";}}&.", "{.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", " .dot-icon{color:", ";}}&.", "{.MuiOutlinedInput-notchedOutline{border-color:", ";}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.", " .dot-icon{color:", ";}}.MuiOutlinedInput-adornedStart{padding-left:12px;&.", " .", "{border-color:", ";}}.MuiInputLabel-outlined.MuiInputLabel-shrink{color:", ";}.MuiInputBase-inputAdornedStart{padding-left:12px;}.MuiInputBase-inputAdornedEnd{padding-right:12px;}.MuiFormHelperText-root{font-family:", ";font-size:", "px;font-weight:400;margin:", ";display:flex;align-items:flex-end;&:not(.Mui-error){color:", ";}&.read-only .MuiOutlinedInput-root:hover > fieldset{border-color:", ";}}}"], rootClassName$10, InputProps.startAdornment ? `18px 12px 18px 0px` : `18px 12px`, rootSelectClassName, rootClassName$10, adornmentIconClassName, theme.palette.layer.n700, theme.spacing(1.5), InputProps.endAdornment ? `44px` : `12px`, successClassName, theme.palette.secondary.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.secondary.main, errorClassName, theme.palette.error.main, adornmentIconClassName, theme.palette.error.main, warningClassName, theme.palette.warning.main, theme.palette.grey[700], adornmentIconClassName, theme.palette.warning.main, warningClassName, fieldsetClassName, theme.palette.warning[500], theme.palette.grey[700], theme.typography.fontFamily, theme.typography.body2.fontSize, theme.spacing(0.5, 0, 0, 1.5), theme.palette.grey[400], theme.palette.layer.n200));
216
216
 
217
- const rootClassName$_ = 'dot-action-toolbar';
217
+ const rootClassName$$ = 'dot-action-toolbar';
218
218
  const StyledToolbar = styled(Toolbar).withConfig({
219
219
  displayName: "ActionToolbarstyles__StyledToolbar",
220
220
  componentId: "sc-5llm03-0"
221
221
  })(["", ""], ({
222
222
  theme
223
- }) => css(["&.", "{border-bottom:1px solid ", ";.", " .MuiInputBase-root{margin-bottom:0;}}"], rootClassName$_, theme.palette.grey[100], rootClassName$$));
223
+ }) => css(["&.", "{border-bottom:1px solid ", ";.", " .MuiInputBase-root{margin-bottom:0;}}"], rootClassName$$, theme.palette.grey[100], rootClassName$10));
224
224
 
225
225
  const DotActionToolbar = ({
226
226
  ariaLabel,
@@ -229,7 +229,7 @@ const DotActionToolbar = ({
229
229
  'data-testid': dataTestId,
230
230
  variant: _variant = 'dense'
231
231
  }) => {
232
- const rootClasses = useStylesWithRootClass(rootClassName$_, className);
232
+ const rootClasses = useStylesWithRootClass(rootClassName$$, className);
233
233
  return jsx(StyledToolbar, Object.assign({
234
234
  "aria-label": ariaLabel,
235
235
  className: rootClasses,
@@ -240,13 +240,13 @@ const DotActionToolbar = ({
240
240
  }), void 0);
241
241
  };
242
242
 
243
- const rootClassName$Z = 'dot-alert-banner';
243
+ const rootClassName$_ = 'dot-alert-banner';
244
244
  const StyledAlertBanner = styled(Alert).withConfig({
245
245
  displayName: "AlertBannerstyles__StyledAlertBanner",
246
246
  componentId: "sc-1u3aqgz-0"
247
247
  })(["", ""], ({
248
248
  theme
249
- }) => css(["&.", "{align-items:center;border-radius:8px;box-sizing:border-box;display:flex;min-height:48px;overflow:hidden;padding:", ";.dot-icon,.MuiAlert-icon,.MuiAlert-message{padding:0;.dot-typography{margin-bottom:0;}}&.MuiAlert-standardSuccess{.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardInfo{background-color:", ";.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardWarning{background-color:", ";.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardError{background-color:", ";.dot-typography{color:", ";}.dot-icon,.MuiAlert-icon{color:", ";}}}"], rootClassName$Z, theme.spacing(0.75, 2), theme.palette.success[700], theme.palette.primary[50], theme.palette.primary[500], theme.palette.warning[100], theme.palette.grey[700], theme.palette.error[50], theme.palette.error[700], theme.palette.error[500]));
249
+ }) => css(["&.", "{align-items:center;border-radius:8px;box-sizing:border-box;display:flex;min-height:48px;overflow:hidden;padding:", ";.dot-icon,.MuiAlert-icon,.MuiAlert-message{padding:0;.dot-typography{margin-bottom:0;}}&.MuiAlert-standardSuccess{.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardInfo{background-color:", ";.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardWarning{background-color:", ";.dot-icon,.MuiAlert-icon,.dot-typography{color:", ";}}&.MuiAlert-standardError{background-color:", ";.dot-typography{color:", ";}.dot-icon,.MuiAlert-icon{color:", ";}}}"], rootClassName$_, theme.spacing(0.75, 2), theme.palette.success[700], theme.palette.primary[50], theme.palette.primary[500], theme.palette.warning[100], theme.palette.grey[700], theme.palette.error[50], theme.palette.error[700], theme.palette.error[500]));
250
250
 
251
251
  var LatoRegular = "data:font/woff;base64,d09GRgABAAAAAJLUABIAAAABLwgAAQBoAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAACSuAAAABwAAAAcb/saQkdERUYAAIXwAAAAKgAAACoCRgMrR1BPUwAAhsQAAAv0AAAUdmAmoVZHU1VCAACGHAAAAKYAAADqFocEB09TLzIAAAIQAAAAXAAAAGDZunp+Y21hcAAABPQAAAJ0AAADhui+xwZjdnQgAAALRAAAACwAAAAuBvcYo2ZwZ20AAAdoAAADkAAABuVyWnJAZ2FzcAAAheQAAAAMAAAADAASABhnbHlmAAANnAAAbxMAAPDwTSctt2hlYWQAAAGUAAAANgAAADb8ovIiaGhlYQAAAcwAAAAhAAAAJA+2B6ZobXR4AAACbAAAAocAAAQ8QF5dz2xvY2EAAAtwAAACKgAAAioPQs/sbWF4cAAAAfAAAAAgAAAAIAINBLZuYW1lAAB8sAAABs4AABGjW9iUMHBvc3QAAIOAAAACZAAAA2Bnx6jocHJlcAAACvgAAABLAAAAS6YHlRcAAQAAAAEaoHRaB5VfDzz1AB8H0AAAAADKk15wAAAAAMrfLoX/RP6TCLkHLQAAAAgAAgAAAAAAAHicY2BkYGDf9i+MgYGT6b/Lf2eOnQxAEWTAyAUAh7QFcAAAAAABAAABFACCAAcAYgAEAAIAIgAtADkAAACQA6IAAgABeJxjYGZRZ5zAwMrAwFrBKsLAwCgBoZl3MVQwfuFgZuJnZWJiYmFmYm5gYFjvwJDgxQAFJZUBPgwODLy/mdi8/lUxTmDfxrhKgYFhMkiO+SvrTCClwMAEAIeND394nG2TX0iTURjGn50/n6uLXcguZOxChljICpHwYohIDBkSIUPGGDK8kBEiESEiEiIiEl6EDLERY4iEdBGjC4mIriQkwosQieiquggRWRIhFeLX8x5mLPODH8857/d95z3v+5xjLuEKGp7AHKCq+KgjKJn76CZjXhtSdgbpwDZKKosFMqBbMcJ3o4EnyKvnTrNq3//BWA95S26RcXK5rsJtIv8tB35iVpAxWSE1HUXMG0fGDuKiDaFqc8jZL6iaRTLO+SvO91BVBezoKfTYNDaNQbWpk+8Y93owbLawKWqDfNeGhCkjajewyjWDTUcIWQ8hs4+g+YQM63igav4BNcf8FR1m7QW06yOuk0dJr2OAmjItGFBriOgTdJksigqYCxz7bxgvcbzujaEocZIyg1T+o9tR1KPoVfuIMz5tgGZ7jJA+RJTjkC6jn3nj5CvJMv/Eae85XiTXyDxx3+ga7nJvIdaWVE8xrCvum2XpvYsVEKZn/eKJKiFNhhh7LbltAh0qhnuczzM+pX5zfxWs2CUUHEUk2fu46/s5NF3398QL50MDquBvc81H1G/ku9eBrlMfzsJ9zThfxIsGnBf0zGzipfT9PLwRqnjR8i8K/i/2/yF1h3w2adz468NZ2Bdqn/OiEXrhPKNKrZJPanX5HrNOlwfrppc+zKFb6pMcwSXua4vrppAQn+WsOa2fLfH3P+VdYr9QJ0xayQaR+AJpJnmzi07mKPNclXmvEiQnqA9IEFE5r5N13tkqshcUUmoKi2SFXiQZj9lV9Nn3yHA8bO+wvix6yZC7c9O4ynFCt/py957V76DcxRqZBfwTM4EIexDherv+IZJY8w/8A0TxApOI4OYfgjwA4AB4nK2TaVCOURTHf/ep3siStKgkTw9lyZJdWSNbdlkrFGXsRgwhfbBn11jHksm+L2MrS4YZJmbKoBljeXoia9lLQ7yP680H44NPzsy995wvv/+Z/zkXsKPi+CDkjUiSlbDV9iJGvkPpigNuMqtGMqZwFF6ihQgTESJKxIpkkarcVLKVJ3ZXVTfVW/VVNTVADVJD1DD1qJ/mF6ApmkVz1mpq3pqvFqj11mK0eP9bAZPKFdP8pSepKruFvfCU1FAxRESKGJEoqTck9YGkuqqeqo+q2qjBf1Fd/qDG2ahCUu3MUrPQvG5mmSfMrWaKmWTOMRPMaLOP1cPqbnX84W/cM+4YuUaOcdu4ZmQap4zw/Lz8u3qZXqIX60V6oV6g5+kZerqe9qjDw50WS4Uz/z0sipPN8Qr//wyB8jtT+HdUdGYvJ2TBkUpUxokqVJWuVseZGrhQE1c5PXc8qIUnXnhTW862Dr7Ulc77oVGP+vgTQAMa0ojGBNKEpjSjOUG0oCWtaE0b2tKO9gQTQgc60onOdJGbEUo3uhNGD3rSi970IZy+9KM/AxjIIAYzhAi5Q8MYzghGMopIoohmNGMYSwyxjJP9L2cFK1nNRraRxl72sI8D7OcghznKEY5xnJOc4BSnOcM5znKeDC5wmUtcIYt3zCKeCUzmA/NIZyZTKWMuU4RCCtsxmS3shD0TSeQr3ynnuTRuGgul9iEusog4ZmDlkRB8Y7rc84+MZzHL2EoOubzgJUUU84rXZAoHrnGfUr7wmRL5Hyrxnvm84S2fWMoalrCWVaxnA6msYzNbpMomdrKLHWTzmGckkI9BAQso5ClPfgLnE8bFeJyVVNty20YM5epmSU5zsSU5Md0G7EZuai5Z9xJHD5pMRrSkSZ7kTjtDpi9LX/IdfebXgHY/IJ/WgxUppa37EI9IA9izwB7gLNkzdM1kP2r2VulNFrFCgPjTilvHH7g1/yMNdOAXKfFqlQb8NvOJJ2JNsoy4N8+v+aW4vTnxqRingvi0SukjFUVO3F+lFhGStb5YZ2KdWd9mWeazF2ZZVRvFG4Z39Iw7eDx5Eu4kFynvJOGtp7zEznh0cwRc02CNULIxv2I1v7TnEbfqmBfqstMaW5oXOhcyrrbny/mYfHCoK3JzrPNz7G0bVpbAJ3kvKzD0LOO+eL/C68OLuCMFuDGeVWcpe7DLPl6sRpqQDPmBaI1nRUGoze2TQLPKa9uv9uNxfoZ6S1RZWv7zcsul9Lx9fc4qYe/NrVIKpSLeMR5Z5Lrb3VXerLBlpxFG3DUI7lpKUMZKbvwuUk1TuJr3bo78IMDJe4a7IXdPIu4boiVta+l8oqn4Pf130Jdtu8YDM+6fsBqeRvzA0CvkjfgrxJtrLJpdbxPTG/3lyd/5Gz0pH6ghKj40NEX2TXL0IJ9E/MjEB9OIH9+zCuZXQDwxZcMbjSmmpRNDY/yuKJZ6qfNLVnp2+1ip4QAF9jCWEZqOn1tlFd4UsSaaFsiyv12l2K0Tt5FNhcRWJv32Ir1rUov8u+Zx6zCbzTDJboKRObBeWG4nGI8VXa0V3UzsteZWkl9j3s0k92Fb0RJgOeri5ugFWqiRZyEz6SYuF1KsU2mnUThWetYWMche7EN2CBfZm3hDtb4Osm1GjGQgdAiR9nFFR0/BcujC3NUzrC30UvJLl0eOfVNkse6N91sa0xQ3eq2VuiHb5nXG8N45har5lb6sFFH1U4ssDqpiSd1QKx8QEKh7/tRoioX5ApdnmsVlTw0g1meb8Orz8OE/0fdifJQcrnWAy4e578f8ELM/+p/416b01GCfH8H+xvAT/NOG98J7z3VseD8scHYRBjj+F4NRxdwD9MVGTXX7ISRcN4qh93W2wJRdfAG+XHXLLxOaHFEu71Tjsn429CCrDkJG9MDPYX4r3Gu6Y6Eb6Ipvde4Nw+fCcI4e0AJfrZrUd4YHmwQvxeGnsL531jNYJ64xcA7hhIaHG7QRx6EjZwk6dpZAfzA82kBPxXHQH50l0J+cJdCfDR9soL+I46CvnCXQM2cJ9LXBa2L49frL9TcbhOYeuQgACABjILABI0QgsAMjcLAURSAgsChgZiCKVViwAiVhsAFFYyNisAIjRLMJCgMCK7MLEAMCK7MRFgMCK1myBCgGRVJEswsQBAIrAHicY2CAgx0M3UAMIntYZzIwsO5i/srA8G8l68r/H1h3sbD+//RvCgDeyQ6vAAAA2gDaANoA2gDaAU4BxALGA+gFFAYmBmYGmgbOB1AHpAgCCCIIbAiYCRIJnApECyoLuAxuDQYNXg4kDsIPSA/kEA4QPBBkERoSPhLIE2YUEhR8FOYVQhYCFnIWqBcmF8YYCBimGRgZlBoEGs4beBwuHJAdCB1oHfoegB7oH0Qfeh+mH9ggKCBKIHohZiJQIxAj6CS0JXQmpidEJ84ojClMKZIqXir+K4osgC12Lgwuwi+eMEIwojFKMdIyPDKYMxAzPDO2NAQ0BDR4NZo2iDcmN+o4KDjwOWI6lDtcO6g74jwCPUA9YD3EPio+rj9eP45AakDcQRBBoEIOQnBCtEPcRThG8EeoR7RHwEfMR9hH5EfwSLBKWkpmSnJKfkqKSpZKokquSrpLZEtwS3xLiEuUS6BLrEvSTLhMxEzQTNxM6Ez0TW5OSE5UTmBObE54ToROkFDiUfpSBlISUh5SKlI2UkJSTlJaUwJTDlMaUyZTMlM+U0pTrFSWVKJUrlS6VMZU0lXKVdZW+lhgWGxYeFmaWtpbFFt4W+Zb8lv+XWBe/l8KXxZfIl8uXzpfRl9SX15fal92X4JgNmB+YMxg1GE0YWRhvmIwYsRjLGPwZBBkMGRcZIhktGUCZVJlomaOZ8poCGiqakpqdGqcatJr+mysbWpuMm6Mbv5vam+Kb/ZwtnE4chRyoHLicyRzanOYdIJ1gnWmdgx2LHZUdpR21nced1J3nHggeHgAAHicxL13fFzVlTh+76vTe9EUzWg0mlEdlZmRRl2jalmSreYi9yb3CjZgbDrGdgCbGsAkmBoIJYQFUiBsEiAkm2x2NyHls5tOSE82kGRJCJbG31vee/NmNHIh+fx+f9hPc9+5571377mn3XPPARyIAcCe4U+BCGgELaADZNKujva21pbmVFMyXlVRVhosttsETidWDz+3bmwq3QsgA2AAsAxkWBgHkGMgVw8AYFjAQBAFHOA1HI//0moFAMqAIOiDQKMR8d+iaBBLtL7h53YhVN2FUQlACwQtQAgKIVUQmcUSjS899KFwiKIGgLCCC19C2hUrnmuutneyiXiAcTpMnBmGy6OdXGMyGi41MeHScnuySbqHfkVhyBpKoX8feFr6Rmu7ti6sDMSa6sOc9ZCB88ZS9SULWyqbK/x6j2FTZ72rothqLa5w1XdmHmb/cyYeZzfNPMBd5ooWW8PpVc2psbbqaMS9/bLSRHVFbWtFot3msrlmztSlrYFKt7siYO3iHvtgaxNfg78H/ODsn+B30JwZQQhckzYBEPA7bOiXURR4eZ58CBKir+MghGj8GTQ66FNZ1saWcNL4e9A9gMcGj5MC4GRLWF+6NOcei4YXjZcMgy8hjowXtKLREMO1bKOVTXYy2fGpZeCzrKAVrkT/2Gp7qNbrrS2120vxNWTnT81+JbZs+apkctXyZTGm/YPvobsOB7rri2GoGPnO+9hTzHXoO3XACT6Wtun1AOideqfVjFp0Aico3+owaCEHIAzgF8ZfzbMci74boE8Zfu43CKRcASG3CFSYQqE/yxj8P/4oXzpGINEnBtAQsBQOXRlMYiCKhxN3ABSelwZBNEFEEnXQGsr+CRMW1h/0FgsW+Bv5L/5U5icfKwmHSz4GS7N/4W9tAoAbR9/aCXpgSxrRbU93ugv96mxuakzU11VVlEcj4ZKAz+spslnMRp2WRU+Vvj9mMjCcxcii7+LQ+0a1UBT1QbOe4Xm8AnUaRhBMQTw2BlDCS7NfjaAEMYlvYkhO4AETzUOEu5gBIRg8iM20CxmsxrkdIRpgEMZ/4c5lBA/+KyT40uuBqBWTQCtok5iq0KKNoylOAA0w6zVmhABNqZ7X6SH6SwAEKSI8kxGa8EI1WKCRNRgBWcUIKYtXscmEnwIgvoQMK+hMsGjsG5NNKXuYNcFqaKc/u2DCHk51wjZox/+xCXsi7nI6RDYhYiiW/BLMMILAWNeScXcJhAv+tkATKx5deqfbC6Hmm92/MfJl5acHherA2JK/LRn1hODC7xr5SPTm7heKEIR29uN/6/4bfCKzotTHiTxcmXkgEoRPuP28QWiBA0PFfrglUJpZCR8PFGn4zAPDxb7My+5iXi+03AgH0FgAFuw4a+PKhK2gGfSCxXBp2tSMGE5Zqd/rdmkEQu1aNAuDRRAyQxUlxWgYFnZWGtGIdBlYlgNoZHmOR7wQjS+LxxcNPuKFDJoZNE4cZwsCnof4bwitfInoo9TzofE55+LDhNV/kfgg4CFiyxEVYq4EkczoxeJh8csgLgU4HmOKotfiMUKCPiRSCuFrYTmiBMyo3HbEthDT6oKYKMQAdIsCZlzlbIDFTMwMMXHAJG7pZKED9zCx8M9Xfm2wUfSa7PUDG/oiA8d2drfsfmibjvG6ekzb72uvdnhNla0jDaHBW/f1t+9/YqeB8Tl74H2R9LKG0u7N/eHZ75W2j9UFutd1BAz6DcMTelO0oVbD2J2NS6/fsPCWXf3c7fbAV40TrT0BTygkZvyu5MTh1StPHxwWnrMXMzfFB5NRS8YkxAbWMN+qX9BUYYGvCxXtw5iGeDB49h3+h/wTwA7KQQPoByvg6rRr2ZKRoZ50c1NDXU1VWam3yGKSJLofzVc9ojwgYk4XBSLQaEUNJPIAzyxmd9YgkuR4IAXI8wYeTc3wc6WoX/L8/RA87ixAogbYBIXmmgv25TgiqWSSKtBfI9FYC5pzJOgZJPCRdIJEvhfCyPNmFQInfoF0v9KXR+yIF86HA4FoMV3JaPAlpFkhMRxJ2DVKwk9E1ILVBSeilkS8kyGkRenoPJDM68nlB7r69i+rr1+2v6/3sqUNt/gbuiOR7nqfrx5fG/zMdcbiouvO/Fbntx/hG5PL92fBDyyrvzkfnOtactOq+vpVNy1ZdnR1ff3qo8t6Vrd5vW2re7pXtXg8LavgFVb7B0eMFjix5AgGPLJk2TEMeGxZz5pWr7d1TU/3Sgy4Eq2pibPv8gf5J0EXGIbptAOCgb66WEW0tMRq1oqgC3ZpMD0FsIaIliHTDNGiHayO+HiBZQOI3yPpycbR5GLhKSKOjWYXrWX0g4cch2ZZEJQfHJlmTCbdF4cKSJjoqudtvEIvXfMjEqmeQ6dfRmNWoXFi1pYeuDAMAscLmFhYxIRYwoRkPIKKCUHMfTCziZbXsjIRuBGtEBllgiJVIbAmQQkmVQvxBRJaaUqhO8zdozesS3F7ec7o5sVgQ39tfKwlaC1tisKPR2MaxmHbwwz0wJpnistct699766x+68cqpu8tK+jtXH6tsw36xdPJ/c935dZsWMn/2Riyd52FzTZvM21gZKWRbFwurs/mlnTe9eQ3bX/Jxsy3zK57li1o2nr3WsGrt6xJLDozsULr1uXOvN296a+8EQffLrlQUC0TaSvwQTR18bTOtRCtDRW1lJcWqyqI12dqmgMlBS0dIl0Ay98om8xuUoWl6djZRUrtTqFII9mfshAwQz8QExzDh3Uo+Vpcwcgke2U16fIT1FgYGjPNoEz6UeHt3cHAt3bh0f1Jt323cxl38/s/pzeojHZxPr9P//Frw9d+Zu3f36gQbSZzPbPZnaRlx/K/BC+IT9Ha8fPSTLlVNGgokMsxxPWlGqyward23W5j+GEbXvQc+Ddn7Wb0WMaDvz87d9ceejXv/j5/nr0GI1F/zl4F3nOenYd8wr/c1APtpHxrAf1RW4ynh40nqWxyoqykqDPbkEqlMghNYgMIVbZ0cgBI8RjW10ACKHGQOHsROCrNMz4rdFolaeaEM3VwZTb5a6FHTCBBq0TdiERacKSMgjxF5a7iiHcyIuO0DM1z5RFHGHbp2o+FXZpxSmT3mdFbdaQzRayokabX29h171hL7V4HJuGp50sozdsHp52lNgijq++URk0u/SoWW9gGL0etetdllD5V8n7TYNnuVLuJNCDy9I21KIHep1WgwwdDq09EY8F1kwjSDYhrQB9FFpzSKfHvAFEscBi8Ggw+EKUewVOUiSpiVgYnqd0F3KGrGFrqDFkZW6B92a235nZCT/KncwsPZaZgM8eg0+T91yb+RMcA38AAbAuLfg8AsfIdG8zQ0isMSrWDJAYJbvm3jGTGfPRRjIpYeUmvkgmV0plZ4mY6lKdbAozirXWYI03UBe0eOsXxAJGky5Y4hOM3qqg9bC7MmhzlScCsQ3rVkaLDRajSR+pbw3ZQjEyxoyBmWAeRUwrkhawmYPePe3OIxNAqYTFRjIakmn4x4yNefRefHMK2aPj6NvtYDItYN1C+XZT9utssISRvlvV6sSt0rPmfC8753vxZ07lG5N75tqO8Oz/nX2c+Sv/KtCCWFrQihxD3ukEeroBv3IjeoCRPFuHH5ZEfaoZ/DQ3kdWYDT9sShUPMyuM9aFhZ7iU/58SYqe1n/0TN4LkINavrkjrZG2Kk7/Ym6PAsCzlY8AGFLO7SK1vyPedhBOGclURlkgSCYQFWaPbwRDRAJFssBFdFtry1QluZPzWL+3e86+3jo3d+q97dn/p1vGXUmsO9fQcWp1KrcbXNSnmm69k/vfFqakXof2VV6DjM1NTn8n84ZXHfnq8re34Tx977Cf4+hM8WN9AKnaQ/zj6iH9PG2xWi9lk1CKhp/gawgaOQS+NBSKWglg264PYyOYAQ4Qyp1idJTIo+j9JRl4FZ6ZweEFXFYLjOEyP2Q74go3LujnAWP4CtgqNGieRsKqHJIQjIWsyxUtCBSbwOkd8LcmeBTqH1lwkNMOn7oDeWXCc/XZN7Ica0ahdBC/54A/HqazbhlCWITpIgM+mLRBgvdphtxhBAiYUv0SsDnEYZNJCJgCQEYP0gbg0nTxVWzCjwuwGrT+iVhO7fG4nDM1ifkVsGqmLmUGDlU6eB5oQY1jphS8hQdFBCAtBxJ4IxRErD2HeDzuRnKSkJAvcTpZZser0/p76iZ3tmWMVE1H4s+LSmT6zFf57y9resoqBtU1Nqxc06DQlXl4vrjGNHX6QfxJpC2vHjl99WUfmGr2x1Lerw15hhf/RunPX3q6udZ3BkpbFdcXIbLZsvHdLIx7PXWff5WrReA5hDyQEvd1tLQ31dbXRMp/HbgVDcEireCAHoCjoIMe7IcsgLQzJAkHkEdFxLMcgxZAHHLIPqeqFx1ojq4hZRiSrhd3nRoV7CiIQiCWhYFUQId6FFMOhD4UDQmlxU1z4gm0K9bxgRYVyPCSME3EX0lzcARavbTJBjQUnateq+/d2hrtXt9x6YviGT2269JF9g54Rp9MR1DAcY6ro2zw8fMlwNDh+275V109EyvvW4KmrN2hKPNmpS64/Ptm3c7zZGnn2xk2n97a1TH9krERrtXFavnhhuqZh8fq61vUDFdfDaM/q5s7V7UhnHK3NTiYDKtDaWI/0QAtwga+nTS4nUj6wzEafrqyNgAP7mAK8LK5V9h9aDDKvLCkIlV0BsmeqksLh5c0Rh10BeI7IdF+6IRcWzQoLebJaqCIwp48gKe1IBxKQPoB0AcoxWLxcQuyx/7E7nn9g9iZHMWdjXnr8AZaf/RtaaPwWiytzDF7ptq5iH8h8wdteMttG6ZzNoLGpBT9LW2pjleXBYm+RzaLBQlMemzbssaipZljeBREZBQDLY2sCG6roRXn6qlnfOnpZSAbExihOmJb5UKBuUCAWbhaZgsCJ2VC656L6Eq9NWMGBL5jDEjElhENsk1p2E0qmAooSryCW20Psm/Utmc6efev2PX2gbeyWV3Z3HZheFmqyBeyJwQ29wweX1paPXj7adKBz3wHmCX442pA5XtRz4PSaSz9/44Cnqikw4g1Gg/UrrlrUu2ukyuYIMacB8R9jnhJHY+1Fo/0g5tLVlaGg26nXAi/0KpRYVoQdw5jGEAcFHHVi6HMZhiy+JFiEm0mqO6h5AiKx2HxghZZ9LjumFh/mw9hx0AmhQz1cJoa5edn9B/oGr//s7l2fvqp3ySq40xQvOZ0xJ67KfL9i0d4FgwcmYzVj+3oHD4xXs3tadj+4ZdNT1wz2X/uZfWu/ewj+1uaZvSVcnhnpv3QiVjuxr2fgktGqhsndVKbtQW/ajsbLBnZgLQldbWYk6RXdxiHJEaSh4AEi7mRFl2WJEs1ASp1mgHWrAFG1sEKD+4VZKOtGTFadxdaZCCWtK4WWVgfk2s2a2U8ba8uvZVYafdZZh9XHnxorrTGfmfRGuNOeKrvPeiUS8evR/EaRzAgiKbwAfCXtbUyGSiDo6kguaFxQXVmSCCWsZhCEQUV21BZpGCQjAxo0PyxD/chZH2ZQhNSrgLg11thkkVwj9cJkzxGyV/VX93Fi93q66TzgxFsQVvXDV4kMeGn6qb1Pl44giYJyFRlgNc+e95vp3fn8dQO3H71kf+elD27c8NClnQf2Hb19wbXP7xzYu6iyYXJXW9uuyYbKRXsHBjZ1+kPdG9LpDd0hf+cmS8uOe9fe/EK06okDozdvaW3dcvPogSeqoi/cvPbeHS0nyxdsah/a3hMM9mwfat+0oJx5rnrB6ob4VE802jMVb1i9oBqvtbsR7TRJc/EAXmv1SHZ73GitofHPrrViifeiUUHcN2fpWCXeL6+1UgkW8XIOkplS9ZK4fzomAaGV1qiGJE5hzJUkbYvLDjFUOeGoAiQTn4k4e3OccpHxO/Z0D1zz7LatnzzY7a7pKM88aqwPPgZfdEWtqZuhp3pke1fP7kVV5Qu3dw/uHalgRpq2n9q09rFDA32HntrauXfH9uaMxu5m2oqT3ppa+Gjv7pHK6pEdXX07h6J1i7dQPnUdsp+uZH9AbIr78myKMmJTkA04zKFNwRyLipMcZUV4fwqbDlSKKfdZxeYocN8Jqc2hujWP1VnIDLPm/b4u3yw7n5nGagvt+V2XoWMRQGbEJ9O6ulgkjK1pZSwCxDwuOB4GyqfxePgJVIFvNkBFt5gXxoxh0pH824XGhp87Njkmef6e6NF5TXQhf7jOYbMzM/kjB9H6+x17P7ccsS0xzUEr1FfbCWflib/GzQdgMYR3s4LFkelyxDyemAO+6rDMfMB8Fd5xrdWj+4XeLPAW3ds6r+U6eCely3vg59g/sSfQEIggkdZJTheA5kKhGiCNzBw/ASf5CbBZdQ+7auYT+B/TeQx+/xgB/CN637/I72sB6H1TmO9F0DKsheUR7HOCzj9a8FtWezzV+K0tLP+76yxe9I4WXjDrf6HzWK/N7B2i71p69k/M+4j/VIB28NW0qSVVFyuPlJbg2AWF+ySwfudAMpiZEzBAeTEglgLHZR3Isj7VMH9XVYQBl3UZIz2q9YL68LzEqWhfjlf0p7xYBMSzOJndk2iEXNIqDQ6v2No+emxjc6x/YkGCsx0yxPpH+2OlraOxjuXtEYPH9NE52/Ce4mSFu3bJweGRPZMdTU2hU4/rq7pbWvqn2qsHGryBsoD7zEP5tMaAZWetgp8fBeNgA2xJl0xOQLBqxcSGyQ0L+ttaGhOY8/u9VrPIg3E4bsSj34uGcMwOdcwUspF0KcgLSK0UkOotIEtJg5RIDdW7gI5ldOgvgxaNlp4BAt2M4UWRx4PE8yIeJBFfQtiI+xrCu1zCqz0nXi3FC7UsILs550Wv9aWnLg4zwqUl6g8yyM+NmvofSqPlWQ8/NvBYwZmn7TkdtgDEHn+kNgehwIVLy6IYnEMzz+GZjyDglD1KYV3cbYs3GluPL26faivuvu5LV/dujq2x24KV7oap3vIVH/vOoaO/e3Z650t/v+2+3y41G5w6z87MO5/6VOb7P7w6NX3rM1/dtfq5B46sa+zYeUeGCXa1NVhHymuHr16Z6Hl5ePH4QOXC6daln7plyunI3DvcUFbn0zVvuW35zd+6pX/Li3+946nM2WenehLaop7BiT3/BWu+uPsbn75ja0vF4v0f/dzOXZ87OnLQEV/WDcu1XVuO9A8uJ2tWBwC/kMSxOMGX0gazyWjQawWeyXqWim14sz9AxDcabwarC3o5kkFm5DIQy7HJLGRe7EKFCogGMAApYAHgcAUG8S18we6kWjU+dbBCwQ6SNymEN3PYEIk6gAlkFuLJFfmF93hLNEdnrz4qlnruYTreyNzJuN9yOfVOndcBV2Yet/n5UzOHmQVN45X9XuzkexZpLg+hMXEgTaoKvJR2OZ0AVFWUljiDzkCRC7XbWaiRx6fGAImmyYkwq85KnEzZSxUgkXuyNlsl9UGDzwFqw2V7Z3uYiSWTOCcwhFJckNSJydozCWsoz5EBUQum7Gg4Iv8RehZ+/ciXDreFejf3PfBQ7/VfOJj5GmyavGJR2QMPZv4dgomDo9H7Hsr8nT+VXH/L8saNS3qcwceOrrpnVxtzImOM9q9r2Xv9zWXpVU3XXI5lysqz7/JaJANqwX+kbRBg27rIRfhQLaxVrOukHeK4Hx5gtsxh2ywuQPJ59VlL2KqKbbBBRQzEz9GXQT9p3IHS04lHPd12YZ1ItEJY6YwvsiGN1n7W4dtUhnkF8fnUcmplNdXEPWQxjkyd+ZePzTy/cfsXofah079c0SXarMbiiqahjen9X7p50aKbPrs9vWX5cNQKK4yTWy7d+So0PfIINL22c+OSFTqj3V/it4/e+eYNR9+8Y8Rc0lBqRq+IaJI/jmjSADzY5+1y2K1asbDPW6/yeRvO4/M2X6TPG7E/pE7EORd1docIPfHHt7ycmTk9+xum6DTkXt7ytcEjr+zPPA2X7n/lyCDzzYcz77+ylT+19V8z7z985Fu3j5x5eOS2b2FawesshL5JDx6aZ18Jf1lEejm6TcQDGgRBPpIDIM+3HcabSwD/Ix4SuZ8CauawXlkzDxSHN6PCCjS+yOFlVIsi/7jQ7BgTm/0O89zMCf7U6UzZfRn3afQZQP1NWnBL2oJatED5oqzfLeeL8LPwnjv5IkM2NNDPY06H/+V9iplEB5bjGMDGHBgG89s8R3Pu64fpy4/Mvvg6fnP96dn7yIvTdZtG6zYJfokjC2qqIuFin91q0GsEkIRJhdu1hSDZRodGyAIkjnmBQdIiDrKOBxpFgMYa2/KEmKSYR8UvNg8KDsl1TqASXUKmQuBk8Truvai+hIbDWST4Iq1nIrStYezqCFlNrCTUycKW4gJUYQFsrHXDspHoT+xu+Pmmy266b8XHMzOvbN/6JWj+5NI7r95Rm7L6LHZP54orJ6/8ys1Di2798gm9K+iA7S7LntkflLeW28kKfwyaXt3hqeutmvLpTRUR7+hd377h+PfuXizTDd9M1sLzaZNqGWS9tUWyXAVRHqpEsGxfenPvA7KtLK1wKn8RmeFNCbrzOhcUX/EGbTXhixIUQ6AADb4EVLaRzW18kW2vUNiKaQvJG2uCb359Zub111nudebW2QP8qdnrmWvRw95EH3k3+j4WjCv7m/S7DJRlkW/J7k4qe+jUi+UGUlyCcgNfpN1J9PgEvPu11+Q12H72Xebr6IcbfCqtcyPpYzJInNKLx0mEJASCDqEc5SDvDuI3ComYhNAqxVG2TJxAZq0TWzZ+MyABshBpKYh9JrNQ1A1VPheAep4UQNnvlA1kKichKEi+ECXUmmC+3rb/k7s3bGfQsDmdtvZ4z9YFkVfhOwe/eOOAv7jFb3XaKpbcuJJ9lnz7a2hmWtG3l4JvpE2loZJgwI8lBaPy+uOlQ9QJNKFYh+BJeDIHc73+haAYElaW4/WvonBYUtJtrkId8JW4/SWkkFdgpU0yui0D6OYapNxLNTAk4EYK48KmNFHZy2EtS/YCEvDGhVFkTP/YVVnyidmfOCNOf5Wbaf2k3Wu3aDJWvd0TKpp69VU2Ynczfo9z9l53iU5b5ptdIegsWqbFYDXws/skPohGkf0R+psH02kNXYFK9IwdSD5XqnqqwwjsxM+cvUXjCPxSq8o4Z6hxzkgiNYK5cgLuY3bNvPnao4/ilyDvIFyP/gyDL6cNJYFiv8uOtXJFI/ezNOCesro4XqF4rzfHsxKYCwOJ21jyrUga+RwoopeHVeDEk4Dmro7FvCCgbPFh9gHzYziyvgd55tBkIXomc4dmCjvVhWpYWo7anXjmkBYF2b0mp07nMsFfGv3e255imIzTE/PHPBkdyz51m9dvhO8wQlGjz5/wspe4dR9s5Yqd9Z6Z62Ix9kZv3Hnmbf6Uzj1zEuTwURe4M21wOR12A+Klqn1yM4fFIh4uQu4yw7Fykk+YONbN9AYeIT++gRYrCWvJguBriEhhLH0riE9BimhBA4SNpBw65uWYM/S5tRAtaix5lEGANq/HwnayzFMb3UHzzOsM89Q0f8roOPNv3gY3+7cPtlrsXMpT75hhMX0wYPXZP/Fv/f8f/6CYwkRqyiqhShnm30J64ZnTpzMzL2/Z8jLkTp+GPNUOD+x/5abBwZte2X9A0hD/8trOna9B48MPQ+Pru3a9nvnLw0fevGPx4jvePHLk23csWnTHt/F3I97GXYuGwIR0YKJdedxWM/pl5HO1K5aH0lEBbCYqSnGONuzHApDExkfV8LJGXI6f16iGIQcvwpLXkydhh9mzB2HF0gqXU99BFJmgN74Knzj+9SPdA8f+7fpf/Wry2mU1Tz79K6Zo9jf8qa4Dj22efvxg7/01o3t6PnI/9Z+tzvy3gOMZ/KAenEkbYtXhkMdtNmroiRIcdx7VI85JbEFsPCseWOIwy1pK2Mp0qqELA+IRsdAdlnUXhZvswuVAo+HjqItWgZV24eYDg1ByuVFwTrJaFTlIwi/LWWxhnYfGKhfvG4D7Hiprds+0HO49P7Ft/uwD19Vl9js80GZznIfoKM39EtFcEXrZn2IrJRzyedAvt93K51gpJskLICARl7eppc8/9xGWgJXNKVW3PJ9JLQUl6lmjugOJk8UDyBK7n5yowZ6TpISbYbEgpk6T83WTQ2JVdCy6sJBFIhbmUfRHj3/1+s76VTdOlvnhI880ejK3Wisq7vr3pdcvr3nyie8yy2af4k+ltt21auTI9iG7s2L2a5UMKHKeqBze1nXdDZRHt559l/0hovMO7CVua6mIhkN+L44Py3qJO5AlHkByhcGUg14RCRy8r4SPGEgHCnhr4V33hvm7Yq8ML8cWqHfbWy+ozzl22akPUaJLQTqdJp9xkJyJguJivFXrsFhj/Rv6u6d7S9s2HL7+8Ia29OEXLr3ll+PNGrfJ2TS+f7J/13BF23p0a31b275P7Dz41SHuJbO5tLI03D5e1z7aXFmTWnJoxdpPHBrYvGy13hxrikX717d1TzaXVzYtu37dyMk9PSOD6N39iH6vQfQrggdIzJ8IJMNCkYhOTHEsOaZGFN1cvQY1MuSMB9XNzFCRjEEs6Rs5fIsl0nGOIREhmxNMlQxItisUQEDhZNEoRXhy12QaXsvU8acePaPj/voooZeHzr7DO9E3ePA3QOCwmwyiADzQk/0GVtJhqYCmFCF/g5NoMUnVTSej2ERB5SbRyMNZKCLi0VeEMUXgaDZ2XijpGyJUYbfKIQT4zwDD/HDFrRsSr47e9d0jR7579+iriQ0n7m/fdc9KduvMqau++7GpqY999yr09/0r79nVQdeHBukwC0gMwBVpjc1qMTEqHVRDNDYIJeeiIfud2VsMPp+DtRj5K615t6qRiHNqsK+QcGbFeKmWNhrtRDFT6W4wrPmYt0QDP2py67VOE7xLLPV8fPbzn+ZPeR0zxtKx6uqxUvYv1uIPtiJ0iM7EX6P3rwB3pQ0V5dgGsZpUHmV32KXBKkWAoboYpggDq3xHzm0WJPFtM6t8i7PAbfw9IdzOMblfxCH1GymsaPrYamGeb8M/XaovhcRtDMOmh72lAqzQGAXRpIXjQtjT7EWm4ajNJOg0sJIPe+7NdD+b+SjSzLV85q5nyVj4fZ2lpV1e9hfWYvwr2RtqRz9sfqS19gcrHRHzmS+QOUZjxP0VjZEPPJLW+TxWs1GPNA2Fnk2E0KRplnRVZXxUN1Uaqzw+oextSqwqOJmmK0xYx6Mmbq7VVlBv1UIyZpINpiWiGcoRI2cy5a86HRp4uWiCG7RO80uZCPz9l10eTeY6UZ+5Wet2vsj8jHnJZJx9zelhDCbr7Nis221iVjjts/9lclN6535B/O3XpjUOm4AmUaF3p4HFaicNq88PeFHfpAHEKm+Hfc5NTCVu0koDZYk5Tqw2me6xBIT59MF8/9XZvzzlDejhoMOn13sdcIE26HmGaZ39KtPKrvPaZ78T7gwEO0uZmKUYz+0y9D13kz0VcjIYnwo26DHbVZ0MZhgVy5UtJ7UB5+Fg1umiAFC7sjTnXsGtXzmuR4TIwmxMpiBirXc7Z77Hxs98y87WzKD1OVgaOHPi9EjAx11+mvQ+mfkpzPCz6H2b5ffWaUSeyIp0qSo0T3UYmX4EvtLtZmuIRuglcDTrSbjP53rySZcv81MxMODy/P0/PG5yzhKe/cPZx5l35Nhw9Aygig3H4oI8nsaG0+UMaWw4S2YHE6BjJFRvZFYMFzcb+VdLSz4oLw1jPyb6hm+Qb0ikdWjYdSLPMfJuuRIbRR2DgMo9zNql13cnm7CdSr2CoZX05eG+zO0/dPiFhM8x8P7PUcfTrJ39MZpfK1iV1ljNXI6PQAelQyD0I1Tnn630FvkeTM2ECeuoAU75MgmdhtXS5CWoClwLywWR7Gkx3H645XprkeYrRrtocr+mcTuO86dmDzlMcL272llTnXnI5MDTn3mbdZxdhb6qmpxZwZogXlFpT+7xHpUfDYc9ITphHTN/+MTBg3jblLsFvoB0NC0eRwgEDmihVvlKI5kjrDhYySTpidsgO0v2uCtI3/6/QiWmj25xek2/4590uv9sNGOWT2zYd9lDnAgqQQuMp13VVQ31VS3VLZFwwO9xO+x6LQO08mm2lhBSzep4pB6SCGuG5YjDWRSQlUAMWEkjdAQ1kMYbQ6pvy0cdOy4YAeYvBMvcQOW2Qkh4pCfSwNUsOsSF1ChoiPJgod5AwLGcBbFo8B18jC2LSZAClOWtzjqI/dbS4TQlRQKOQSZqpxNiF3ejiSUe7EOj3hLeUTGyZF1r29aRWM9df3xm86buFd11bptPU7LktcuXHllZm4nXLe7vChx+ZleDt6bd4l1b1lLuCPVs7m/fuyzFjV5+ZagyZDe1jI81T59cOvtLezhe8h0uGO+rqmiNWKkNe9/ZP3MutK5dIALXpV1FbgCCxe5IUQS1OPE+IEN3TrE1W+3z2tGH071NY1CEivHowFt/WA4JyO7Gupx84PVCuzgZxa6tO0cXAWseckeqGMp2RCzbDSkDHE/dABgD7mTO7YSfhXlXTcFO+LgTgo0IiuYLjCyJUiwMzjJkFxJRhyyU5WfxslNU2t9NWKW5liwOUQjDUkG0koAFHMBw3wtdj26fOjnd1H7Jo1s2fiSh1UTh+PIbU/WXDZ68L9yznn919pGFK3pufPWafa+eGB/pWx1lrxhbmHH1NH3jC5tOrqoicmHo7J/ZazkeVEEmbaqIBvxFLuxTluw1PJOJKmRAebFTRGVAIZ7DqOw1R1B1DJ5T1ubFdnVyWVNv/q5Zsy3vRHvrBfUhNl5Y6YsvipGcY+sR4y4h7w1no0j6NRazOdy0qHno0kXlVSO7+7qXNJfZ3Pp4z1f3rHv0YH/Xlc/v3/FYF9utN3gCnsbpk1Orb9uQCEaD1u7x4YGbXrvqki/fgpYiXVODaPzfkNZUG15TUFpTTgfZWXdBF1lTeIHU2iHP+LzIzOfxVjdrVBGqgxA/4Y8CQxikvEbi5+yFw2oN6oXjzO7G1+f0REo+x/CUpxpJP3NeP3ml1BXuJ+KgbQweEaAsnVkj2UtpPWcP7JoTiKFK2wr5lUKldXnzhBZQJN6UstaiVhL4w66K6izdT+xaTpbMI1vXHEk+n+lAC6bhsgUn7yvtWR85PLqu94bX0HI5Od7VwsQ/6LphbCH8XU8jWi8nyHphyHr5GlovZSAGLemiaASCyopILBrzex0kmhtNQJlWXjtJFw5Lw3tEmAxxhD9kMatHIoDGkeD9y3kWz0X3Va2eeG5fBIk6CTTARMGTv3zaLqzTudYPjacOh+g5GrJ2FDHmRswrhNgWE151/74um2d2LVO/5MBg74aBOqvLEA+t3r4vtf1frh/sPvTcpdffbWPKS3vWcXzH/id3VfnXn1xXFyxDC6iiLWpf8JFv3Ljj88cW3fjRI51bhyupXe1Fk3M3/ywIwAiJNwiAQLHf53XasD+BePLiWMSYsV0MEXkFcvzo5ORbGT75Zgqq0jDgaajMdiEn43jAASWQh/SWOsgOwHLVM0jsOXY+q7picDOvOAETWXB0h+Mbczqpj+QBesCOeAJbVA9BKjsSJfH83oVDHkRFvpSTc8d0tbhJnhbE9oqxSWF9eZ/T91DDquvG+lo5WFIcrB1uKoaRzFvsGiPvdCzcuPzYmnrHCoemqGmqe831Mw+hxRzP3MX+hBNAC1gE1sD1af/oYgiWL128ZnTN0GC6E3u7LSb0Pi2wRS+fsO7XQFETtzKM2F3F8Cwb0EERfYwo7U/wAstTq9WEE1xhktdSklfCEFw0l8FChGwwHxkxPqEmXhjpOfGtK/Ry58YnAA4jiagRa7ByODofHgyiEQHOgTEPSo4juQ7kt8MXWUfEjg1kjZmhi6oH5SaY9U6qjzjImQ2StRyFoWkzpAAxyhjhr3v210F71f7Sls23TC7oKgm1rj907aH1rWgp7t37xJ7UusnqhCVUXzK8tGXLCXh71eDabbsaWhaEB3cPDV46WpX5StNks/+SXTsvKW6e4IRif09Ia+keG7pyWa3VUesqi1g4rSs+NdB9aF1LzdCGxuHtQUdvs6uutspSdcuaoSuX1p55PVrrMfCCxre4qbSt2uOt72EWB5qGY2v27FkTG26iSQ3uRFLjx0hWOsF7JP7GCZw2i9GA9U7FuxxykN0cqg9mDz84gmip5Bx/CMqAkOgIsgJIwKQ98BNqfAoYgZBVPdVmufJgYgWFc/DioB3cD0hn5GodJMYP77gyjVKQD+nByT2kyCG63ufqhHi/FU+faL3z+e7TWyevXVrz/PZdox9pRUrfM/2Tqc0nl80eZm7af+1I96wLP/8G9JTr+BcQebnBa9gD4LDpNNR6VHagPNksZdYgTjFjUm2srcsFMM4B2CX7PtQA2UAPeUCLOMlOJRmJZGDs4kqHifdGzgNGjVku15jlVmSdOfa8jC9w6vkfOMO1Xm8s7HCEY15vbdjJvjejZ9+DnUpbHb7WEd3r7L9l7iZj4gAVEGKKwmch0C+HFdGUov9GtXJMiRL7xENyMkKJL3FRbWthIWjjfNDkZLcEDWkqjsicbpReT2QR491JPETxQn2I4VGfD5g9igWJQymsvAoE6p05q3prw4WNjAJDXNK/eyTU5NMwJrPGZlzcU2DEz3y5Y/vimE633ijCheNcusDoQ3AfWsvvo7UcgFaVvPZgqmSzO294My0nUgULT2OQiAQpqEVez5F5QVWRLfJgVkjAcwJbMJwchmjklePyDRQetUKa3WJOR5AbEINEdHzuMzj5xeaPiKEzUSAmJor366gTc7jW4bXAtDngeSRzi8lntRUb4a0PuYKmzAvmQCD+Av/qzAN6K1xucWT2W706Q9CRMVht8EGnMeNHQ0546ePovyn0gwV7c/xIkg8IKxfGvMCtbKOZNuKRNINsuhnq1JvfEaXyw049z7/6QRd5GcLX+XeIDepLI2YFqkBVeaQ0hPOy4exHLFS8RaFKPY/JHc0ENXbILoMpqBFRsxxgSbZsZUBAVTpqM+AXcmSBFdKRgdF9AcpRAdREocBmNrtpm8XMEU/jfJ2I4xGtxzTuIOIOvMiiGzjmLEEOrZOliMQ8lIIbOZGRkOC8mUhvwFclFRbi/kifJmvTLZ1ckaSAKUce7IjqjM23rN56rd/Zv2xDfOzq5bXPb9tUM9oefn7j2p5L6tj3Itv6py7dkBpLFiU23rYay4krDgfbV7Xjvw4dXNAxawRZeYvmxQ3+QuStG7iRjWPCMyLIM1Ls4qnYo3EkkKjQsqxVgu5kIHzzXEJZASwkPHNC0xSMLCON4zmkLQJWSVuWk3ucT9pK4x3IH19Tz6M7syIXDeiehSvzRS617TkTGj87etrTaZvTAQHicGFnWK8FdmhXJIxfGjyOaKO8copXfQJxXhhndlvBi28qEXpqCCRcy3Jv0qMF/JwTw3PPSncyduxviirHYGv2vnB1b+/VL+zd+8I1fX3XvLD3nrvvvmdk33AkMryP44eOv3rFwS8fX7jw+JcPXvHq8aGZg19/8TPfSG68beXKkxuSZFzuzDzJmTmR+Dwuy/MjEu8Tm/Uj1vq8PMtzTsR3mYDi4iBUlnVj2IjfzsISueq90F5OdS8su+PqXoRWC/kg1T0VWz3/efN2knQAUzZkui7nqWp/JI4bYbGepHZHInpuyX1PyobynJIsz2T5kYQo6120q2lbEvvWXO8ipnNz9xO7ibdk36Nb1t6UgFbiLBk8gb2LmSf5kcjB0fW9N75G/IudLZk09595/kW0BjJPsm9Ic335eXzGuf4tlcfXoZ4IdWyT94J7OVW9FkpeMVbuhSfGNMeZltdTmWt1z3P1kaJwWBPIznVOX8XPJUiBFiCS61CTPGPq9+Rp1F6uiwyHXBEs6uALZbKxwM11jaWaEjDXNfbG8+lHt8uOsY0faTLoopknsC/5cuoaY9/74EX4v0MrZffYQHo0MnMCe8fSKck7RuQF8wGZ67eIvCCr2WLCGp0gR2iHDEhiOwXEibE/hUZKS0KD5iaUGR4+eiUDInLGx3jic+UH7aMkEijURy0Z5PMYJBNSurHgI7LiIb+bIh4k6eCSxTFJNUilw5ZiF2dIntpa1VfsFotMrck1V1ex77l8p3dcYbfe5LHv2jp7GMvWzrPvsmYkG8hp2tZmfJbW59EIbNaSTbRDyBdDhjtHnJRjnjip+bvOHyd1QX3OESclXESYFPN9g8ccTY0kY4MJX2xo7aa1Q7H4xpNrdjzTXqVx2WwVLeMdycVJT2xo3aZ1QzGcW3P6wVZ2scvlc7srGoPlyWhxqKJ9ecfAFcvj/U19RpO/1O+rbS+tSpUXl1R2rupu3Tle35WiekzN2XeZl/lOEIKj+PxLsa/IZcdptowCh9pCGtk7mNBCyAbRtxJyYJIA6/sCH8c2qOSuJlwCSUvifLVlmULDPF3xEEKBhfLJQaWjTLIX19FJO2INqPVCOgIgnXmTEOBrSEQ6qRZprOrOEHuXhDg5acPjjLV45sG8KGSdlC+NNtIt9RTJ/EwOIjlc2Y0T+MbB6w9ZXI9XMi7rSpyTu7PBXxlwakz6ZO0NlqPXMLvsjgVO2GK2Zx69fvahdKfZZrYurW4g83YIrZE32PeQ3vm+rH/aLDjmm2ez+qdJJMktETuU3BFy2Ixa/8wDQjdlBk2PL2WDN1WA0vIwq0CdbDaDmgRKjppjVQqvBTm4OudQEj4cgYFJoiUcWc/h0E1GktqF+6iMcmyJp0hUubLDYYU1O3Yuvrn1eaKLPrZj8tpl1ex7s4f2XzPUw/x+Rh/ZvXBFavrkMuYoGUdkX7P/i8bxPDFnpv9PY85sdzr9ApoNi6ixmRD5+Ry3ZDY9jFilefZA2WA4PFjG3GpxzuhpPBX/Dvs3UAs+kzbU1pSWBItzY87K3aqYM9OcmDP17dyYM3y+3VngdrX8oR75JvaVJEn8IwXgfOkQvkeC0mgMEhmK/KA05evt9OvtUlSa+icOxsWhIMjWZ4VqaLrV5edf05h4jUP/fd5jX+Tw8t/WWzW8RftV3m8/mvn8Ca/uZxodz+s0b+sDR6Ux6y0t7S1jbjc7HObZfeG+UGgwSEewlPm0u87trnfPTpBAHxw3yr6J6MEHnioQn+Z2mATE6BWiyItQ8+TcLhCjFlYDzBulVkWgLjpOzd5Eh4zGqbFS8Ay8NvP00y6H5n2t9Qc6h/mxzNNw09Muj+asaPqDzu14kBHhH03GzBG/H6ZN1ox/9h23CZ4odmeeIDFqJqSjvovGwwUOpzUIjcAxZH1gPdFh4uXkuZS9WGjQzzrVPRIATwCgMgq2bL9sgJoLN84bn0YS6s+JUINf0Pr8R17KrL3f7RWgWWvkccSiKBRbT2a+5yiCd7Ivu02zN7hq3O4aN3O1xUll3gAazaXom8z4FAk++Y9j1HJOkWQlWqEQtSIwb4RaCFxYgBrOO0UC1HAat8YQu9Skn/0RUznLGw1M+exPmXfZJ+1h02z0liFj2ML89FYqqzM/RSt7FqTBApKfv77IabPgoGbE8dMNZdRdismEkT2a5KzSPIk+BLz6kOnaSG0arH60QRLERvVeen6epBR2Olx4YRYrivJnBnp7Byx2S+Xk4YlGv8GxaIXJZnJVpkKhVKUL/blikcPgb5w4PFmJgOCTXeM7x9LxjRunk/0HltSOOmyblzVv27QxHu1ORLTaSDIdiW/ctK15+bTNMVa35EB/ctOmjejFf5V5Eu5D38uCdtXZSUx5puy4W1RZXOdmjKUsxhr+1c0387PvP0PnfwqNY408jl2dHe0NdTWVVpNeS8axGJLAFBaf+KJnaZCUp8VbCvuIyXzS8SI5jNFQKSOaoqmfySkCrArIRiUa0YSzVICPovGpmjj3IE5UISA84PBJNEyb8BjWjTls08vJGEbSSTyGie4oGcNlm22O0Vo8htMbN8bTYzvH6TcfgKc5GyJrH/pmGwRFLhtibToNso990Cei747hY/9JvGfdKEDZc4QsKoanftmcwG/yzUj0JiRPCNbvw5IfnPlb90J4e6R/Szq5Zd2yMvpjczf+wWxeOtC7b6ympDy0ZAH6IxYqx+GJP0Dz/F2k7+OaMlcXqCmzkOyeKCdzHPKqxLqnRZ2Iith6EBC/vwxMS8rkJVPKEorUQykpg+csgah+bkkZQSkp8z17acznjeHUNDGSmibzJFMcW7p8dTK5evnS2Ozb3E+lhDU+KYENjWe5+awTDe+vkKxOwVNpS21NZUU4FCgucuGaKqJs6ffr0Rsl/HYLkhPxKDK9qgCD+JMkSRmSOzJO0vqx9SSEjyFpf4JSylH0JActVqD/0Mhsc5Gt+2e+GWaiPReDDKecFOh+joyVZMYfuSgkjABofnyyi8yQTJb4vQjurN4+pzIH1SxxIQ5i15ogrc7BOly4KAfTsPpjl3T1XPP5K0i1DcvEkaZajdlkCMW6qpJdS9uiFr2Nr29/iRbj+PWxK5Mj+xeX63WjRz576d4v3DzOvuAo/q2hq6FTr7cWFYmzAhcs9WvFrsEh8dP2YuaXj3zZzbwvtGw6Dqj6CLhV/CdBJ6xLOzo7mpIk11QIR9jotRyjZBvEQRBsqpoRBUY5E8Wpo1bUue8EgWYIwhWyZDs5VQBB1vDPQaV0N4uKCZa+iO6iKO3lUzT4gg2xwXOiQKOh4XEIPWHQAjc/KikswE5inKVVTSdVKYFAorfD+D8RZyQmaz6Es9xaw8mS4qNNex7bs/jKtf1FgzqnzuTROyoTPbGu9ekS+FLAlTncEi9uCTCP6R1+20x7aWd98evMQ94yyK/9xOEF5X0rkW3P602eurCzavGevszfB22BvwzvjvHiiMnnNu3XlSb6ayHmg0fAzziOW4/ePwU+mtbhGmh+L+LR8pw2k/P8LAg5zfg8YaDIhUV9wIgUJ39J0M2SnHHEWx3Jnm51kPwRPefvmlUxc3PrSP5vURrDVHnKTT07KTdJryOIbrGcjqZYnqqFqbw8Uj8NFZ9adW/NttaWLdWnVtwbLA0V37fqvpptLS2ba9DvQOmRcOd4Xd1kR1lZx2Rd3XhnmHkI31p5HwINnEKgW3HXe1ffFyjFqPDv2nEMPV5bN9EZDndOYN0IrYtJfP4f2tJF5Pw/DnHyFLnxWWibBRugenkcq3VEVULfinMnYyYR1UJeAwUR16yKSicuyGpQKlbRLlRjna8jXQGyEZxSd8Gk2JjXT8CFpsLoD1IpC2HBV0z4QzqYpwnj3miCdBzQkURUpMIH/ovXEiRACzSCVkPzVNDsvASZTiL90FzVGWmfTqW8QGPoThjPbPuoN6iDDpNDFJHZadeEPPdktsJE5hm4JPPMC/TCXMJWeByz3wi3Fhe3lTJNVv/Mf2/ZvjXzBmzbuh29bFZnE8GSnLx9VI4XASCXPMjq2RaW6s6qWyzWocMKCD1oIWtzVqrRYZ1u5leZt2Z+SeXrpWdvZI/xT4BBsBLcmzYN9MWqK6KhYI7nMDUIIT+1uKMILYYwTTGc59HjqOsuojpxSVIpdZ+353l9gQVcgYKSa7uAQzCbixVNHi7T0ol+kmAltkFyEtYvavQ3jG7ZvmW0YfGShs74httW73imvVLjttoqWpd2xUeb/PGJbXu2TcSXrYl3Sc7C2c8N7D7S2VQfSA6MLqnoaeL+hJ2HnqrmYLSlrro2tWB1x/i10cjG/qwLMez3xDqjsZ5EVU1iYE168dXh6Pbh1p1j9Z2p2ccSC1oag97hurLm2mg47AgspPNh4u5nlvGHyXn9vXnn9UvQXFgYqlCT7Ax6oJyw9LJQ0rRZKU8JI9XIo+f0WaqFK4XxcvVxqsnlR2fweb/fsZVUul0VQZstWOFyV5bY4FacrM5dGbDZcN3DyqCN17or8K8Kt7sKw1W5837jzYS+s3/m/47kcS0YAhvhyrRr3ZrJ8f7eVCPO9+z3Ou1YKutk3W6BG3LI4Fan4wJzs3EBqKFkpFSPspIqllTI2mgVy3X/JHTObFHM/vnRCUDL4FJU0YKI1cg0vvTiD41HxGWvwgo+jZSxkCwcInTyA87FuVHpMJuikMNpypA84qQlRVKWcYJGL+g1QkfL4wc2Pry/q//QExt33ddSy1sMpmB8pG3gktHq6pEdnfU99ZGZieS6o4+8vHnzFx45ui6J//7C5s0v47+nayYuvfWRqSO/fnpTbGL/rY9OHfnVUxvhf/GiIKR7FvYd+uT05iev7O1LdQsGtLRiSw4OL7pyotrgKILazV949Kb1yeT6mx79wubpLzxC/0YPWfHYbQcmY9Of+u3RFY/fdvlk7eZP/56uo9VsF7OEfwpUgkbwf/jMUF1tVWN145wzQ030zBDLx7BEwnkgC5z60ZDzNAKQtWnK4Vgl7Co9DwL5zE7+SZ18PEh+DZ8HxcUd+8Fzf0GnfprooR8Xs6TdZtMYimrjzaXR7npfdOqOna0t0Xik2GJy8K7klQublrQGMm8lhsoGNrR7k+yg3tbgLHEjta69srS3McxEutptTqtZV9VQW9q+JJH5fjS8nbH6kAJH6rDcDK5nIfsIcKAZ0aYFdyXjYPTV9kY7LfDECiLxYeIQ1IKNN/+91WTSPWgymY0P8ry/tS7vNyO44U1+0WW0WjJniowmV+aMxqbxG/3wpnluUBv/btjGvsu8jcZ3IieHD+Y8xSRNWiWQcrpIkSCAxoFwOGUP0jYa57lNdQisKtzNrr53to15OzMFibj+B+v3cAr/9IEEWAiWwZNpbzKJawYmFyYH+3paUk2N9bVlpdjzqJe/pbMTIj6B45xERqSn0bQannAVjQ6KnEY63SZpwFZVYT/pXNu6fwyLM3s6rj0fCxIKvJzbqQA+NQ5Rknf9F4ujkH6O+O4wxYOsIE4UsN2LsdXPi004Bzat7J4/DzPlSeoMF9Vj3HbqrJczZ9Qy1bDv4hjorz4OS555fOcOq0f/i7tDlq9rPd6xA6lFdU579UDyCPPNi+CdP8ucZq+6+tDaIx5dwJF53gNrjaZLnRWt0UhzmY0QpoP7L2aC77so2nUwnbOv8X2X4QUywJYzbyK+jPWbyQL5iNwFzDGrouqe09ripMHPcUHlW1YD8akr+vuvmIrL12sDTQurqgabAoGmwaqqhU0Bblvv5cvj8eWX9/ZctjyRWH5ZN2oNBjHUUCoYTA2RhT4NxrhS7nmgB2ZwC44yxD7x3KyUWrnaWa26yJkGy3icNFcyvQE1vQE1vWmAWVOhamfn7Sjk1z/D9oqqBlpmJ/vFmR7u+czx45nb4b7j8OBM5BiesAn2CDMubAYxcB2uBICrRJLaSDEYU2yA6upzFi5SlqiJljk6N/Q8ZY5UoWJmKdsCrXLURaockYgIuXQOhCuTS9tDuJzII+465+tOdwbqDD/21JTY22O1LSaN3cpp+QXmm4XNgaZFdRX9na2BTwgal2NRtdFv+KEn2djoS6Tqq0wWCA07dhDCXcJexUygcegAz+OaRk3J+tqqygqSldZiAh2wg8zoMBqN7hZcWRnZpY6LKCJEiomQLRJaiOjD4JinEJEycvlViHIrEMG8QWThxsREW8kVPf1V/avqW5Z0VJtTZlOxXrAFqkuCdSUWa3l33fIFrfX1LQZ8eF3L94o13UuEzcWJvorrYvbFnaklLcWehsG6IsFtLPHbHcEKZ6Dab1oO25PxZF2FxYxGt3G0kVY3/wp3C7NUPicOcL5TDc+qzonL215WKJ0Tz6n0BsnWHLb3mKW/NfmcO+42hUr4JzMZs/HPbifZ38exYex7oBiuIDHgxYDU6qE7/KJsTUfJRrsDbx0GBH7OLj+OgLHQJLGLSGR3FjofDLM6ioFTKhnUSPAshZdm3CDFCOT2kWM2atV9OLylX5rtag4ScDl4gFG8hfG8J0lR6jh+jOFICADpSGP58QVzlmbciaedSNw4D3J3SpW+kOx/oa74og7+mhNAEC0nuelw6Aas2bVdjiPoPbF8aF+5KKyIVrLvze7ZfVCOJRjsS9RWLY9mfltRxhO6qDqb4l38KSQTHiHzZge2Arl9i6VEpHFs4CawGSwXOdZnU2CV5wCR1L043ARDAZpwiOYi9aVxyATHgCpiUmHfO94BxKFQuBfDyL1U9SWluCRn2EpTmMomFe/64QOZ3z+w7fHLuroue3wbf+rUByn+6x+k2DUd20+OLzuxuRm90lXwX+ETzG/Qt0WUmovz1lEsIMeuclc2BYLNFUVFFc3BQFOlmxlX/0J3qT57JPMwfAfoEO2/jvMfedxm9Cy0IoqVUzkhixERs4/SDc5SWAFx2SwW7xEQtxInpYQryQVkkgXg8IIqk+GgBMfJCR6ysDi923xghJeFFXB8kaPi3MS1Q3YGy1MJtdun6RnB4ipxVlW7Ktuj1fuKVo6XtIzVVw4FrcLfRK0Y8tq9NgN/YszR31SSKLNbTSmqvxxEsq5PWIek9iNSBnsdNrl4uV5JSEsSueYUJ1Sd5sxWPKyeC3iOkof1BdCep+Yh9dulcCxgHUwlrAln6FN3cTsNJre2/Ce7bshsZ/8Hfr56Smtq/uLsoaUkNpZtZ/6F5HoMgvVKfHjQGVTFh5NjVziHYY6ShdkS1bIuLKz7HEHdArIm4TUDl4zV1IxdMrDg0vGamvFLFyyZnFyyfHKSf7J6bP8CXOuqevzA4IL9Y9Wzs9unp7dtm57eTu32e5CdaER2og29G7ITI04LQHZiihRpsTelouUs+qsL2p0RJ5vf+IdWv+5Bo8lgflDnb/07rPi7+vf1yOSzWiFfZNB7IW+1op+Zw263O3N47g00BVsQ47iKvx+HZyC2WA8/k/bX11ZXRiPUS473grNV8ozyyKa9DjuyWssg0DLYpuARE4tjxU0LeC1gojpVoTsDYm1KNTg9DYqRN5I61HgMWE9IYu90ch5UKiRmimQxQjIwDxLAaUklvfMiIx5YZLR9nsUEP0TQGaRvEw0Im0EwXABKJh+l1pdedy5kyA7nNVUA6496nK9bKxf+k1Aj9sZCHUt3I6FeeetsCUCDLK1oDUBnuFGqARjJW1F8sinFJniliCxv3m0yTuzO/KfNyejgsqvO3Jqz5JCxyf7pD7MWe03xCBu31ZYsgvpuvfm55yyGFvjdNtV6fN1e48689P2gi19dXIKWOqanNYieYki7XAB/lQ5AsKC/J93R3tba0tyYqKtVa90KPQ2nGupxbKKkTbMKTclaNRlwloyKIatg6ylpUa1BR0lLNr4H81Hq1ZRxLqwqfGaKD1PZ+D+AL2sGULyQUodEcEsJZr3q40U9QqwX9OfHzsyHXedLb1Tj1RXAq+EBpj+5BCzuqqO+jgJP0RUwZRTyu2BrJp8u7QpFclsuzM6Z+XgOpf4+S6LMWxdiASVUxDt7uUS3HOhDdHs1/xDig4vBErCW2ZCO2qxrV69YvmRyQX93F6be+trK8lDQuti2OMsRrXIVoXVD0KAvglpdBGrECXw6LQCQzNUbdHEgajVaUYMGGGhFHXWxAAFosMljVHMPvR5remYLQ0o5UF5iolStk9TuTf+Ex5jNCDt9lgXOfZReWkDTBR5l5vW8WR/PfyRCA/QGXo+feb6nZ59lpp+Fl8Duf/RZnEB553meSdiy3pe+6sKfB1A3ZO1f6HOBET3XKPNsUwGebZyPZ384yzafsVtyGftMz4exfNkbCP93FOb/zNcu2i6eWZ0jJxhQk/k4skd4UInkxBv4JEd9bU5dNKxwJxzYCYCDYXF6fJaHJC8RT/ISSUYb56BVCBjpgLh8rqB+/q4MKTDARFQ4aFm0+btko/zUpQoYWqpAVmJ5ZQ+C64IJN/aKZpMhudwwz9BhmeDw1Lb5C6NFDSarmLkkvzTad3FltJqJy4dHdow01TeE7n/CUNMZr2sfa6vpJ5XRDHrOkl8a7exZWtNK+KstivRNYBGhFu4EhdoNOe0/UtqN8HJV+5tKuy2n/c9Ku07dLsaUdivcj/Xfs78BQPgByedaBANpB47DwDZKtsaHEq3U6ISQ5uNnNbSwH1psnEagx8DpwS2gl8vjiTSpjKxgJqTOquiBAmiyXc284ndov7CuPC/V3pJQ0EJ5vnSv1F3keA67u86DRlTQABqFC7I5S0JITkr/5Epe+CIyP2ZnZ+3tTN3sLzqYDTMzDbPffUEf8d4NfwC/vdZQbFIK8cDjmU84PIyD+VNlf5DazyszD5OaVMPMVekirKN1tDc3NdSVR0oCHjeypIfhsLIzPYyMWa4V8kKnycgCcSHUAA7v3gocmz36kluiSt7zDUItWjIa/EujsWjIdrLxH0JpK4TS+c9/S8yAJuaghHNQIjEgQhFvXc6DGxFpFrMsx0cvCjOOiNNgK7bwI7K79IsuCm12m115gBqpxpde/iHx8UAEPNlBghqNpDfSQcAXuoNEmaba8VHLnKeOGD0bZYZq/whzo8pBUnbLzx9cdt4KYxaLcWTyt49YCvtSLjdc9iUITp2r9phxcsM+IZXrckG8jtS5Iry0UuKxqYLthpz2HyntRtijav+z0q6j7We/iRbuKwRPDLULUPs+fe79iKHerGo30Paz76D2wwQ/bTeytP3PqP0gwU/bdQz1SeBIjG8jnmwBIfBW2hagQXJOi9lkwHSn1LuK4r17yIqApcxT2hIhcXESfapyE2BvH01Hl9tPgVWlJ4jNB8vgSICw0kdkqJu3MQuPS2CyNNQOWS3n6qfkvKZF25xSBbdwRKre5qQV3OJvMG5SL4EU7Jj97Rvcf+PCCZmn4dWZG+FSXDiBNTAnSAk3Us6NuT+OS7llLJdmWFLNTZpLvpnIy7gkL39A2km9EjJnCYlW3i7Ybshp/5HSboR/VLW/qbTbctr/rLTrcDsarWvADzmWmwJ6XN9Wy0N9tZYRtbAc0aoWsn/PfBJuXJc5nfnYOjideWIdXAGn2L9mPpl5cD3cmPn4ejgNV6zPPA6n8BijZ9zFv8X/AFFLDDRDW9rUmKiqCPjdTqNe0uLwScOUB3JMvCEaCSJRadIwgCe5vGAjzamYy9KknVDVCdGC3VmGTVIc5+qOqa/x3N0Ry+Ll4ohSZ3JWNN15wf1UBz0BqQGmyutHC8JEy0maOHs0y95SJIDcZeMdpPoN2S5PRsuhS1UjZtcro9Ou1uLFX9p3mBTv2P9vkxOOkpLpZ7buO9M93M/c1X73clzGg32/u332kgMfV9WNaag/XuyF3EZY8gIp5NHatNfn/v3GzO+ePvadheyNVdW4oMc1Xx+cOTKAS3ogeiH1BAjdtUj0+AAo1G7Iaf+R0m6En1S1/1lp10ntJJ85wdMh4WkB6vo1FuADH8e7Ij6P3Yp+mcXcXZGQKo+mqp7I3CI24fkAgSqlVrpG0sbOA03y72QL2uDD64VK2rz6qzklbaAl8y5/KvP+3KI2ELx89l3ucv5ZMAj+hM/b9PZ0tEXCWO8Cg3BQlNdNlQ/vFGSLS9FkHPiwjVU+y4/LiUn1Z9aR7B3IbpmvB1KLVSkAVLVDa3J7YXAOH7ola8Ks6kOrhjbnPQT9QLZSTjdsO83ZvM1JdUlMI65wbCunLihNEsh0MszDW+/dWFedHk5XN46tGWtsmT42uuG0FMqaGm6sGWjwNi/ZuKQ51ru4N+ZpXtHVt3e0+oX+617kn21fsyfRvqwnXp8oKU/G6ga2LF58aGkse/g9HWkeSFS1TvY0jnY1tS+oL+lOhqqWXLNkJsr+bNtTh3qAxE/fZQ/xTyL67cf0C/rAjwu2X5HTfkpp/1FO+0eU9rdz2g8r7Ttz2n+itL8FfiLx3ncFnAumF4yD1ewj6Siudj21fGL15OpFw/19XR3NTYmG2hiuWCnlV+2FvRZZox/sbmM0YtDNkJy/yOYSNUifkxKYGqGgg1LaUrOBEXHCpTKticEJdLDrnYM0GYSNJn30/7PwOSk+vBu95MPiAyp02Mmlwi2r3hsuGDc0GNSoL/RBBmlhrTjXgxByERjQKiH4RA0QidMq+/TzfMlt6AFr/sEH6GlGWj3H6clVfga+hnTSMe/pwg/RMbr5HgKgDj8gjB4GdKygO/+z9JKPfcu5nmWCQH5cFGjRw7TzPUzP8Xqa7EUW0tTbCXh8wf6/rXkPMooa4/keZESPMpKBu/AnrVihWDpzcvy6aJLfaPk5YldxCRZIAlcJc8SZZkkuYO7kxImtbRbP7AmudtH27v7VHVGLySbUhZZv2pG87Esp3/IdV7T1Xzo5J6f9Zy45eGeo6VOZz+J89tPjLZsWVsFXOtb3V4pwJti+nOPThz69r7J41bGVNcVlxVpNB04cfMmBzqlmT3hgx2D7gdVtXPzya8JVYZLzfsuqqa2zb/Hh5sGq5WNlQ3uG4Du49Fj33jGsyQ9lHiY50gfhVhxn1NeTjNfFqKQTOCzriI8H2+4DPqRt4WL2bdjO5AeQPTnXdidRHCoT3hGEGkx12BEnihZRSWk7MgfbXKtVwqYhaSVgDlYk6rI45XD6hR8CJzGMsacxixyzuPTkh8ClstVFUbKo6VviixwIn2tOs+eIhFdOK6ptaXi7ypaOTJ7Y0irlZK8rmLpdbxXibU9tsBa2o6/Ujx757CU0Z3s6P6W7VtM9OKRpVZnQSNaRHOFEli6UZOz/ERmY335FTvsppf1HOe2HlfadtP3s35HydZTg+Tq2e0Hfd6hsvxcHh6jar6DtZ99E7U0EP23/0Zu0/S3UXknw0/ad36H288jZv3A8fxQkkWZ3ddrU1JjubBxsGqytKSslcRekyn1rPUnAl0x47DazIEK/+uRjXqnc5LmBqS8620uqm4uZDT4b1IX+L6d/BKA7hU+7oelmnTmnXVxuBCTa4+Q4ukwg8GGOd2+NbW6xeXjH+hfHnwhrXBvaNw2Udx7+3MGNT1092HngE9um/6Xbcdnaz69bsH+8lrUkhzd1Dl8yUl47tp2rFI2CyzzoKDXxPrfZ1Glprz/UYtQ7Lb0NV33spT23/eKhZT2Hn9+39olrhpYtP/7F9LGZW5t2f2Jv9XhXJL78ir7xa5fFyLzQvMVYV5qguhL+ZNRO8gOS+ZqU6ORMwfYrctpPKe0/ymn/iNL+dk77YaV9J25HOtc0+FeulLuO5AKuBt207gPJvMqQmtTpavVRcrJwZRfxnAwLvBQznL8tYM37PY1jWeFGe0h9qjxkz//NvH0MPp7n9p+dzN8HQC+XPvsiF+MWIpu9GjTC6rQtVlPTGGvEZ+FwhLJWVM6at/sRl0omIvjsBhbayAC2Qh4WFzK+HSSZe9b6luPoPzQOJ1A28lvPj0MRv7kYRF+67+I6q6Lossa87IbPckpizqvO3xFrHjrckEhvmiQc2fLs7R09ON/jyI1NKVdbce8dPQM47ePoseY+ZMevnPl6G3xx4d6RA6MVMDW8f7QimRkdYA/0felynAeytGSo2POV/teuwskgo+FVPvfsvzy0gVnc3DR9R6ascfq2lfeun/1cPaZXku+J0P0KaT28Bwq1X5HTfkpp/1FO+2GlfafUTvK8EDxrJDy/AEo+Sv5V4ABheE3a5XICUOxzhl1hkgs6N0dh3FPEsjxnl3NEFq5To85JKcoZBy+059zskuqe584uqVSgUSpB5DxVnSNyvp5yFY/6eXvK2SXn1Lxpyf1EUlnyohNTWs+dlvL5rse2yzkp1x3Jz0kpFs0+PKTUvOnvyiTyc1IqdHBYoYOdEh3oMk/xd/KnQDmog8/g3aTKirJS6ju2WU1GjQDKYblO1vXqa6CGx1OBNW+0DjWkNDSOQxBIVtugiDdjpKmyQCXzZErqJzIBLT6OwQAxXhgBIBqS1F0hhnN3F/Fw0x0QGQ+jBC6r+gJewyfPhUCQMu7K24g9eX3xfZqvAG+csECsVyPBSh3xV9MPEKXTO4vzkACBRboiOcbDcmRPGyGsVyMUzoFQl919kQ5NRvF5YpwYStpeTMCwYnXAEEuKP/LTaGL8gTWJqc2j7Z4SzdHZq4+KpZ57mI43mI6Io6rU1VDlDjiMM12M+y2XU+/UfUfD97iLR3taN0e9Drgy87jNz5/6YKs+WF7njVaLWg3za2ZB03hlv1c6y5h5iv0N8WlMwl+mvf19w0N9k/2TWV+G024yaEW9TEmL26DALwwyGq0frQ+NFakHSI/GNQXJ0ACthtPSJSttajmCOqjRyOnrgnJ6LbSYLYyy6bf0nFghyTN3IdiBGrnsfJi4SOSAJtWJzPcUVtn6G7sgzCLgydHLaIFnqPA6WWynrPywKBEmdE9D9SCaykwZDZIjSD5CFlKoLKEiRaSLXmQhtyz18QqRusobg0W6wuXdvNrC5d2ypCmRbnFzImYXSy6y6BvilSvPvstrib+7XPJ3/1axTa4lsnSBJEv/QnzCz2ae4pKIh0bht9JeNF4hJT+F1WImPDQKowrlt3A0uIAHcnoJUrMGTx3dhSNJI/5fc1ce3VZ15u99q97TYsmSLEuWJUuyJa+xIi/yEjuysbM6CyVxEpKQFBwIgdCQQMKSpkkIWYCSQlLaAD2HAC2kSwhM2rKWUjrAlJZSMsN0b89Me+jCaUlI6RBsZe5371skWU6cgT/mHIIlvft97773vneXb/n9YCxU1LzBVN8iZ4gCBYcATAIqhFOT0IQUxdSjb4t7JtajIKxgFrQuqtBM1ewuVKJhWLCgXqE6U4WWA0zLJCejQgb0RZkWlinQHLAxtGtS9DJJpgdZZI6z1J9HHTqnNqX4KKsFGOk/c5AVpJzBdexSftPYQq5p7AR3bLlp2jnDqZHZYRoscGyR8fNVio07iJ/PhHp7MNmk9Az2DnamG+ri1VWh8jJqSdPwNJtuSYNNmLzNbDaWBHA9pMitFiRFoPm1xoiQv2aS861KHzqHNGWyqUw1psrza82bt/URc/akdBrT70TKOWOgnHkuhTyRV3gL8/wV6s5TR4zl4gvWJEK4ia7jik7MSlGL0f044znCsGwYEK+zhP3ZMKT+1qu+tW1G3y3HritKHJY68ClPIuJhtvWCzhymG1nbyhpu1h2v7QDCsAIusWkzHdZwfIqfmp2wWGcT07gx+H+Ql2XZRNwYjgJujBKT64KxY5yTBsNkwWD8NBq2j5fyzt6esbickD9mnDFUYlUhjYAC5nCcRirMFSA25rdi2JJaqxJolUmMb5BTBcyxKmBODxPWeD2ySN9vGTwvrhZ8BG+vyD7AXTv61nP+h3/A1/xwR6Xj+Wz0Ea5+1e0B+zAHaR2oncyPc8leyokeoPfOici1GFdSTrogc4CDwBA17QWkz0WPa7zPsCcJ5BxHecQjUAqTL1z05htc0GligyXwENjV4UNP2Uq+9NST/i+LL439YN6VTq980ZjIPTN0daV1gPtcbg7EB0YOhA2/mePfOWL4d7aQPjAe3FOWhHgEBVGSS2XI4rCpIRYh34J+H6Dh6SmCVj1S2lJB+mrFPMeY4wAtFcqIGYIbuTQANVEwo/vJQT4Hasjp5xKlaCjwBYqPVVprUKAGZrBGlnt24WoouZxgo180jAyvSMe9JHM4j1eJLBYTpuUCFFJAmAtSiHL0kXktXx2Y3EU56iTIZNQJ2RD8YyWW2jkMVSX5qsgQOmfyWhRBVBi0jz4V67rgD4Po0yoXjTm2jTq+MeRdsHBKG9+a7we3JPSZdvTRRdnDd//l8RUrHv/L3Yezi3yZLUfWrj1yU1/fTfB3S8aYdN+7afc1L2H7YZpasefm98Zadp04uGDBwRO7dp04MH/+gROkj7POnpJupPGKDJrLjWSq+/tSUzGaOaNvbv/cro6pmVSmsT5aZbBfJnHSYWBYTMGqJVTGglM6jaVKFtxAlh23KxzjypOsNBJpI0uV3JgsLInaP54Wr8mmOffcWrCi5ChB51SpT8AXFVFJFFkQPF4qa1EpvZ95nmK9g4Dh/P+bKkbFmauUsnEaJWCLLlwtAjwNUIplQZDZB1lTDn+hGGxxEbVWjHTNEFi0qNKEehEkEpuRYY1CVJk4wmgEGPNgkXqxhkHLXoMyM6h4Oi+o2LMs01TqtbXQmOKWF9PtL+0befTGTGbLY1fe9r221HNjj925NzqwdnDm2sHoPn5Nz+rB+vFBRIN8dNOWDbfo1DY3X3f1NqC3uXT/5a1AcHP833jRCBuSeaHr7Hv8r6QPnHGU1uYLic4XlPuBzhdLtL3TY8hsD7lIrL0DO3PaHzLa/wYiPUYu0ikjF0nFA/T3YfL7QTpP9WrnnU9/p5jQ9LyXaec9braX3UZ7J+TFGe2fNdr/Hn07R/+vjfaOvPaHjPa/Af3kRVqXfYg/JR4lY96HGQ9dcMQYu5e71CIJvEWvk2i0YyxR5jqZ/OX0XRxbBbsYgx4tkHCaDHp1RWQYMx6NV+rCZh1wCxOA4ZfjWYJmgaiOfswxtDVaD9ylSXECZFmlTGlID5awOLGwni/EE+tta6X5v25GvQrpQmDnUSg4i3i5w8v8f397WtPF0xstyx7wev/DW/7XXwbDUy7ONClluJ9HY/GfPHNZZ6BrxQD3Zgnnd89+/JUXL6/0BbpWDjy8g65vhHu4EbKGtKPlGYvdBphZJs6/SPEWYYOE2mARmQPmzw6xknHMkMq9Ii6ofmZA5Qyoqplj6LDuFm5ki9e93eXcIZXZbv3d14R7HNtcrm1kgrPk9McF/QG+jdz+yJRBAE7aBie1IrM/chFyAbk4uQDpDyNigfGAwdnysVttZdJ2qyTK4nbJZ93yu6+Jh1Txs4oqqsJnJSX7P2CrGi5OqYQ2UhutEu7iBkhfvegWqMN3OW2qJCIv9hosA6UAtUBjkzUUyw8bWH4hqNCiMJZmUQ2t0aaBTAGgmTEPBeQQqyneSFt0w/DWoiPgAPA0Ts1b2xfc5oh2NjR0Rh3bgn1XC3c1zL48Hems9flqOyPpy2c3QP+PCy/gJ8VnkRsFTbwCh4FTQLn5aCZnAaHjk4y/kUXggL9R7DK+5XBlonXCNfgj8be0Vv2SjAo88QYOUHACHCD7x8IBogyUtEpsXVV6Vm3d7I6qqo7ZdbWz0lUj7c1N6XRTc7sYqx9IVVSkBurrBpIVFcmBusaOjsamjg76THdnv45PkrchiPZmbICtYJFQEAcF3WdQwbxPzhIOBYFDOccToGMlAIkppzXhdYM0m4kVmdoiLYpdpTRuR0xGAp/pnX7Z2O/6G7qjK8a7S8Ld7c1ue46jhF5jqXCUWybuQwF0AnIwfV54zyjmeQAHaAx0CuybJADZ0FywZs6llbFgQKZajQGIDjCFWmxeR0QXDN6Gucc2wECNsAgRxtQ5UNR1GXKLWvTmOkpenphQFHxdXwrk4q8b8Ov4cHUCX+tv7quN9bQnfbO4zwSS/QnyuVlsqm9sXtARroxWLk0u6IS/zH4vE+7k3qFYNm50W6ZUJXtT1a2SNStDtTGwFkp1vE6yNif3yWUidoboL2yIZwfBzHNQOxOQLsoWljDIErtgxBYA4Z7PZ5GHjhMxPuFvvWqr9M65wx6J4GPvOyo8w8edoQhA5jhtp3xeipxTVsaee/LsaeEJ/h8ogqN0To2gqoqAz+Ow0W0lm1NrKdgHxkA8A5h3sEMis5XkCGvFDjCO2bCBhVNbvC1pEzanUi9vhJPirD1pBiKCxDY6uCS/tT7xplhrhAWAkk3lSwG4LMstYIICz0hUezUhUeI4sV6HgDFVkBstcRMqsBg7KahQpTAwMN9Cpi5P+W1jdBwUnghV7n0qu+nmHdH+sMxZnAFPf+cLiivg4v8xy1c9eje/cWznln0211zFKuLefm5rxlruttPn8CBn55/n9l8QvtqDfNXo77n9OzV58Y0LlRdTZ97Q5Lv40zghfojKoQ5CQtja4IZ4fnuaQTLS8QX87/LGyoplC9MWUXWGyh1un1zBn05+OnnpVwejok1yqJ7Gqe2hqoG41Vau0ro6/nd4hvgHppdYg5XlDUgyzcRJ04p4iueBSyoDyxbkKhb/kFydXK4rdjdpiq3lVlqv9y6egU7m6K2ZrN6TE6olVkDuA7eE3oepgEMS9kuAQzLBvfBN8ha9PPl71jjhzeTgXnKb6b2kffOHic1OeD8nfTvwVyZ/4xsnvnXQv+y73Gb6THL7N0FHPkb/JnyA5+oesZnN2fuFUvEHKIyvyzjCoQp/mRdQwgSOjto9AO5jJ2td7IBy1GA5J/BQmYOBQputRTjGbiUIZWwfMJtuHApFAGwKWM94NozZNQGY9LYWPUeegJGVYWcisK1vLdItyt8RKzhXHuiXtnnvNoS5AmGDPIwDHdx4HWTgnKZLi+OlkchDuQ+t4C0qbmRjtLZTIgEe6vf5XpymkBguNxlDE25XZHNdQ3Ro4cJEeW1bOu6bf3iwsTZ7ky+ebqstz27h7wsnFdXG4z/5fNlyOYCT4WnZ1aP/9Pl4BT+U91yb8R8yZc1TmhrrErFIZQXEC9nzVfXnO828kTVhThSqqygFhgULMtZ5EeCJKfkPXJLKJCPvoqu4DijR1p/EOH1Mg6hZwAS9mFCDjvKL7UwHmMRgcR0IqgSZXUzUG+bfhD/k+Wo2MmTaSDFtpqEouqFMrFSuyCzW1SmgTraMU4cUnqyX8izHgmSRgayaFBV5ei3nsSZKSzEFJ5hVObAMHEKRCawL761tHDw8nxnZ/IcHG+rwvuK2Nvb4tHAS++Ws3+fD78h++I1bSu3uTfR7/rv8a2QlOM3YK8095lsInEtYg1lHjhzOpfGIb8W2LG92j+wZmrd3TXf3mr3zhvaMdHOX6N/mkW/kKHmsS8+eFIfRuxRPtRt9BTiuIK+Woaqaq1Bgr9aWoRytctIDTQVHvOYutBKOsM7mtWEdrsg00AU2XSORAUCHgdCJtPIuT6NcSxdcYM15vi8tBHkQxMJfxsYKf7muILmz4jzfkYxmnf275RnxMXoPp6JBtAytRzvwrzKhbVtv2Lhu7erLAFu5PwM4AI31+r116DtVAHKD/CKGu2TDgI7CvJEYM74lVxj8weCTVyWOwjDoYZaOScjSCjVQQKM2ZAldKhle6GkTyAuCNQd6ubgOPcugB3ZyUNSJTO7I4lqh7C1XiVcy8gzmGEpERVJE6bzKiB4RQO1jOQoViSUbLDOV2VW7qBZVhqzIZrHaWBxa76FipzrJHl2V7LQSRcfvp7qNBK9Ct4VcEP1gdB805es8LWvOc5x7uXXJDdMHNg0nk8ObBi66cfHUO4NT+2pq+sC9AH+nBrnblWD59o/+rAbdu8S21iWbzOY3DCfvKGzOrz2vRmH6otuXJ5PLb180vHtFEggs+ld0BwLdK/r7lnf6/Z3L8WftrjO77E78qUW7oOGuRcN7oOGe4f6VXYFA18r+vkuh4aV95zlOx787yNvyC4rtTtbgnAdPgOteCOE+IWQ76LyP6PwjxQEkOskmmqxvxwP+4T/mQfxxlcXR/Ii+swMI8THxEJlt+jOSIpMRTR8bbTnFsvqoaNN9lCz2rhouS46aT8KAFcpBAmrTMHwwip49KWwk48lM/PlMaOaMzPTens50KtlQB6xTsNp0uxw2CFk49D4MKWTYbCPvRg5rEzFpWbEAAZVdp32yYYm8Q4qkoaybr7fFosJnVS1VjXDSnIl15lZLTKDd0OhV6UgBL/klH0+jqmpEFUwz/IHozxWT0QrePyC7y1sW2JBVtlkpHjY651msOrIBZSMzy34kmXFYObA3iH3sM2QGA367QZuRiLW1xFthfxeLHvCs+vzT1+7+3owei9Phqun99Nx7X6riYhXlWRir8YlgeXZd8Pv3tn9qWkOV32axWebOeHP/Dc/uXeK8ezc5voe/bdvr+4dGlg4o9viU+GvfT5dWemq9zlBJh6vyjTe8VTVVXlmeceX1Cw6cuO3KkpDTU+chc2qGny3WEdsNket7J1MeDofj4XhNdSwaqQoG/OUeF/jmVQMXyFdW4uBFspYPwYJe5HBK1hL3FfDjIWtYoo4k8wdsZOW2jhembYgGjq7xmQRFMaZrAQamO5QjJltEUa4n0pLIQdkWL0pAJEfRXmPgyBc5i8geZA7GuemVUPSqAoPP1hVzpYHINprgfVBtTh5hgqLwxtr4lyWrIFosRxSnc911ynft4dKw7WnLdetcDuvp49uOC4sdfgf5DzfbLWPH8Pq52WPBIJ43K3uAW2ixe6/O+vE7V8Pph8kuZpt4BKXRf1EM4jQiq8raOCB92lSj2j4+tdKLKRctMgCaXWFBg0eleMua/4sifJiteW3pHM9rW4INhI8pxdtSWMFYrhB1/gLERxEBCt5M4ZKAvFtbkhU4jWl6qQs22uZE5XNF6CK5LTelysHJXvpK8AMX770iPXjrkZGRI7cOpi/fd3HWEqrGj6x+4NruK544tX//qSeu6F7/wGr8aHUIf6ek76r9K695ZH1Hx/pHrlm5/6q+kuycWHDkqG/13qNrtr99//Dw/W9vX3N072rf0ZFgTMtreV9IiY+jetSLfp3xNDa0tzb0NvbWxmMRttYyEFY6ILs2GSS2xeXStIClsSFRW2y7wmDyZn2+Xr3QXkw+B8Ve15QvTba/mckLUgqsmKlBxCanPYw/cG+5wtCzmcmbKKw5W5GYPX+45dKDaztnH/jNweF71nYN7X1+w9r7kxy+Y2v9zI56u9Vtval/y+qZHjXeu6Rr0c6lTVXTFoudFfVBx5y7frT9R9kn3t/Tec2XV2360cHhZcM1FwVeed3j99hKP9qX3vD1TY2XZOK967+4pO/KGTXMtw382JeT8YYnI+zmPFYUih6sYO0FYGvMcYljRgMtupGbMxbNO8as22jD5aSLteBITQQzEmtu9RPcJWe+Sfbi87LbFY+iuBXIl3+Qf9HXFY12w54K9WaPiH7SZyv6Dn1/85gYDOx3H93JiEjDDQ/zjA1VJ2D2USd8W34jM5AYYYdZPRQyUcWhPYUVFwBWXBA5TgDXMg+u5TxYcYETEVcEVjwfVzzWJvqfezprffo58dChD49IS+DfIXKNi8g18hQb7u4Mvbg8lriog14reMRz0N9y+eJ0v3zYaMkxlriaHBH6mOqMFuehlxM1rjxvhLwoGjmzAlWWi4QnRtdwPWMv8w98dLGicjeO3Wm1kOsZ624d6z7U56i08Rw3Zq8kO2R0kFtBOXguxGd9kF8x+ij335S/YgqZXf5TOoZ86LaM6iPLK5ncWINRJGjHlHBdCz0jnvE7U0p33WQnbFPC00zH3MNkidKWF5pHBquxQbxExlKTk10jqMehbwTr8IKyoHifzSaIVgUfE4OeTWNvf5H7UqSus6wku6ZqIFrRUSnOdHo/XEjO04WyYhX/EN3ZL0BfzYR6ptXVAibdtAU9C1qm1nbXdYcrgS0N6oisOttI69wmvwg1lSEeMhE0FBdVUiA5DGIa9COFQIE6cQGx+aTfEAMeQpFnPDc6CIwKrheJTuCC5viD3yhHrYVRYzGuvhpYMZklCtRBo496Dq4mf2yL5BCzyCGe/0vH8nl9wcq+oRXp3usXp1KLr+9Nrxjqqwz2zVve0bthOJUa3jC2oLo3nfL7U+ne6urpyWAwOZ37QvX05mCweXp1dW8HHOrozUa7h+rrh7qjyWVbh4a2Lp2qf5+6FL4vS94bahtMJAZbw+XNs5LJWc3l+t9wK/zeRt6is/dlH+ZXkDVBDB3MqOFgmcduFTjjfasGH1Y5pklLhpeHQtCY5S36GxfJaQuFsBpXoi5E37mGnDZII+wjJgiFzhQzhmnlc0J+LHVPhrsNxPW8EYkiNxlv9h6/Nz5YZeEspaHykc+U7LT3XbFjbmxOSOUVT5W/a0lPjUW46OjTDuew4lDF9Zs/OnPlvaua7M4hm13CFd0r++lccAxv43/O/yuqQGnszgQqgxi1piBrPpiuTFMWZguwYRuYiPM95N3j3RJ5VZIRcrOao2TOFOhVY0o8CAmfAItHPhJbklgJsEzmT2ChhZ9yq4FlDcPwouJac3TlqWDSNYjeO8q4AnVnn3TftIgyDbsbOAJyghXiuCf4nXdXtk+JKv7Yhp7Wq9asagp1kG+Vsev729aOrGo6xzH+Uoe33LqxeUqkNmL3+m3rW6ZG6iLZo3by6/XJKeSzQ/u1NkL3z8/xJ4VtyI1+linTimXycETpEwO66xQdzGrJVYpSnekv5sC1y0A8LZjBb1IUT0TdxXSkSbJtsSRKbZOUy0w3RcZ7fwGR2CJquMHgBdYwSPOQP+n4n26RW7wRsnuLyLF0pC2SjtyH/7xxx8aT2TdX4f3Z1JYdW7Kn8dxV2WH+8ydP7nltz+jonteoPR9EC/n7hS8gF/KipowEhUQw24RdTgtwgwSLzzoCnJXGqURK2iWGcCWmVEsHeak0kJ05pSWQ8uJn/O7RM7xE/vnwzbc4K2w/LbWJJerPbBXOW/CtWXUPW1/9jfThdLE+KDSME0Rarnk+3JZAFwk00FgDJKeJGsj6Iov2CH969Izbj5+p66iY6s3ODJTSLki8b072dujFz9xWyaH+1Bp03vLR97U+bD+7j9zrU+SSPSiZITZBXgrSh6jLoUo8jPQ0OWrCW9Gi4Biv7dEUTOsgt+PdW/Hu7C1bT2GPpUQUHQouz/6pVBVLLNwLfNvo66M/5lvHnvPFS0vjPm6Qm9EQK42XgW8mmz1C1kIvEePpN+Z/NsbaaF0zy43htJx96psB67FrvhmWw4U13wzf4opxxGhe+p8/wZEAmcxfF19EEbxey2vQeI7L3Q4b0LmRM6WI1iaXE3ZKxHTBDaF7Tu0UPE8n/wjLEmdkyVNSrBwhaAF8nShnz0XkdRGDFHmSIiVM5JUCETgmCm3FJTkjN6JtvAjCLKMKxYkwvShKU8JeLqS9nn2anETrrWEFyxIrtMpRocXUgnhR5BGdmZgOXofmpY+hxcWSEvOgViD5CkI0sM59doO34qGuG761Kb6gUuI8bmt5yZOHuZGnsov4lXbR65ndsfKBDb2qutIu4wMHW0bD/OrRh1j8Fp7pKfE4CuOHgXkNhRF7olAUWAJPleLnxCEoS0GdQlowVasAkSBFpFqkT9Qic3QhCE+UmoEmQHETzRBscSHdC9/AhOAgvDvsoeTL557nWvM8uSK5Z2NrbCpUwoQeBYyUIueBNmwJnxsw1u2gVb8cOuTHUC6KaE5f9ZPRJT0wn2MsgxiQPyEgMCFbDbLCSI3Xk1P2l7cvMKsOCgyBenMA2BEMwauZQevaB9decmjWyFPt62t33oUt2axmA+2LvrSh335mmVjPSV/c3b4DLACf/XdJxT+UPiBzR2VGBZB6MvcoZH8KlGHGYADDFDjxYFFU85WqKs+JO73lruwvpA/sntdl2y8Qd/Y9qYzbLJ2icZ/hAi7CT4JTeRKUyj8G4mRvAiiSE14gUsZfLw3VlvlqQy5XqNZXVhsqlXaWJeBbokwnWi74Tt+JASnBRaV7LmgPNYB/myUy6+Dgw5LK3UvuqRXuKd0/q5SbLY+GDWYgkWWX8S3cvdlfugLeO06ortIyl/TBz22W11Wbhafv6Nl3ib6bpF8jJ5qesQBSrparqyXkjk8QlosmCBtEtvGExHKE0y3cTXtsQWWnRbAIO5Wgbc/fjkmqLK0SBIlbJclv5Z+/FM7PuOzN8+exzGvnH8cfb54/Qb3BdLJjKcH4jmN/o33gAUiXp72Q1Ldk6TJO4nmJuwz4GDEKiv/k5pA+2NEqyAG2qpCdjuzYLuo9+UQyfWmib7ythWW4tngk3LLv7k3zh4fnb9ov/nPTxu6enu6rt5K2T0th/E3ZXchBVnQvyxdL7v2mJ9rkL28EmJ3Gcn9T1CN9mXzzeOBbI0RVG+naYrP4E3xSbqK5vS15ub2TSN49T+7u5nDLQBz2Z7B/iw+0hJfpubvSrYn+5kCguT8Rz0AoOBNv6Oxs0HN3A5KFG5beIvuYY5DXCvxNWl4r2b1Q/9Dy/5dZq+OSViUza/UbsRp8eVl9b20s091aHq3BI76G6YlYpqtV+lxdTcOstspAONBQ3TC7NUQ+sHXffPJenJH+SvNW106Qt/rJZqfCFchGcqrxCT/+KmSk3u2MR/Cr77sqvav/xV1bJf31FYf9257yV+wO8v//BUcuz2IAeJzVVztvG0cQHlKSbdmSbQRBYLgwNqzEWKJEw5VcGTYECBBswzas0lneLckF727Pu3uiqTpV/kKqFKnSpEvKwFX+QYAgZZogTX5CZmb3+DAtv4AEiATy5nZn5/HNY4cAcKNRQAPC39eNzyLdgNXG95FuwvnGz5FegS+aNyK9ChvNJNJrsNV8FelzsLGyFunzsLfiI30Brq38Gul1uLJ6NdIXm7+v/xbpS3Bt489Ib8CtzWGkN+HVlc8jfRmuX72OljRW19HQT9kqohtwofFtpJtwufFDpFfgaeOXSK/CteZhpNfgUbOM9Dlc/yvS5+HLlU8ifQHt/y7S63Bj5e9IX1z7aVVE+hLsbfwY6Q1IN5uR3mx8tflNpC/D7St/wD0wUMIELGgYwBA8CNiCBNr4vAV70MXPTqS6uNZDXoFcE3iEJzOQUECKK0dQwQjfHJzi23381qBwh54Jrozx6VG+gMe47vBj4YQ5BBygpII1P0AJOa4KaKFEiWsGqQ7LJzkK+Vw8VbFmkiNYMp16AofIKeAh+kS887IXJWzjyjM+7XDdMG8XNdEH7plyYvVg6MVW0ha39rp7O/jVFb2J8JNHJpNFKo6qkXSn4v6pVumpTsRY+6F4rJyyJyoVB6bw4oHMlWgdSW9aHXGkE1U43KqKVFnhh0o8OTwSD0tVBO7IsC2eKeu0KUS300VbahiA5ACjN0DfCXmLr2pQZRKJ1yMyH4/Xo7HPaASx4jWJ+9O4d1FodDb4Wru6L8gUEVXvEz5dOFMgzDPDGZjvwW24g2/HnBueeQq4GT3SuEaZY2JUHVIVclA0YQ6tvdt3xLFyXtniJhqu3VAYhNeZyiZqZuHOmyzcmVo4c4T0Cnyj/LL4pGzL+ciIrel/RCV0IiDaCSm8lanKpR0J0z8zszrLwX2XEjhLFrzr4Bv4l9FwbEaoYT1FgWLTx52EK7HPlazRZOoXKceVOkwRq1dz9Gd1WyF3Hqu57jt1tzlmzEnrGIPXY+uDlEW59j360NZCZxGsM3hDPWfejtbUyvksbHM3OuSO4tl/xWcDRglbSjhQcgXfyd4QuIAMZW/ocSVSnjPaoxw5PZFwbfRZZ8J7BXpI/JbrxnIvDZr32UrPcodcFxkjQwhRtgp4gWua9ZCHIZPJ3zLaStpb3KGHsWdWU3yD/z2Um8a+r+Ala+shl+dTM50pY1Syt5MFT028X0ge+VlXFNnl3qo7lOggRpdifcp+UxSexuxJmMvxbhLlE1aGEbaMlWGft3lHxrVk2gIC7idsv0bfMpa7mKMVnizZjiRmIEkjn054v+ajsz72sD7rz9nHWUVo1imQX/Iu2Tbh2grFrVjGYJoz5OvdmHHDmEP1PUl+5NGWGk3H5xV3qeVazVCf4T3qZaOYv4q9T2M+zDSFiq5XZLxJ654wZiTOru+6krejBjVFlLJmwF09ZG+KK8GSgqtCMHYZWzuO2ITaoM5v5+wMdLqQEY5zX2O3sKwpTAp1x/CceRlrq7v4cuzcQnRnPku2TXGU6soMUsYxniRtO2a1jrk0i5xnm8K58FYxwhV7UmduHQ0XuSRmZcgdv5ArdWQNV07BJ9ziLeMkjhVW0w1Tqr5MlOjLXGcTkSqnBwWOJLoI80iV5zia0LxDo86xtE6Od3qSppbIa5fmnq0w4IhcoRrRCjJaJDJcwe2OOPR402nlBFqUSKv6VYbaexJvKDTGGZySSuNV4bWkjcQU/UwnXhcDUVptrPZ4eF9oL9zQVFkqnFK5eFFpj+MV3qGFK1Fq4VtiPMRpqnLBpZ5JcV5TL73oVV6M+WSqXZnJSVCKkge6kBndw9q7xdM4CwzQXadPleuIpwhPkknndIL8pTWlsR7HDrctULfXCc0OaPuJdrqXqRrRqiyVTSRNdQN9ongtUx4nlL6xuQuB0NKKobS5KSaC7myVqQEh0xF3PZ9wNEd6naMUMtNlSo1mUc2MGYlcjhBfdaJTxIEPYaCJkD5Ma2PpFuJNQd7GA4oMNdVgSPCmBoUUxou+yTIzRmswGpW1LBO/0wCEU7nesYYGWUoML3XmeIKZeueCu6xZir5SGQUTWcbopx9uI9Q6C3A4bw3u4aNKfGUVgUtuoJ9e9hAdH1AhZ03lCuUcZveQy7TE628X/8f834ljyGxO6vBVmiMHDL0v93d3x+NxB8uAh6NOYvLdDxf1+szhcG1+6ni+NHW8RX1dVm431NXzuq7wzH/102zrgyFow//pB92yhw7PEaolX5gdPpHh0/CosYvaDlB6+2N/Cm6dFe32v/MrcarQJVaX3nWczjrGDnYfHhy1l4rl/ZyHs0XCP+MH6+YAAHicbZBlUFRhFIafj1pZWkAauwtRUWxUTMRADMzL5bKswK7e3UXE7u7u7rG7u3vs7u78pYyyl+GX58d53nfOO+fMHBywV+5vsvlPCb+8hoNwwBEnnHFBRyFc0eOGOx544oU3PhTGFz/8KUIAgQQRTAihhBFOUYpRnBKUpBSlKUNZylGeClSkEpWpQlUiqEYk1alBTaKoRW2iqUNd6lGfBjSkETE0pglNiaUZzWlBS1rRmjjaEE9b2tGeDiTQkUQ60ZkudCWJbnSnBz3pRW8k4chKRjGaQ8zhDWOYwkQWs55VwokJ3GMkM/nGdyYzl3Gc4BFfWcIGfvKDX6xgE+c4w2aSkZlGChdQOMt5rnCRS1zmLalc5yrX2IKBL0znFje4SRrv+ch4+mAknUwyMLEMM/3oi4oFG1ay6M+7f//PYQADGcwg9rKcoQxhGMP5wCf2C2fhwh9yhU4U4jbPeC5chZ6tbBNuwp0XvOSA8BCewkt484rXrOEOT4UP93nAQ55wl8csZDs72M0eTrKTXZxiBMcZy0ZOc5gjHBSFmcRS5rGOBcznM6uZwSLWMpVZzGaf8OUox4Sf8BdFRIAIFEEiWISIUBEmwp3iE+PidDaTMSIiJiKfTXUxZoPZpKTrpHzG5lPR6BIvyTar4mLSkKDBoiFJQ44d+qQUs1WSZcVk1ecUSPudyCbRTrE21ZxnIqOiovUGVcpSqsiSRfFIMSqqYjFa7M4tU5JVs8mu9fatduklG1XZlpmaoWRrI1kqSCWrSv4qz4KjduuqGk0GLWM1ZqRoGZ80m8kgqbbMDMmmxf4CJkvc/QABAAIAEgAH//8ADwABAAAADAAAACIAAAACAAMAAgEGAAEBBwEIAAIBCQETAAEABAAAAAIAAAAAeJxljd0KAQEQhb9jxbLr/zdJHsMDyIUoF67VJkkkWT83HpUQ78HYuHIx58yZMzMHAWk6TIh1e4Mx2VWwW9MibnNeLxwjEfvTzjQIZ5RXi3lAI9xvQtqRQ4T6beGSp/7V9eiL6H21ZdLEU0ppefKVUVY55VVQUSXzPbos2XLkzIUrN+48eJrTsHLtOoGvD4+UNBxGyX3rfEs+sedg2qFCldobohoZkgAAeJyV12ts1NeZx/EnBBxvKNQ2fVWt3FUDom2yLk2aiJDLUslpwLFYtSG0Sx12WrEr6i6Wd3EsCw2WJWC4yC8qbbktxGEdJ3ECWJYSYBgS0jUTa1RNnVVEEmc0qkajiksIEhIokfxiZz8zQEL6IlI1+voc/y/nPM/v+Z0zZ+KOiLg7lsTjMav1x+2rY/6//bKnK74Zs12PSiWq92/v3/Gbf/mPrqiv9mrMjlm1tj7uWPBo7cne+DQ+nbUQY3eunzU2e9ac8bo1dy2ZM37X2vr76rv+5odzxu9eO2d87jfm/mv9fbNnfe1cfde8ma8fnrWwbk3DrxpGfWYaftXYql/7r3FvY75pXWNrY7465p3r71w/Zzw+bepu6r5zfVN39Urdmi8+1Xm++Jiv9pk3M2e8Nt6tz+jnn9v7PtUY7lrSMNqUqd6pxlX9VGetZTV242/1/+qVujXxVNxdaYuGyt9GY2VVNGkX+H9h5b1YpF2svRcP4EEso/QjeCyaY7n2icrv48nKSKzASjyNZ9BlrG5sRj+2GmsbtiOFHdiJXdht3D3Yi33YjwM4iMPmedEcI3gJL+MVjOJVvGauIziKYxjD6ziOEziJNE7hNM6aL+u9d4w96f8cpvTf1Z4z13mxXsDHdLiCq/rXcB0z3v02ZaapMk2VaapMU2WaAiUKlChQokCJAiVZTctqWlbTspqW1bSspmU1LeqSqEuiLom6JOqSqEuiLom6JOqSqEuiLom6JNpp0ZZEWxLttGhL8fdRJ765mF+rXZ/IciLLiSwnspzIcrG00h7L8EglFY9VNsRy/bWVZPyiMhHPajd6t8u73dikv1m7Rduv3e39PdiLfdiPAziIw8Z6RzuFc/rnPX8BF717CZfxSU2/Pvr10a8vPvP/YlGv4ri8yFeJfBXn9XFdH9flOS5/M+LfirgUj4rysUoiHleh5a5t9PwmbKk5Ks9ReY7Kc1Seo/IcleeovOgSKp0XWSLe9+6H+AgXvXepVt0+Ea4S4SpVrkZWrW4+fhN1PH23K3O189FQWU7b34pwuQj7orkyGt/CPe4trEXcR/M8zfPRQocHtA/iicogVwxyxSBXDEZbpRxPefYn3v0pnnZttfYZ7Rrtzyp74+eVD+Kf9NdW/jc6jPGsdl1lLDaaq0sM3dik/5xV2Is+z252Lam/xfV+/a3m2IbtSGEHdmJXrZ559cyrZ1498+qZV8+8euatsUFrbNAaG7TGBq2xQWts0Bob5NZBbh3k1kFuHeTWQW4djDfMf1x7AieRximcxpvuvYUzeBtnzZ91/R1zTWpz+KPrU/5/V/+82C/gojwu4WN6X9Z+giv6V927huv4zLUZ432Xl95TrQ946b2YZ13M1zZwZBMWuL4ISytD/JTnpTIvjfNShpfy8SPP/xIbvbMJW7DV89uwHSnswE7swmHvntWe075vjA/xES567xI+Nudl7Se4ov+ZdsbzD4myTYRtomvjpXzc4+5CdxbjXrTE/XzzAd9Uo03Gw+4vk98jlaMi7hBtH0+M8QMvGKPLGN3YpP9cZUX0YrP/k9otrvXr7zbWHuzFPuzHARzEIeM/jyG8UFvLHerygVpUs+tQi7xa5GXWJrM2WbXJqk0N8mqQV4O87Np86zZWOkXTKZpOEXSaudPbnd7u9HSnpzs93Rk/VKWkyrSrTLvKJK2jrHWUtY6aVSlp7SyzXjLWS8Z6yVgnWeska51krJOsdZKxTrLWR5bvsyqVVKmkSiVVKqlSSZVKqlSSXzP8muHXDL9m+DXDrxl+zfJrhl8z/Jrh1wy/Zvg1w69Zfs3ya5Zfsyqd5NMMn2b4NMujGRVuV9l2VZWLjHIympLRlIxyssiJKieqnKhyosqJKieqnKhyRswZYcoIU0bIxQ+oN8EHZT4o80GZB8o8UKZDkQ5FOhTtG3kaFOVftD+M8cEZe3eOF85QfoLyE5SfoPyEmpfVvKzmZTUvq3lZzctqXqZJkSZFmhRpUqRJkSZFehTpUaRHkR5FehTpUeSHsvyL8i/yRVn+RZWdUNkJlZ1Q2QmVnYiVUfd/f4q5mI8Gbm9UySbtPfJcaK0sxr14AA9iaWU1d7dx9wbuvo+7276U8a1s11Z+J9Nxmf4uNhq7y7jd2KT/XOUhrn9I5su4/qHY4lq//m7P78Fe7MN+HMBBHDbXX6/C+G0qjNdUOGec8+a6gIvmvYSP5XtZ+wmu6F917xqu4zPXWrill1vquaWeW3q5pZfn23xPTMm+LPuy7MuyL8u+zEm9nNTLSb2c1MtJvZzUy0m99uope/WUvXrKXj1lr56yV0/Zq6dkWJZhWYZlGZZlWJZhWYZlGZZlWJZhWYZlGZa5ste+PCXLsiyrdS5zaT2X1nNpb3yjdhL8y1PgUq582G7xVSe3Q+4/jyG8gOqJq3rS+sXne0Hjl/aDhP0gYbah2n6wWHsvWipLzTpk1iFa1dGqhVYttGrxfdpqn0jYJxJ0a7FPJGjXYp9I+D5dZ69IcFE7F/X4Pu3mpHbfpzs5qZ2T2u0jCQ5q55z2r9xPdpt7D/ZiH/bjAA7iRTGN4CW8jFcwilfxmliO4CiOYQyv4w3zHteewEmkcQqn8aZ7b+EM3q6dYpLqU0e9ITVqUaMW+1GCkkNq1cKJ7ZzY/vnedBXXcP3mPrXy5olm+LYTTYryJcqnKD9sB/42xYcp/V8UHv3SWfYps9w6z/5M7W6cRErUK908iSxxEllCxZJTyJKbp5ASNYepOUzNYWoOU3OYmsPUHKbYKMVGKTZKsVGKjVJslGKjf/W5+Kzxst67dTaunovP4wK+OEmkbjtJpChUolCJQqWbJ4nh+DWVmqnUQaVmKjVTaQOVElTaQKUO/kzxZ6qmVnVXW+TarZ3thkdv7G5PVAYomKBggoIJCq7m0RSPpiiZ4NEUNRM8mqLoAI+mePQQj47waJJHD1G5mcoJKieo3Ezl+6l8P7+mKJ2g9P2UbqZ0gtIdlO6gdAelOyjdQekOSnd85W74orlH8BJexisYxat4zbhHcBTHMIbX8Yb5j2tP4CTSOIXTeNO9t3AGb+Os+bPGurGDJlQnwbepm7toQpUSqpRQpWZValalDarUrErNqrRBlRKqlFClhCo1q1KHWjX6Fr5RgUnqT1J/kvKTlJ+keoHqBaoXKF2gcoHCf6buNFWnKZqhaIaCGcplqDNJnUnqTFJnkjqT1JmkziQFChQoUKBAgQIFChQoyL4g+4LsC7IvyL4g+4IsJ2VZkGVBhpMyLMgwI8OMTDIyycgkE43OgmlnwbSzYFpkJXW/KrqSc13aeS7tmy3tmy3tWy3tLJd2Bks7g6WdwdLOYGnnrrQ9uY5b5mKeN+drlzlBV38vLdf+SLu2cp6bskY+74xbHX3E6CNGHDHiiBFHjDhixBEjjvi+rotW3m/l/Vbe7+f7fj5s5b9W/lvPf+v5bj3ftapZq5q1qlm/mrWqWaua9atTq9ieNO8KrKyd3qontyw9s/TM0jNLzyw9s/Ssnsay9MzSM0vPLD2z9MzSMkvL6qkrG/PEkxRP0toq8G2Bbwt8W+DbAt8W+LbAtwV+K4gpKZZkLLSaxz5/c4H+IjxJjxVYiafxDLa6vg3bkcIO7MQuvOb+ERzFMYzhdRzHCZxEGqdwGme9M6nN4V3cimbG9dmimRDNhKsTruqLcYXYVohthd9wy+IRPBbfieXara5tw3aksAM7sQuHPXNWe047o/07jujhiB5u6LFKBjhi3W2/+ddxRPXMmOOEHithwEoY4IgefkvyW9KqGOC5JIf0WB0Dtd/3N37XD3DxANf0cE0P1/RwTQ9XD3D1AFcPcFBP3MEhdRz0NQ5q4POmWKAGi/ze/058z/nn+1bvA34HPOh0tDQeruX6qFwfj3+Q7RPxY99UbdEe/xg/iZ/G07E61sRaZ4WOeDb+mRO7ojv+nRufM89mTtwS/bE1tsX2SMWO2Bm74z9jT+yNfbE/DsSheD6G4gU6/Xe8GCPxUrwcr4TvmDgSR+NYjMUbcTxOxMlIx6k4Hf8TZyMb70Qu/hB/jHfp+n58GB/F+bjA7Zec7y5z+ZW4GtfiOp/P/D8c287EAAAAAQAAAADaiI1MAAAAAMqTXnAAAAAAyt8uhQ==";
252
252
 
@@ -896,6 +896,7 @@ const getAvatarColorForInputText = value => {
896
896
  return colorOptions[numberFromValue % colorOptions.length];
897
897
  };
898
898
  const isString$1 = str => typeof str === 'string';
899
+ const isLowerCase = str => str === str.toLowerCase();
899
900
  const isNumber = num => typeof num === 'number';
900
901
  const renderNodeOrTypography = (content, typographyVariant = 'body1') => {
901
902
  return isString$1(content) ? jsx(DotTypography, Object.assign({
@@ -927,7 +928,7 @@ const DotAlertBanner = ({
927
928
  success: AlertBannerIcon('check-solid'),
928
929
  warning: AlertBannerIcon('warning-solid')
929
930
  };
930
- const rootClasses = useStylesWithRootClass(rootClassName$Z, severity, className);
931
+ const rootClasses = useStylesWithRootClass(rootClassName$_, severity, className);
931
932
  /* For simple string use default component, for everything else use 'div' */
932
933
  const typographyComponent = isString$1(children) ? undefined : 'div';
933
934
  return jsx(StyledAlertBanner, Object.assign({
@@ -1584,7 +1585,7 @@ const useDotCoreApiContext = () => {
1584
1585
  return useContext(DotCoreApiContext);
1585
1586
  };
1586
1587
 
1587
- const rootClassName$Y = 'dot-avatar';
1588
+ const rootClassName$Z = 'dot-avatar';
1588
1589
  const avatarSpacing = {
1589
1590
  small: 3,
1590
1591
  medium: 5,
@@ -1595,7 +1596,7 @@ const StyledAvatar = styled(Avatar).withConfig({
1595
1596
  componentId: "sc-13bzj2s-0"
1596
1597
  })(["", ""], ({
1597
1598
  theme
1598
- }) => css(["&.", "{display:inline-flex;background-color:", ";border:0px;&:focus-visible{box-shadow:0px 0px 0px 3px ", ",0px 0px 0px 5px ", ";outline:0;}img{width:auto;height:105%;}.dot-i,.dot-typography{color:", ";margin-bottom:0;}&.small{height:", ";width:", ";}&.medium{height:", ";width:", ";}&.large{height:", ";width:", ";}}"], rootClassName$Y, ({
1599
+ }) => css(["&.", "{display:inline-flex;background-color:", ";border:0px;&:focus-visible{box-shadow:0px 0px 0px 3px ", ",0px 0px 0px 5px ", ";outline:0;}img{width:auto;height:105%;}.dot-i,.dot-typography{color:", ";margin-bottom:0;}&.small{height:", ";width:", ";}&.medium{height:", ";width:", ";}&.large{height:", ";width:", ";}}"], rootClassName$Z, ({
1599
1600
  color
1600
1601
  }) => {
1601
1602
  return color && theme.palette.avatarColors[color] ? theme.palette.avatarColors[color].backgroundColor : theme.palette.avatarColors['default'].backgroundColor;
@@ -1659,7 +1660,7 @@ const DotAvatar = ({
1659
1660
  variant: _variant = 'circular',
1660
1661
  style
1661
1662
  }) => {
1662
- const rootClasses = useStylesWithRootClass(rootClassName$Y, className);
1663
+ const rootClasses = useStylesWithRootClass(rootClassName$Z, className);
1663
1664
  const getAvatarColor = () => {
1664
1665
  if (color) return color;
1665
1666
  if (_text && _text !== alt) return getAvatarColorForInputText(_text);
@@ -1697,6 +1698,80 @@ const DotAvatar = ({
1697
1698
  }), void 0);
1698
1699
  };
1699
1700
 
1701
+ const rootClassName$Y = 'dot-button';
1702
+ const StyledButton = styled(Button).withConfig({
1703
+ displayName: "Buttonstyles__StyledButton",
1704
+ componentId: "sx99hh-0"
1705
+ })(["", ""], ({
1706
+ theme
1707
+ }) => css(["&.", "{margin:", ";min-width:auto;white-space:nowrap;&.MuiButton-outlined:not([disabled]){border-color:rgba(0,0,0,0.23);color:", ";}&:not(.MuiButton-sizeLarge):not(.MuiButton-sizeSmall){height:", ";}&.MuiButton-containedSecondary{background-color:", ";&:hover,&:active{background-color:", ";}}&.MuiButton-text{padding:6px 16px;}.dot-icon{display:flex;padding:0;}}"], rootClassName$Y, theme.spacing(0.5), theme.palette.grey[700], theme.spacing(5), theme.palette.error.main, darken(theme.palette.error.main, 0.2)));
1708
+
1709
+ /** This component wraps the Button component from @material-ui. */
1710
+ const DotButton = /*#__PURE__*/forwardRef(({
1711
+ ariaLabel,
1712
+ autoFocus: _autoFocus = false,
1713
+ children,
1714
+ className,
1715
+ 'data-testid': dataTestId,
1716
+ disabled: _disabled = false,
1717
+ disableRipple: _disableRipple = false,
1718
+ endIcon,
1719
+ fullWidth: _fullWidth = false,
1720
+ isSubmit: _isSubmit = false,
1721
+ onClick,
1722
+ size: _size = 'medium',
1723
+ startIcon,
1724
+ tooltip,
1725
+ type: _type = 'primary'
1726
+ }, ref) => {
1727
+ const rootClasses = useStylesWithRootClass(rootClassName$Y, className);
1728
+ let color;
1729
+ let variant;
1730
+ switch (_type) {
1731
+ case 'destructive':
1732
+ color = _disabled ? 'inherit' : 'secondary';
1733
+ variant = 'contained';
1734
+ break;
1735
+ case 'primary':
1736
+ color = 'primary';
1737
+ variant = 'contained';
1738
+ break;
1739
+ case 'outlined':
1740
+ color = 'inherit';
1741
+ variant = 'outlined';
1742
+ break;
1743
+ case 'text':
1744
+ color = 'inherit';
1745
+ variant = 'text';
1746
+ break;
1747
+ }
1748
+ return jsx(DotTooltip, Object.assign({
1749
+ title: tooltip
1750
+ }, {
1751
+ children: jsx(StyledButton, Object.assign({
1752
+ "aria-label": ariaLabel,
1753
+ autoFocus: _autoFocus,
1754
+ classes: {
1755
+ root: rootClasses
1756
+ },
1757
+ color: color,
1758
+ "data-testid": dataTestId,
1759
+ disableRipple: _disableRipple,
1760
+ disabled: _disabled,
1761
+ endIcon: endIcon,
1762
+ fullWidth: _fullWidth,
1763
+ onClick: event => onClick && onClick(event),
1764
+ ref: ref,
1765
+ size: _size,
1766
+ startIcon: startIcon,
1767
+ type: _isSubmit ? 'submit' : 'button',
1768
+ variant: variant
1769
+ }, {
1770
+ children: children
1771
+ }), void 0)
1772
+ }), void 0);
1773
+ });
1774
+
1700
1775
  const rootClassName$X = 'dot-icon-btn';
1701
1776
  const StyledIconButton = styled(IconButton).withConfig({
1702
1777
  displayName: "IconButtonstyles__StyledIconButton",
@@ -1743,13 +1818,292 @@ const DotIconButton = ({
1743
1818
  }), void 0);
1744
1819
  };
1745
1820
 
1746
- const rootClassName$W = 'dot-copy-button';
1747
- const StyledCopyButton = styled.div.withConfig({
1821
+ const DotInputLabel = ({
1822
+ 'data-testid': dataTestId,
1823
+ disabled: _disabled = false,
1824
+ error: _error = false,
1825
+ id,
1826
+ label,
1827
+ required
1828
+ }) => {
1829
+ return jsx(StyledInputLabel, Object.assign({
1830
+ "data-testid": dataTestId,
1831
+ classes: {
1832
+ root: labelClassName
1833
+ },
1834
+ disabled: _disabled,
1835
+ error: _error,
1836
+ htmlFor: id,
1837
+ required: required,
1838
+ shrink: false,
1839
+ variant: "outlined"
1840
+ }, {
1841
+ children: jsx(DotTypography, Object.assign({
1842
+ variant: "subtitle2"
1843
+ }, {
1844
+ children: label
1845
+ }), void 0)
1846
+ }), void 0);
1847
+ };
1848
+
1849
+ const DELAY_MS = 300;
1850
+ const EndAdornment = ({
1851
+ endAdornmentTooltip,
1852
+ error,
1853
+ dataTestId,
1854
+ endIcon,
1855
+ success,
1856
+ warning
1857
+ }) => {
1858
+ const renderIcon = iconType => jsx(DotIcon, {
1859
+ "data-testid": dataTestId && `${dataTestId}-${iconType}-icon`,
1860
+ iconId: `${iconType}-solid`
1861
+ }, void 0);
1862
+ const errorIcon = error && renderIcon('error');
1863
+ const successIcon = success && renderIcon('check');
1864
+ const warningIcon = warning && renderIcon('warning');
1865
+ const endAdornmentIcon = endIcon || errorIcon || warningIcon || successIcon;
1866
+ const styledAdornment = jsx(StyledAdornment, Object.assign({
1867
+ className: `${adornmentIconClassName} end`,
1868
+ position: "end"
1869
+ }, {
1870
+ children: endAdornmentIcon
1871
+ }), void 0);
1872
+ return endAdornmentTooltip ? jsx(DotTooltip, Object.assign({
1873
+ title: endAdornmentTooltip
1874
+ }, {
1875
+ children: styledAdornment
1876
+ }), void 0) : styledAdornment;
1877
+ };
1878
+ const getInitialState = value => ({
1879
+ inputValue: value || ''
1880
+ });
1881
+ const DotInputText = ({
1882
+ autoComplete: _autoComplete = 'off',
1883
+ autoFocus,
1884
+ className,
1885
+ defaultValue,
1886
+ 'data-testid': dataTestId,
1887
+ disabled: _disabled = false,
1888
+ error: _error = false,
1889
+ endAdornmentTooltip,
1890
+ fullWidth: _fullWidth = true,
1891
+ hasDebounce,
1892
+ helperText,
1893
+ endIcon,
1894
+ id,
1895
+ inputRef,
1896
+ label,
1897
+ maxRows,
1898
+ minRows,
1899
+ multiline: _multiline = false,
1900
+ name,
1901
+ onBlur,
1902
+ onChange,
1903
+ onFocus,
1904
+ onKeyDown,
1905
+ onMouseUp,
1906
+ persistentLabel,
1907
+ placeholder,
1908
+ readOnly: _readOnly = false,
1909
+ required: _required = false,
1910
+ shrink,
1911
+ startIcon,
1912
+ size: _size = 'small',
1913
+ success,
1914
+ type: _type = 'text',
1915
+ value,
1916
+ warning: _warning = false
1917
+ }) => {
1918
+ const hasError = _error && errorClassName;
1919
+ const hasWarning = !_error && _warning && warningClassName;
1920
+ const hasSuccess = !_error && !_warning && success && successClassName;
1921
+ const hasEndAdornmentIcon = endIcon || _error || hasWarning || hasSuccess;
1922
+ // This state is used only with debounce feature enabled
1923
+ const [inputTextState, setInputTextState] = useState(hasDebounce && getInitialState(value));
1924
+ const rootStyles = useStylesWithRootClass(rootClassName$10, hasError, hasWarning, hasSuccess, _readOnly ? 'read-only' : '');
1925
+ // Used to control text value from the consumer component
1926
+ // when debounce feature is enabled
1927
+ useEffect(() => {
1928
+ if (hasDebounce && value !== inputTextState.inputValue) {
1929
+ setInputTextState(getInitialState(value));
1930
+ }
1931
+ }, [value]);
1932
+ // Improve performance by avoiding callback execution
1933
+ // on each keystroke (if debounce feature is active)
1934
+ useEffect(() => {
1935
+ // Do not proceed if debounce feature is turned
1936
+ // off or there is no event defined
1937
+ if (!hasDebounce || !inputTextState || !inputTextState.changeEvent || !onChange) return;
1938
+ const handler = setTimeout(() => {
1939
+ onChange(inputTextState.changeEvent);
1940
+ }, DELAY_MS);
1941
+ return () => clearTimeout(handler);
1942
+ }, [inputTextState]);
1943
+ const handleChange = e => {
1944
+ // We need to have control over change event and input value separately
1945
+ // so that we can set initial state via 'value' prop (if needed)
1946
+ hasDebounce ? setInputTextState({
1947
+ changeEvent: e,
1948
+ inputValue: e.target.value
1949
+ }) : onChange === null || onChange === void 0 ? void 0 : onChange(e);
1950
+ };
1951
+ const inputTextValue = hasDebounce ? inputTextState.inputValue : value;
1952
+ // Don't use default value when debounce feature is enabled because
1953
+ // in that case component is controlled
1954
+ const defaultInputValue = hasDebounce ? undefined : defaultValue;
1955
+ const startAdornmentIcon = () => {
1956
+ if (!startIcon) return null;
1957
+ return jsx(StyledAdornment, Object.assign({
1958
+ className: `${adornmentIconClassName} start`,
1959
+ position: "start"
1960
+ }, {
1961
+ children: startIcon
1962
+ }), void 0);
1963
+ };
1964
+ const endAdornmentIcon = () => {
1965
+ if (!hasEndAdornmentIcon) return null;
1966
+ return jsx(EndAdornment, Object.assign({}, {
1967
+ endAdornmentTooltip,
1968
+ error: _error,
1969
+ dataTestId,
1970
+ endIcon,
1971
+ success,
1972
+ warning: _warning
1973
+ }), void 0);
1974
+ };
1975
+ const wrapperClassName = useStylesWithRootClass(_fullWidth !== false ? 'dot-input-text--fullwidth' : '', className);
1976
+ return jsxs(StyledTextFieldContainer, Object.assign({
1977
+ className: wrapperClassName
1978
+ }, {
1979
+ children: [persistentLabel && jsx(DotInputLabel, Object.assign({}, {
1980
+ disabled: _disabled,
1981
+ error: _error,
1982
+ id,
1983
+ label,
1984
+ required: _required
1985
+ }), void 0), jsx(StyledTextField, {
1986
+ InputProps: {
1987
+ startAdornment: startAdornmentIcon(),
1988
+ endAdornment: endAdornmentIcon()
1989
+ },
1990
+ "aria-label": name,
1991
+ autoComplete: _autoComplete,
1992
+ autoFocus: autoFocus,
1993
+ classes: {
1994
+ root: rootStyles
1995
+ },
1996
+ defaultValue: defaultInputValue,
1997
+ disabled: _disabled,
1998
+ error: _error,
1999
+ focused: _readOnly ? false : undefined,
2000
+ fullWidth: _fullWidth,
2001
+ helperText: helperText,
2002
+ id: id,
2003
+ InputLabelProps: {
2004
+ shrink: _type === 'date' ? true : shrink
2005
+ },
2006
+ inputProps: {
2007
+ 'data-testid': dataTestId,
2008
+ className: 'dot-input',
2009
+ readOnly: _readOnly
2010
+ },
2011
+ inputRef: inputRef,
2012
+ label: persistentLabel ? null : label,
2013
+ multiline: _multiline,
2014
+ name: name,
2015
+ onBlur: onBlur,
2016
+ onChange: hasDebounce ? handleChange : onChange,
2017
+ onFocus: onFocus,
2018
+ onKeyDown: onKeyDown,
2019
+ onMouseUp: onMouseUp,
2020
+ placeholder: placeholder,
2021
+ required: _required,
2022
+ minRows: _multiline ? minRows : null,
2023
+ maxRows: _multiline ? maxRows : null,
2024
+ size: _size,
2025
+ type: _type,
2026
+ value: inputTextValue,
2027
+ variant: "outlined"
2028
+ }, void 0)]
2029
+ }), void 0);
2030
+ };
2031
+
2032
+ const rootClassName$W = 'dot-search-input';
2033
+ const StyledSearchInput = styled.span.withConfig({
2034
+ displayName: "SearchInputstyles__StyledSearchInput",
2035
+ componentId: "qlwzku-0"
2036
+ })(["", ""], () => css(["&.", "{}"], rootClassName$W));
2037
+
2038
+ function SearchInput({
2039
+ 'data-testid': dataTestId,
2040
+ autoFocus = true,
2041
+ className,
2042
+ disabled = false,
2043
+ onChange,
2044
+ onClear,
2045
+ placeholder = 'Search',
2046
+ tooltip = null,
2047
+ value
2048
+ }) {
2049
+ const rootClasses = useStylesWithRootClass(rootClassName$W, className);
2050
+ const [searchText, setSearchText] = useState(value);
2051
+ let previousSearchText = '';
2052
+ const handleChange = useCallback(event => {
2053
+ previousSearchText = event.target.value;
2054
+ setSearchText(event.target.value);
2055
+ // Timeout is to give user a chance to finish typing before refreshing data.
2056
+ setTimeout(function () {
2057
+ if (onChange && event.target.value === previousSearchText) {
2058
+ onChange(event.target.value);
2059
+ }
2060
+ }, 500);
2061
+ }, [onChange]);
2062
+ const handleClear = useCallback(() => {
2063
+ setSearchText('');
2064
+ onClear && onClear();
2065
+ }, [onClear]);
2066
+ const searchIcon = jsx(DotIcon, {
2067
+ className: "search-icon",
2068
+ iconId: "search"
2069
+ }, void 0);
2070
+ const clearSearchIcon = jsx(DotIconButton, {
2071
+ iconId: "close",
2072
+ onClick: handleClear,
2073
+ size: "small",
2074
+ tooltip: "Clear search text"
2075
+ }, void 0);
2076
+ return jsx(StyledSearchInput, Object.assign({
2077
+ className: rootClasses
2078
+ }, {
2079
+ children: jsx(DotTooltip, Object.assign({
2080
+ placement: "bottom",
2081
+ title: tooltip
2082
+ }, {
2083
+ children: jsx(DotInputText, {
2084
+ "data-testid": dataTestId,
2085
+ autoFocus: autoFocus,
2086
+ className: "search-text",
2087
+ disabled: disabled,
2088
+ endIcon: (searchText === null || searchText === void 0 ? void 0 : searchText.length) > 0 ? clearSearchIcon : null,
2089
+ id: "app-instance-search-text",
2090
+ name: "app-instance-search-text",
2091
+ onChange: handleChange,
2092
+ placeholder: placeholder,
2093
+ startIcon: searchIcon,
2094
+ value: searchText
2095
+ }, void 0)
2096
+ }), void 0)
2097
+ }), void 0);
2098
+ }
2099
+
2100
+ const rootClassName$V = 'dot-copy-button';
2101
+ const StyledCopyButton = styled.span.withConfig({
1748
2102
  displayName: "CopyButtonstyles__StyledCopyButton",
1749
2103
  componentId: "sc-18ff0u-0"
1750
2104
  })(["", ""], ({
1751
2105
  theme
1752
- }) => css(["&.", "{.copied-to-clipboard{color:", ";}}"], rootClassName$W, theme.palette.success[400]));
2106
+ }) => css(["&.", "{.copied-to-clipboard{color:", ";}}"], rootClassName$V, theme.palette.success[400]));
1753
2107
 
1754
2108
  const DotCopyButton = ({
1755
2109
  ariaLabel: _ariaLabel = 'Copy to clipboard',
@@ -1778,7 +2132,7 @@ const DotCopyButton = ({
1778
2132
  return false;
1779
2133
  };
1780
2134
  return jsxs(StyledCopyButton, Object.assign({
1781
- className: rootClassName$W,
2135
+ className: rootClassName$V,
1782
2136
  "data-testid": dataTestId
1783
2137
  }, {
1784
2138
  children: [!showCopiedIcon && jsx(DotIconButton, {
@@ -1798,11 +2152,11 @@ const DotCopyButton = ({
1798
2152
  }), void 0);
1799
2153
  };
1800
2154
 
1801
- const rootClassName$V = 'dot-link';
2155
+ const rootClassName$U = 'dot-link';
1802
2156
  const StyledLink = styled(Link).withConfig({
1803
2157
  displayName: "Linkstyles__StyledLink",
1804
2158
  componentId: "sc-1lpmaww-0"
1805
- })(["", ""], () => css(["&.", "{cursor:pointer;&:hover:not(.MuiLink-underlineHover){text-decoration:none;}}"], rootClassName$V));
2159
+ })(["", ""], () => css(["&.", "{cursor:pointer;&:hover:not(.MuiLink-underlineHover){text-decoration:none;}}"], rootClassName$U));
1806
2160
 
1807
2161
  const DotLink = ({
1808
2162
  ariaLabel,
@@ -1819,7 +2173,7 @@ const DotLink = ({
1819
2173
  tooltip,
1820
2174
  underline
1821
2175
  }) => {
1822
- const rootClasses = useStylesWithRootClass(rootClassName$V, className);
2176
+ const rootClasses = useStylesWithRootClass(rootClassName$U, className);
1823
2177
  const handleKeyPress = event => {
1824
2178
  if (onClick && event.key === 'Enter') {
1825
2179
  event.preventDefault();
@@ -1898,17 +2252,17 @@ const getLogoForAppType = appType => {
1898
2252
  }
1899
2253
  }
1900
2254
  };
1901
- const daiAppsHeaderMenuItem = {
1902
- children: jsx(DotTypography, Object.assign({
2255
+ const daiAppsHeaderMenuItem = (count = 0) => ({
2256
+ children: jsxs(DotTypography, Object.assign({
1903
2257
  className: "dai-apps-title"
1904
2258
  }, {
1905
- children: "DIGITAL.AI APPLICATIONS"
2259
+ children: ["DIGITAL.AI APPLICATIONS", count > 0 ? ` (${count})` : '']
1906
2260
  }), "menu-item-dai-apps-title"),
1907
2261
  key: 'dai-apps-title',
1908
2262
  disabled: true,
1909
2263
  divider: true,
1910
2264
  height: 32
1911
- };
2265
+ });
1912
2266
  const createMenuItem = (url, title, subtitle = null) => jsxs("div", Object.assign({
1913
2267
  className: "app-menu-item"
1914
2268
  }, {
@@ -2007,13 +2361,13 @@ const getInstanceStateText = application => {
2007
2361
  return 'Non-production instance';
2008
2362
  };
2009
2363
 
2010
- const rootClassName$U = 'dot-drawer';
2364
+ const rootClassName$T = 'dot-drawer';
2011
2365
  const StyledDrawer = styled(Drawer).withConfig({
2012
2366
  displayName: "Drawerstyles__StyledDrawer",
2013
2367
  componentId: "sc-1uiowy0-0"
2014
2368
  })(["", ""], ({
2015
2369
  theme
2016
- }) => css(["&.", " .MuiBackdrop-root{background-color:", ";}.dot-drawer-paper{height:", ";padding:", ";width:", ";}"], rootClassName$U, alpha(theme.palette.grey[900], 0.7), ({
2370
+ }) => css(["&.", " .MuiBackdrop-root{background-color:", ";}.dot-drawer-paper{height:", ";padding:", ";width:", ";}"], rootClassName$T, alpha(theme.palette.grey[900], 0.7), ({
2017
2371
  height,
2018
2372
  anchor
2019
2373
  }) => anchor === 'left' || anchor === 'right' ? '100%' : height, theme.spacing(2), ({
@@ -2021,13 +2375,13 @@ const StyledDrawer = styled(Drawer).withConfig({
2021
2375
  anchor
2022
2376
  }) => anchor === 'bottom' || anchor === 'top' ? 'auto' : width));
2023
2377
 
2024
- const rootClassName$T = 'dot-drawer-header';
2378
+ const rootClassName$S = 'dot-drawer-header';
2025
2379
  const StyleDrawerHeader = styled.div.withConfig({
2026
2380
  displayName: "DrawerHeaderstyles__StyleDrawerHeader",
2027
2381
  componentId: "sc-2d2xd3-0"
2028
2382
  })(["", ""], ({
2029
2383
  theme
2030
- }) => css(["&.", "{padding:", ";display:flex;align-items:center;.close-button{margin-left:auto;}}"], rootClassName$T, theme.spacing(0, 0, 2)));
2384
+ }) => css(["&.", "{padding:", ";display:flex;align-items:center;.close-button{margin-left:auto;}}"], rootClassName$S, theme.spacing(0, 0, 2)));
2031
2385
 
2032
2386
  const DotDrawerHeader = ({
2033
2387
  ariaLabel,
@@ -2037,7 +2391,7 @@ const DotDrawerHeader = ({
2037
2391
  onClose,
2038
2392
  variant
2039
2393
  }) => {
2040
- const rootClasses = useStylesWithRootClass(rootClassName$T, className);
2394
+ const rootClasses = useStylesWithRootClass(rootClassName$S, className);
2041
2395
  return jsxs(StyleDrawerHeader, Object.assign({
2042
2396
  "aria-label": ariaLabel,
2043
2397
  className: rootClasses,
@@ -2051,11 +2405,11 @@ const DotDrawerHeader = ({
2051
2405
  }), void 0);
2052
2406
  };
2053
2407
 
2054
- const rootClassName$S = 'dot-drawer-body';
2408
+ const rootClassName$R = 'dot-drawer-body';
2055
2409
  const StyleDrawerBody = styled.div.withConfig({
2056
2410
  displayName: "DrawerBodystyles__StyleDrawerBody",
2057
2411
  componentId: "sc-1mpmjdk-0"
2058
- })(["", ""], () => css(["&.", "{display:flex;.dot-drawer-close-button{align-self:self-start;padding:0;margin-left:auto;}}"], rootClassName$S));
2412
+ })(["", ""], () => css(["&.", "{display:flex;.dot-drawer-close-button{align-self:self-start;padding:0;margin-left:auto;}}"], rootClassName$R));
2059
2413
 
2060
2414
  const DotDrawerBody = ({
2061
2415
  ariaLabel,
@@ -2066,7 +2420,7 @@ const DotDrawerBody = ({
2066
2420
  onClose,
2067
2421
  variant
2068
2422
  }) => {
2069
- const rootClasses = useStylesWithRootClass(rootClassName$S, className);
2423
+ const rootClasses = useStylesWithRootClass(rootClassName$R, className);
2070
2424
  return jsxs(StyleDrawerBody, Object.assign({
2071
2425
  "aria-label": ariaLabel,
2072
2426
  className: rootClasses,
@@ -2080,13 +2434,13 @@ const DotDrawerBody = ({
2080
2434
  }), void 0);
2081
2435
  };
2082
2436
 
2083
- const rootClassName$R = 'dot-drawer-footer';
2437
+ const rootClassName$Q = 'dot-drawer-footer';
2084
2438
  const StyleDrawerFooter = styled.div.withConfig({
2085
2439
  displayName: "DrawerFooterstyles__StyleDrawerFooter",
2086
2440
  componentId: "sc-1ki05ze-0"
2087
2441
  })(["", ""], ({
2088
2442
  theme
2089
- }) => css(["&.", "{padding:", ";}"], rootClassName$R, theme.spacing(2, 0, 0)));
2443
+ }) => css(["&.", "{padding:", ";}"], rootClassName$Q, theme.spacing(2, 0, 0)));
2090
2444
 
2091
2445
  const DotDrawerFooter = ({
2092
2446
  ariaLabel,
@@ -2094,7 +2448,7 @@ const DotDrawerFooter = ({
2094
2448
  className,
2095
2449
  'data-testid': dataTestId
2096
2450
  }) => {
2097
- const rootClasses = useStylesWithRootClass(rootClassName$R, className);
2451
+ const rootClasses = useStylesWithRootClass(rootClassName$Q, className);
2098
2452
  return jsx(StyleDrawerFooter, Object.assign({
2099
2453
  "aria-label": ariaLabel,
2100
2454
  className: rootClasses,
@@ -2131,7 +2485,7 @@ const DotDrawer = ({
2131
2485
  onClose(event);
2132
2486
  }
2133
2487
  };
2134
- const rootClasses = useStylesWithRootClass(rootClassName$U, className);
2488
+ const rootClasses = useStylesWithRootClass(rootClassName$T, className);
2135
2489
  const headerExists = !!drawerHeaderProps;
2136
2490
  const bodyTestId = drawerBodyProps ? drawerBodyProps[`data-testid`] : 'drawer-body';
2137
2491
  return jsxs(StyledDrawer, Object.assign({
@@ -2174,13 +2528,13 @@ const DotDrawer = ({
2174
2528
  }), void 0);
2175
2529
  };
2176
2530
 
2177
- const rootClassName$Q = 'dot-app-switcher';
2531
+ const rootClassName$P = 'dot-app-switcher';
2178
2532
  const StyledAppSwitcher = styled(DotDrawer).withConfig({
2179
2533
  displayName: "AppSwitcherstyles__StyledAppSwitcher",
2180
2534
  componentId: "hhxfqg-0"
2181
2535
  })(["", ""], ({
2182
2536
  theme
2183
- }) => css(["&.", "{.app-menu-item{display:flex;justify-content:space-between;align-items:center;}.dot-link,.product-menu-item{display:flex;justify-content:space-between;align-items:center;width:100%;height:64px;text-decoration:none;cursor:pointer;}.logo-title{display:flex;align-items:center;gap:24px;width:100%;}.dot-avatar{flex-basis:40px;}.dai-apps-title{display:flex;align-items:center;height:32px;padding:", ";background-color:", ";}.dot-app-switcher-app-title{min-width:150px;}.dot-icon{flex-basis:content;}.app-switcher-header{display:flex;justify-content:space-between;align-items:end;border-bottom:1px solid ", ";padding-bottom:", ";margin-bottom:", ";.close-button.dot-icon-btn{padding-bottom:0;}.app-switcher-label{padding-left:", ";}}.app-switcher-back-button{display:flex;margin:", ";.dot-icon{color:", ";}cursor:pointer;}.product-heading{display:flex;align-items:center;gap:24px;padding-bottom:", ";}.product-applications{width:100%;overflow-y:auto;}}"], rootClassName$Q, theme.spacing(0, 0, 0, 1), theme.palette.grey[100], theme.palette.grey[200], theme.spacing(1), theme.spacing(2), theme.spacing(3), theme.spacing(2, 0), theme.palette.grey[400], theme.spacing(3)));
2537
+ }) => css(["&.", "{.app-menu-item{display:flex;justify-content:space-between;align-items:center;}.dot-link,.product-menu-item{display:flex;justify-content:space-between;align-items:center;width:100%;height:64px;text-decoration:none;cursor:pointer;}.logo-title{display:flex;align-items:center;gap:24px;width:100%;}.dot-avatar{flex-basis:40px;}.dai-apps-title{display:flex;align-items:center;height:32px;padding:", ";background-color:", ";}.dot-app-switcher-app-title{min-width:150px;}.dot-icon{flex-basis:content;}.app-switcher-header{.app-switcher-header-title{padding-left:", ";display:flex;align-items:center;}display:flex;justify-content:space-between;align-items:end;border-bottom:1px solid ", ";margin:", ";padding-bottom:", ";.app-switcher-label{padding-left:", ";}}.app-switcher-back-button{&.dot-button.MuiButton-text{padding-left:0;}}.product-heading{display:flex;align-items:center;gap:24px;padding-bottom:", ";}.product-applications{width:100%;overflow-y:auto;}.product-applications-search{margin-bottom:", ";}}"], rootClassName$P, theme.spacing(0, 0, 0, 1), theme.palette.grey[50], theme.spacing(2), theme.palette.grey[200], theme.spacing(0, -2, 2), theme.spacing(1), theme.spacing(3), theme.spacing(3), theme.spacing(3)));
2184
2538
 
2185
2539
  const DotAppSwitcherView = ({
2186
2540
  activeApp,
@@ -2190,6 +2544,7 @@ const DotAppSwitcherView = ({
2190
2544
  platformConsoleUrl,
2191
2545
  onClose,
2192
2546
  open,
2547
+ searchInstancesThreshold: _searchInstancesThreshold = 5,
2193
2548
  selectedAppType,
2194
2549
  yOffset: _yOffset = 48,
2195
2550
  zIndex: _zIndex = 990
@@ -2199,11 +2554,12 @@ const DotAppSwitcherView = ({
2199
2554
  if (dotCoreApiContext !== null) {
2200
2555
  setSelectedAppType = dotCoreApiContext.setSelectedAppSwitcherAppType;
2201
2556
  }
2202
- const rootClasses = useStylesWithRootClass(rootClassName$Q, className);
2557
+ const rootClasses = useStylesWithRootClass(rootClassName$P, className);
2203
2558
  const [appTypeMap, setAppTypeMap] = useState();
2204
2559
  const [appTypeLabels, setAppTypeLabels] = useState();
2205
2560
  const [appTypeMenuItems, setAppTypeMenuItems] = useState();
2206
2561
  const [selectedAppTypeAlt, setSelectedAppTypeAlt] = useState(null);
2562
+ const [searchText, setSearchText] = useState('');
2207
2563
  if (!setSelectedAppType) {
2208
2564
  selectedAppType = selectedAppTypeAlt;
2209
2565
  setSelectedAppType = setSelectedAppTypeAlt;
@@ -2211,13 +2567,18 @@ const DotAppSwitcherView = ({
2211
2567
  const showApps = useCallback(appType => {
2212
2568
  setSelectedAppType(appType);
2213
2569
  }, []);
2214
- const showAppTypes = useCallback(() => setSelectedAppType(null), []);
2570
+ const showAppTypes = useCallback(() => {
2571
+ setSearchText('');
2572
+ setSelectedAppType(null);
2573
+ }, []);
2215
2574
  const populateAppTypeMap = useCallback(() => {
2216
2575
  const newAppTypeMap = new Map();
2217
2576
  // we'll put Other at the end
2218
2577
  const otherApps = [];
2219
2578
  apps === null || apps === void 0 ? void 0 : apps.forEach(app => {
2220
- const children = createMenuItem(app.url, app.name, getInstanceStateText(app));
2579
+ const instanceStateText = getInstanceStateText(app);
2580
+ const children = createMenuItem(app.url, app.name, instanceStateText);
2581
+ const searchableContent = `${app.name} ${instanceStateText}`;
2221
2582
  const appTypeName = app.logo_product_name;
2222
2583
  let appTypeApps;
2223
2584
  if (appTypeName) {
@@ -2231,6 +2592,7 @@ const DotAppSwitcherView = ({
2231
2592
  }
2232
2593
  appTypeApps.push({
2233
2594
  children,
2595
+ searchableContent,
2234
2596
  key: app.id,
2235
2597
  height: 64
2236
2598
  });
@@ -2240,11 +2602,15 @@ const DotAppSwitcherView = ({
2240
2602
  for (const appType of keys) {
2241
2603
  sortedAppTypeMap.set(appType, newAppTypeMap.get(appType));
2242
2604
  }
2605
+ let appTypeCount = sortedAppTypeMap.size;
2606
+ if (platformConsoleUrl) {
2607
+ appTypeCount++;
2608
+ }
2243
2609
  if (otherApps.length > 0) {
2244
2610
  sortedAppTypeMap.set(_noAppTypeLabel, otherApps);
2245
2611
  }
2246
2612
  setAppTypeMap(sortedAppTypeMap);
2247
- const menuItems = [daiAppsHeaderMenuItem];
2613
+ const menuItems = [daiAppsHeaderMenuItem(appTypeCount)];
2248
2614
  if (platformConsoleUrl) {
2249
2615
  const children = createTopLevelMenuItem(platformConsoleUrl, getLogoForAppType('Platform'), 'Digital.ai Platform', !window.location.href.startsWith(platformConsoleUrl));
2250
2616
  menuItems.push({
@@ -2278,15 +2644,15 @@ const DotAppSwitcherView = ({
2278
2644
  setAppTypeMenuItems(menuItems);
2279
2645
  setAppTypeLabels(newAppTypeLabels);
2280
2646
  }, [apps]);
2281
- const emptyState = () => {
2647
+ const emptyState = useCallback(() => {
2282
2648
  const currentAppMenuItem = createTopLevelMenuItem(window.location.href, getLogoForAppType(activeApp.product), activeApp.name, false);
2283
- setAppTypeMenuItems([daiAppsHeaderMenuItem, {
2649
+ setAppTypeMenuItems([daiAppsHeaderMenuItem(), {
2284
2650
  children: currentAppMenuItem,
2285
2651
  key: 'no_applications_configured',
2286
2652
  height: 64,
2287
2653
  disabled: true
2288
2654
  }]);
2289
- };
2655
+ }, [activeApp]);
2290
2656
  useEffect(() => {
2291
2657
  if ((apps === null || apps === void 0 ? void 0 : apps.length) > 0) {
2292
2658
  populateAppTypeMap();
@@ -2294,30 +2660,60 @@ const DotAppSwitcherView = ({
2294
2660
  emptyState();
2295
2661
  }
2296
2662
  }, [apps]);
2663
+ const onAppInstanceSearchTextChange = useCallback(text => {
2664
+ setSearchText(text);
2665
+ }, []);
2666
+ const clearAppInstanceSearchText = useCallback(() => {
2667
+ setSearchText('');
2668
+ }, []);
2669
+ const closeHandler = useCallback(event => {
2670
+ setSearchText('');
2671
+ onClose && onClose(event);
2672
+ }, [onClose]);
2673
+ const filteredAppInstances = useCallback(() => {
2674
+ var _a;
2675
+ return (_a = appTypeMap.get(selectedAppType)) === null || _a === void 0 ? void 0 : _a.filter(item => {
2676
+ let isMatch = !searchText;
2677
+ if (searchText) {
2678
+ const testStr = isLowerCase(searchText) ? item.searchableContent.toLowerCase() : item.searchableContent;
2679
+ isMatch = testStr.indexOf(searchText) >= 0;
2680
+ }
2681
+ return isMatch;
2682
+ }).map(item => item.children);
2683
+ }, [appTypeMap, selectedAppType, searchText]);
2297
2684
  const content = () => {
2298
2685
  var _a;
2299
2686
  if (selectedAppType && appTypeMap && appTypeLabels) {
2300
2687
  const labelConfig = appTypeLabels.get(selectedAppType);
2301
2688
  return jsxs(Fragment, {
2302
- children: [jsxs("div", Object.assign({
2303
- className: "app-switcher-back-button",
2304
- onClick: showAppTypes
2305
- }, {
2306
- children: [jsx(DotIcon, {
2307
- iconId: "back"
2308
- }, void 0), jsx(DotTypography, Object.assign({
2309
- variant: "h4"
2689
+ children: [jsx("span", {
2690
+ children: jsx(DotButton, Object.assign({
2691
+ className: "app-switcher-back-button",
2692
+ type: "text",
2693
+ onClick: showAppTypes,
2694
+ startIcon: jsx(DotIcon, {
2695
+ iconId: "back"
2696
+ }, void 0)
2310
2697
  }, {
2311
- children: "Back"
2312
- }), void 0)]
2313
- }), void 0), jsx("div", Object.assign({
2698
+ children: jsx("span", {
2699
+ children: "Back"
2700
+ }, void 0)
2701
+ }), void 0)
2702
+ }, void 0), jsx("div", Object.assign({
2314
2703
  className: "product-heading"
2315
2704
  }, {
2316
2705
  children: createAppTypeLabel(selectedAppType, labelConfig.logo, labelConfig.singleTypeApps)
2317
- }), void 0), jsx("div", Object.assign({
2706
+ }), void 0), ((_a = appTypeMap === null || appTypeMap === void 0 ? void 0 : appTypeMap.get(selectedAppType)) === null || _a === void 0 ? void 0 : _a.length) >= _searchInstancesThreshold && jsx("div", {
2707
+ children: jsx(SearchInput, {
2708
+ "data-testid": "app-instance-search-input",
2709
+ onChange: onAppInstanceSearchTextChange,
2710
+ onClear: clearAppInstanceSearchText,
2711
+ value: searchText
2712
+ }, void 0)
2713
+ }, void 0), jsx("div", Object.assign({
2318
2714
  className: "product-applications"
2319
2715
  }, {
2320
- children: (_a = appTypeMap.get(selectedAppType)) === null || _a === void 0 ? void 0 : _a.map(item => item.children)
2716
+ children: filteredAppInstances()
2321
2717
  }), void 0)]
2322
2718
  }, void 0);
2323
2719
  }
@@ -2326,13 +2722,17 @@ const DotAppSwitcherView = ({
2326
2722
  const header = {
2327
2723
  className: 'app-switcher-header',
2328
2724
  children: jsxs("div", Object.assign({
2725
+ className: "app-switcher-header-title",
2329
2726
  style: {
2330
2727
  marginTop: _yOffset + 'px',
2331
2728
  width: '80%'
2332
2729
  }
2333
2730
  }, {
2334
- children: [jsx(DotIcon, {
2335
- iconId: "apps"
2731
+ children: [jsx(DotAvatar, {
2732
+ iconId: "apps",
2733
+ alt: "app image",
2734
+ type: "image",
2735
+ variant: "circular"
2336
2736
  }, void 0), jsx(DotTypography, Object.assign({
2337
2737
  className: "app-switcher-label"
2338
2738
  }, {
@@ -2345,135 +2745,62 @@ const DotAppSwitcherView = ({
2345
2745
  ModalProps: {
2346
2746
  style: {
2347
2747
  zIndex: _zIndex
2348
- }
2748
+ },
2749
+ hideBackdrop: true
2349
2750
  },
2350
2751
  drawerHeaderProps: header,
2351
2752
  variant: "temporary",
2352
2753
  width: "340px",
2353
2754
  open: open,
2354
- onClose: onClose
2355
- }, {
2356
- children: content()
2357
- }), void 0);
2358
- };
2359
- const DotAppSwitcher = _a => {
2360
- var {
2361
- accountId,
2362
- includePlatformConsole = true,
2363
- onClose
2364
- } = _a,
2365
- commonProps = __rest(_a, ["accountId", "includePlatformConsole", "onClose"]);
2366
- const {
2367
- applications,
2368
- applicationsLoading,
2369
- applicationsError,
2370
- loadApplications,
2371
- isAppSwitcherOpen: open,
2372
- platformConsoleUrl,
2373
- setIsAppSwitcherOpen: setOpen,
2374
- selectedAppSwitcherAppType: selectedAppType,
2375
- setSelectedAppSwitcherAppType: setSelectedAppType
2376
- } = useDotCoreApiContext();
2377
- useEffect(() => {
2378
- if ((!applications || applications.length === 0) && open) {
2379
- loadApplications(accountId);
2380
- }
2381
- }, [accountId, open]);
2382
- if (applicationsError) {
2383
- console.error('Error loading application list in AppSwitcher', applicationsError);
2384
- }
2385
- const closeHandler = event => {
2386
- setOpen(false);
2387
- setSelectedAppType(null);
2388
- onClose && onClose(event);
2389
- };
2390
- const viewProps = includePlatformConsole ? Object.assign(Object.assign({}, commonProps), {
2391
- platformConsoleUrl
2392
- }) : Object.assign({}, commonProps);
2393
- if (!applicationsLoading && !applicationsError) {
2394
- return jsx(DotAppSwitcherView, Object.assign({}, viewProps, {
2395
- open: open,
2396
- apps: applications,
2397
- selectedAppType: selectedAppType,
2398
- onClose: closeHandler
2399
- }), void 0);
2400
- }
2401
- return null;
2402
- };
2403
-
2404
- const rootClassName$P = 'dot-button';
2405
- const StyledButton = styled(Button).withConfig({
2406
- displayName: "Buttonstyles__StyledButton",
2407
- componentId: "sx99hh-0"
2408
- })(["", ""], ({
2409
- theme
2410
- }) => css(["&.", "{margin:", ";min-width:auto;white-space:nowrap;&.MuiButton-outlined:not([disabled]){border-color:rgba(0,0,0,0.23);color:", ";}&:not(.MuiButton-sizeLarge):not(.MuiButton-sizeSmall){height:", ";}&.MuiButton-containedSecondary{background-color:", ";&:hover,&:active{background-color:", ";}}&.MuiButton-text{padding:6px 16px;}.dot-icon{display:flex;padding:0;}}"], rootClassName$P, theme.spacing(0.5), theme.palette.grey[700], theme.spacing(5), theme.palette.error.main, darken(theme.palette.error.main, 0.2)));
2411
-
2412
- /** This component wraps the Button component from @material-ui. */
2413
- const DotButton = /*#__PURE__*/forwardRef(({
2414
- ariaLabel,
2415
- autoFocus: _autoFocus = false,
2416
- children,
2417
- className,
2418
- 'data-testid': dataTestId,
2419
- disabled: _disabled = false,
2420
- disableRipple: _disableRipple = false,
2421
- endIcon,
2422
- fullWidth: _fullWidth = false,
2423
- isSubmit: _isSubmit = false,
2424
- onClick,
2425
- size: _size = 'medium',
2426
- startIcon,
2427
- tooltip,
2428
- type: _type = 'primary'
2429
- }, ref) => {
2430
- const rootClasses = useStylesWithRootClass(rootClassName$P, className);
2431
- let color;
2432
- let variant;
2433
- switch (_type) {
2434
- case 'destructive':
2435
- color = _disabled ? 'inherit' : 'secondary';
2436
- variant = 'contained';
2437
- break;
2438
- case 'primary':
2439
- color = 'primary';
2440
- variant = 'contained';
2441
- break;
2442
- case 'outlined':
2443
- color = 'inherit';
2444
- variant = 'outlined';
2445
- break;
2446
- case 'text':
2447
- color = 'inherit';
2448
- variant = 'text';
2449
- break;
2450
- }
2451
- return jsx(DotTooltip, Object.assign({
2452
- title: tooltip
2453
- }, {
2454
- children: jsx(StyledButton, Object.assign({
2455
- "aria-label": ariaLabel,
2456
- autoFocus: _autoFocus,
2457
- classes: {
2458
- root: rootClasses
2459
- },
2460
- color: color,
2461
- "data-testid": dataTestId,
2462
- disableRipple: _disableRipple,
2463
- disabled: _disabled,
2464
- endIcon: endIcon,
2465
- fullWidth: _fullWidth,
2466
- onClick: event => onClick && onClick(event),
2467
- ref: ref,
2468
- size: _size,
2469
- startIcon: startIcon,
2470
- type: _isSubmit ? 'submit' : 'button',
2471
- variant: variant
2472
- }, {
2473
- children: children
2474
- }), void 0)
2755
+ onClose: closeHandler
2756
+ }, {
2757
+ children: content()
2475
2758
  }), void 0);
2476
- });
2759
+ };
2760
+ const DotAppSwitcher = _a => {
2761
+ var {
2762
+ accountId,
2763
+ includePlatformConsole = true,
2764
+ onClose
2765
+ } = _a,
2766
+ commonProps = __rest(_a, ["accountId", "includePlatformConsole", "onClose"]);
2767
+ const {
2768
+ applications,
2769
+ applicationsLoading,
2770
+ applicationsError,
2771
+ loadApplications,
2772
+ isAppSwitcherOpen: open,
2773
+ platformConsoleUrl,
2774
+ setIsAppSwitcherOpen: setOpen,
2775
+ selectedAppSwitcherAppType: selectedAppType,
2776
+ setSelectedAppSwitcherAppType: setSelectedAppType
2777
+ } = useDotCoreApiContext();
2778
+ useEffect(() => {
2779
+ if ((!applications || applications.length === 0) && open) {
2780
+ loadApplications(accountId);
2781
+ }
2782
+ }, [accountId, open]);
2783
+ if (applicationsError) {
2784
+ console.error('Error loading application list in AppSwitcher', applicationsError);
2785
+ }
2786
+ const closeHandler = useCallback(event => {
2787
+ setOpen(false);
2788
+ setSelectedAppType(null);
2789
+ onClose && onClose(event);
2790
+ }, [onClose]);
2791
+ const viewProps = includePlatformConsole ? Object.assign(Object.assign({}, commonProps), {
2792
+ platformConsoleUrl
2793
+ }) : Object.assign({}, commonProps);
2794
+ if (!applicationsLoading && !applicationsError) {
2795
+ return jsx(DotAppSwitcherView, Object.assign({}, viewProps, {
2796
+ open: open,
2797
+ apps: applications,
2798
+ selectedAppType: selectedAppType,
2799
+ onClose: closeHandler
2800
+ }), void 0);
2801
+ }
2802
+ return null;
2803
+ };
2477
2804
 
2478
2805
  const rootClassName$O = 'dot-list';
2479
2806
  const listItemRootClass = 'dot-list-item';
@@ -3737,7 +4064,7 @@ const StyledAutocomplete = styled(Autocomplete).withConfig({
3737
4064
  componentId: "j2sgjy-0"
3738
4065
  })(["", ""], ({
3739
4066
  theme
3740
- }) => css(["&.", "{.", "{padding-top:", ";padding-bottom:", ";}.dot-chip:first-child{margin-left:", ";}.dot-text-field{.dot-input-root{height:", ";}.warning-icon{color:", ";}.error-icon{color:", ";}}}"], rootClassName$F, inputRootClassName, theme.spacing(0), theme.spacing(0), theme.spacing(0), theme.spacing(5), theme.palette.warning.main, theme.palette.error.main));
4067
+ }) => css(["&.", "{&.", " .dot-text-field .", "{height:56px;padding-left:", ";}.", "{padding-top:", ";padding-bottom:", ";}.dot-chip:first-child{margin-left:", ";}.dot-text-field{.", "{height:", ";}.warning-icon{color:", ";}.error-icon{color:", ";}}}"], rootClassName$F, inputMediumClassName, inputRootClassName, theme.spacing(2), inputRootClassName, theme.spacing(0), theme.spacing(0), theme.spacing(0), inputRootClassName, theme.spacing(5), theme.palette.warning.main, theme.palette.error.main));
3741
4068
 
3742
4069
  const rootClassName$E = 'dot-chip';
3743
4070
  const StyledChip = styled(Chip).withConfig({
@@ -3844,34 +4171,6 @@ const getChipsFromAutocomplete = ({
3844
4171
  };
3845
4172
  const checkIfDuplicateItem = (itemText, autocompleteOptions) => autocompleteOptions.some(autocompleteOption => autocompleteOption.title === itemText);
3846
4173
 
3847
- const DotInputLabel = ({
3848
- 'data-testid': dataTestId,
3849
- disabled: _disabled = false,
3850
- error: _error = false,
3851
- id,
3852
- label,
3853
- required
3854
- }) => {
3855
- return jsx(StyledInputLabel, Object.assign({
3856
- "data-testid": dataTestId,
3857
- classes: {
3858
- root: labelClassName
3859
- },
3860
- disabled: _disabled,
3861
- error: _error,
3862
- htmlFor: id,
3863
- required: required,
3864
- shrink: false,
3865
- variant: "outlined"
3866
- }, {
3867
- children: jsx(DotTypography, Object.assign({
3868
- variant: "subtitle2"
3869
- }, {
3870
- children: label
3871
- }), void 0)
3872
- }), void 0);
3873
- };
3874
-
3875
4174
  const DEFAULT_ACTION_ITEM_TEXT = 'Add new item';
3876
4175
  const DotAutoComplete = ({
3877
4176
  ListboxComponent,
@@ -3925,9 +4224,9 @@ const DotAutoComplete = ({
3925
4224
  const [isOpened, setIsOpened] = useState(false);
3926
4225
  const [inputText, setInputText] = useState('');
3927
4226
  const textFieldWarningClassName = !_error && _warning && warningClassName;
3928
- const rootClasses = useStylesWithRootClass(rootClassName$F, className);
3929
- const textFieldRootClasses = useStylesWithRootClass(rootClassName$$, className, _readOnly ? 'read-only' : '', textFieldWarningClassName);
3930
- const inputRootClasses = useStylesWithRootClass(inputRootClassName, _dense ? '' : inputMediumClassName);
4227
+ const rootClasses = useStylesWithRootClass(rootClassName$F, _size === 'medium' && inputMediumClassName, className);
4228
+ const textFieldRootClasses = useStylesWithRootClass(rootClassName$10, className, _readOnly ? 'read-only' : '', textFieldWarningClassName);
4229
+ const inputRootClasses = useStylesWithRootClass(inputRootClassName, !_dense && inputMediumClassName);
3931
4230
  let textFieldInput;
3932
4231
  // Used for focus management while popper is opened
3933
4232
  const actionItemRef = useRef();
@@ -4185,7 +4484,7 @@ const DotAutoComplete = ({
4185
4484
  },
4186
4485
  placeholder: showPlaceholder ? placeholder : undefined,
4187
4486
  required: _required,
4188
- size: _dense ? 'small' : 'medium',
4487
+ size: _size,
4189
4488
  variant: "outlined"
4190
4489
  }), void 0)]
4191
4490
  }, void 0)
@@ -5410,7 +5709,7 @@ const StyledFormContainer = styled.div.withConfig({
5410
5709
  componentId: "bbovqo-0"
5411
5710
  })(["", ""], ({
5412
5711
  theme
5413
- }) => css(["&.", "{margin:", ";.", ",.", ",.", ",.", "{margin:", ";}.", ",.", "{.", "{margin:0;}}}"], rootClassName$r, theme.spacing(3, 0), rootClassName$x, rootClassName$z, rootClassName$$, rootSelectClassName, theme.spacing(1, 0), rootClassName$w, groupClassName, rootClassName$z));
5712
+ }) => css(["&.", "{margin:", ";.", ",.", ",.", ",.", "{margin:", ";}.", ",.", "{.", "{margin:0;}}}"], rootClassName$r, theme.spacing(3, 0), rootClassName$x, rootClassName$z, rootClassName$10, rootSelectClassName, theme.spacing(1, 0), rootClassName$w, groupClassName, rootClassName$z));
5414
5713
 
5415
5714
  const DotForm = ({
5416
5715
  ariaLabel,
@@ -5615,189 +5914,6 @@ const checkIfFormDataValid = formState => {
5615
5914
  return true;
5616
5915
  };
5617
5916
 
5618
- const DELAY_MS = 300;
5619
- const EndAdornment = ({
5620
- endAdornmentTooltip,
5621
- error,
5622
- dataTestId,
5623
- endIcon,
5624
- success,
5625
- warning
5626
- }) => {
5627
- const renderIcon = iconType => jsx(DotIcon, {
5628
- "data-testid": dataTestId && `${dataTestId}-${iconType}-icon`,
5629
- iconId: `${iconType}-solid`
5630
- }, void 0);
5631
- const errorIcon = error && renderIcon('error');
5632
- const successIcon = success && renderIcon('check');
5633
- const warningIcon = warning && renderIcon('warning');
5634
- const endAdornmentIcon = endIcon || errorIcon || warningIcon || successIcon;
5635
- const styledAdornment = jsx(StyledAdornment, Object.assign({
5636
- className: `${adornmentIconClassName} end`,
5637
- position: "end"
5638
- }, {
5639
- children: endAdornmentIcon
5640
- }), void 0);
5641
- return endAdornmentTooltip ? jsx(DotTooltip, Object.assign({
5642
- title: endAdornmentTooltip
5643
- }, {
5644
- children: styledAdornment
5645
- }), void 0) : styledAdornment;
5646
- };
5647
- const getInitialState = value => ({
5648
- inputValue: value || ''
5649
- });
5650
- const DotInputText = ({
5651
- autoComplete: _autoComplete = 'off',
5652
- autoFocus,
5653
- className,
5654
- defaultValue,
5655
- 'data-testid': dataTestId,
5656
- disabled: _disabled = false,
5657
- error: _error = false,
5658
- endAdornmentTooltip,
5659
- fullWidth: _fullWidth = true,
5660
- hasDebounce,
5661
- helperText,
5662
- endIcon,
5663
- id,
5664
- inputRef,
5665
- label,
5666
- maxRows,
5667
- minRows,
5668
- multiline: _multiline = false,
5669
- name,
5670
- onBlur,
5671
- onChange,
5672
- onFocus,
5673
- onKeyDown,
5674
- onMouseUp,
5675
- persistentLabel,
5676
- placeholder,
5677
- readOnly: _readOnly = false,
5678
- required: _required = false,
5679
- shrink,
5680
- startIcon,
5681
- size: _size = 'small',
5682
- success,
5683
- type: _type = 'text',
5684
- value,
5685
- warning: _warning = false
5686
- }) => {
5687
- const hasError = _error && errorClassName;
5688
- const hasWarning = !_error && _warning && warningClassName;
5689
- const hasSuccess = !_error && !_warning && success && successClassName;
5690
- const hasEndAdornmentIcon = endIcon || _error || hasWarning || hasSuccess;
5691
- // This state is used only with debounce feature enabled
5692
- const [inputTextState, setInputTextState] = useState(hasDebounce && getInitialState(value));
5693
- const rootStyles = useStylesWithRootClass(rootClassName$$, hasError, hasWarning, hasSuccess, _readOnly ? 'read-only' : '');
5694
- // Used to control text value from the consumer component
5695
- // when debounce feature is enabled
5696
- useEffect(() => {
5697
- if (hasDebounce && value !== inputTextState.inputValue) {
5698
- setInputTextState(getInitialState(value));
5699
- }
5700
- }, [value]);
5701
- // Improve performance by avoiding callback execution
5702
- // on each keystroke (if debounce feature is active)
5703
- useEffect(() => {
5704
- // Do not proceed if debounce feature is turned
5705
- // off or there is no event defined
5706
- if (!hasDebounce || !inputTextState || !inputTextState.changeEvent || !onChange) return;
5707
- const handler = setTimeout(() => {
5708
- onChange(inputTextState.changeEvent);
5709
- }, DELAY_MS);
5710
- return () => clearTimeout(handler);
5711
- }, [inputTextState]);
5712
- const handleChange = e => {
5713
- // We need to have control over change event and input value separately
5714
- // so that we can set initial state via 'value' prop (if needed)
5715
- hasDebounce ? setInputTextState({
5716
- changeEvent: e,
5717
- inputValue: e.target.value
5718
- }) : onChange === null || onChange === void 0 ? void 0 : onChange(e);
5719
- };
5720
- const inputTextValue = hasDebounce ? inputTextState.inputValue : value;
5721
- // Don't use default value when debounce feature is enabled because
5722
- // in that case component is controlled
5723
- const defaultInputValue = hasDebounce ? undefined : defaultValue;
5724
- const startAdornmentIcon = () => {
5725
- if (!startIcon) return null;
5726
- return jsx(StyledAdornment, Object.assign({
5727
- className: `${adornmentIconClassName} start`,
5728
- position: "start"
5729
- }, {
5730
- children: startIcon
5731
- }), void 0);
5732
- };
5733
- const endAdornmentIcon = () => {
5734
- if (!hasEndAdornmentIcon) return null;
5735
- return jsx(EndAdornment, Object.assign({}, {
5736
- endAdornmentTooltip,
5737
- error: _error,
5738
- dataTestId,
5739
- endIcon,
5740
- success,
5741
- warning: _warning
5742
- }), void 0);
5743
- };
5744
- const wrapperClassName = useStylesWithRootClass(_fullWidth !== false ? 'dot-input-text--fullwidth' : '', className);
5745
- return jsxs(StyledTextFieldContainer, Object.assign({
5746
- className: wrapperClassName
5747
- }, {
5748
- children: [persistentLabel && jsx(DotInputLabel, Object.assign({}, {
5749
- disabled: _disabled,
5750
- error: _error,
5751
- id,
5752
- label,
5753
- required: _required
5754
- }), void 0), jsx(StyledTextField, {
5755
- InputProps: {
5756
- startAdornment: startAdornmentIcon(),
5757
- endAdornment: endAdornmentIcon()
5758
- },
5759
- "aria-label": name,
5760
- autoComplete: _autoComplete,
5761
- autoFocus: autoFocus,
5762
- classes: {
5763
- root: rootStyles
5764
- },
5765
- defaultValue: defaultInputValue,
5766
- disabled: _disabled,
5767
- error: _error,
5768
- focused: _readOnly ? false : undefined,
5769
- fullWidth: _fullWidth,
5770
- helperText: helperText,
5771
- id: id,
5772
- InputLabelProps: {
5773
- shrink: _type === 'date' ? true : shrink
5774
- },
5775
- inputProps: {
5776
- 'data-testid': dataTestId,
5777
- className: 'dot-input',
5778
- readOnly: _readOnly
5779
- },
5780
- inputRef: inputRef,
5781
- label: persistentLabel ? null : label,
5782
- multiline: _multiline,
5783
- name: name,
5784
- onBlur: onBlur,
5785
- onChange: hasDebounce ? handleChange : onChange,
5786
- onFocus: onFocus,
5787
- onKeyDown: onKeyDown,
5788
- onMouseUp: onMouseUp,
5789
- placeholder: placeholder,
5790
- required: _required,
5791
- minRows: _multiline ? minRows : null,
5792
- maxRows: _multiline ? maxRows : null,
5793
- size: _size,
5794
- type: _type,
5795
- value: inputTextValue,
5796
- variant: "outlined"
5797
- }, void 0)]
5798
- }), void 0);
5799
- };
5800
-
5801
5917
  const DotInputSelect = ({
5802
5918
  ariaLabel,
5803
5919
  autoFocus,
@@ -8172,7 +8288,7 @@ const DotTable = ({
8172
8288
  // ignore 'count' prop and use the length of the provided 'data' for the
8173
8289
  // total row count.
8174
8290
  const getTotalCount = () => {
8175
- const validCount = count ? count : -1;
8291
+ const validCount = count || count === 0 ? count : -1;
8176
8292
  const totalCount = onUpdateData ? validCount : data.length;
8177
8293
  return rowsPerPage ? totalCount : null;
8178
8294
  };