andoncloud-station-assignment-widget 1.0.7 → 1.0.8

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 (30) hide show
  1. package/dist/index.d.ts +35 -5
  2. package/dist/index.js +1512 -8
  3. package/dist/index.js.map +1 -1
  4. package/package.json +27 -22
  5. package/dist/components/AssignmentBoard/DropZone/index.d.ts +0 -9
  6. package/dist/components/AssignmentBoard/DropZone/styles.d.ts +0 -2
  7. package/dist/components/AssignmentBoard/OperatorCard/SidePanel/MainContent.d.ts +0 -12
  8. package/dist/components/AssignmentBoard/OperatorCard/SidePanel/styles.d.ts +0 -5
  9. package/dist/components/AssignmentBoard/OperatorCard/index.d.ts +0 -21
  10. package/dist/components/AssignmentBoard/OperatorCard/styles.d.ts +0 -7
  11. package/dist/components/AssignmentBoard/PoolColumn/index.d.ts +0 -9
  12. package/dist/components/AssignmentBoard/PoolColumn/styles.d.ts +0 -3
  13. package/dist/components/AssignmentBoard/WorkplaceColumn/index.d.ts +0 -13
  14. package/dist/components/AssignmentBoard/WorkplaceColumn/styles.d.ts +0 -6
  15. package/dist/components/AssignmentBoard/helpers.d.ts +0 -17
  16. package/dist/components/AssignmentBoard/index.d.ts +0 -14
  17. package/dist/components/AssignmentBoard/styles.d.ts +0 -13
  18. package/dist/components/Navigation/index.d.ts +0 -11
  19. package/dist/components/Navigation/styles.d.ts +0 -3
  20. package/dist/components/SettingsFormContent/index.d.ts +0 -5
  21. package/dist/components/SettingsFormContent/styles.d.ts +0 -3
  22. package/dist/components/Widget/index.d.ts +0 -5
  23. package/dist/components/Widget/utils.d.ts +0 -15
  24. package/dist/components/WidgetView/index.d.ts +0 -4
  25. package/dist/components/WidgetView/styles.d.ts +0 -3
  26. package/dist/locales/index.d.ts +0 -77
  27. package/dist/stories/Widget.stories.d.ts +0 -5
  28. package/dist/types.d.ts +0 -29
  29. package/dist/utils/state.d.ts +0 -7
  30. package/dist/version.d.ts +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/locales/index.ts","../src/utils/state.ts","../src/version.ts","../src/components/SettingsFormContent/index.tsx","../node_modules/graphql/jsutils/nodejsCustomInspectSymbol.mjs","../node_modules/graphql/jsutils/defineInspect.mjs","../node_modules/graphql/jsutils/invariant.mjs","../node_modules/graphql/language/ast.mjs","../node_modules/graphql/jsutils/inspect.mjs","../node_modules/graphql/language/visitor.mjs","../node_modules/graphql/language/printer.mjs","../node_modules/graphql/language/blockString.mjs","../node_modules/redux/dist/redux.mjs","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js","../node_modules/use-sync-external-store/with-selector.js","../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../node_modules/css-box-model/dist/css-box-model.esm.js","../node_modules/raf-schd/dist/raf-schd.esm.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@hello-pangea/dnd/dist/dnd.esm.js","../src/components/AssignmentBoard/OperatorCard/SidePanel/styles.ts","../src/components/AssignmentBoard/OperatorCard/styles.ts","../src/components/AssignmentBoard/helpers.ts","../src/components/AssignmentBoard/OperatorCard/SidePanel/MainContent.tsx","../src/components/AssignmentBoard/DropZone/index.tsx","../src/components/AssignmentBoard/DropZone/styles.ts","../src/components/AssignmentBoard/OperatorCard/index.tsx","../src/components/AssignmentBoard/PoolColumn/styles.ts","../src/components/AssignmentBoard/PoolColumn/index.tsx","../src/components/AssignmentBoard/WorkplaceColumn/styles.ts","../src/components/AssignmentBoard/WorkplaceColumn/index.tsx","../src/components/AssignmentBoard/styles.ts","../src/components/AssignmentBoard/index.tsx","../src/components/Navigation/styles.ts","../src/components/Navigation/index.tsx","../src/components/WidgetView/styles.ts","../src/components/WidgetView/index.tsx","../node_modules/property-expr/index.js","../node_modules/tiny-case/index.js","../node_modules/toposort/index.js","../node_modules/yup/index.esm.js","../src/components/Widget/utils.ts","../src/components/Widget/index.tsx","../src/index.tsx"],"sourcesContent":["import en from './en/translation.json';\nimport pl from './pl/translation.json';\n\nconst resources = {\n en: {\n translation: en,\n },\n pl: {\n translation: pl,\n },\n};\n\nexport default resources;\n","import { getCurrentShift, normalizeShifts, Shift } from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\n\nimport { ViewState } from '@/types';\n\nconst DATETIME_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';\n\nconst sortShifts = (shifts: Shift[]): Shift[] => [...shifts].sort((a, b) => a.startedAt.localeCompare(b.startedAt));\n\nconst findShiftByName = (shifts: Shift[], name: string) => shifts.find((s) => s.name === name);\n\nexport const makeShiftDateTime = (date: string, shift: Shift): string => {\n const shiftStart = dayjs(shift.startedAt);\n return dayjs(date).hour(shiftStart.hour()).minute(shiftStart.minute()).second(0).format(DATETIME_FORMAT);\n};\n\nexport const extractDate = (dateTime: string): string => dayjs(dateTime).format('YYYY-MM-DD');\n\nconst getMinDate = (shifts: Shift[]): string => {\n const now = dayjs();\n const normalizedShifts = normalizeShifts(shifts, now);\n const currentShift = getCurrentShift(now, normalizedShifts);\n return (currentShift?.startedAt || now).format('YYYY-MM-DD');\n};\n\nexport const getInitialState = (shifts: Shift[]): ViewState | null => {\n const sortedShifts = sortShifts(shifts);\n const now = dayjs();\n const today = now.format('YYYY-MM-DD');\n const normalizedShifts = normalizeShifts(sortedShifts, now);\n\n const currentNormalizedShift = getCurrentShift(now, normalizedShifts);\n\n if (currentNormalizedShift) {\n const shift = findShiftByName(sortedShifts, currentNormalizedShift.name);\n if (shift) {\n return { date: currentNormalizedShift.startedAt.format(DATETIME_FORMAT), shift, isCurrentShift: true };\n }\n }\n\n const nextNormalizedShift = normalizedShifts.find((s) => s.startedAt.isAfter(now));\n\n if (nextNormalizedShift) {\n const shift = findShiftByName(sortedShifts, nextNormalizedShift.name);\n if (shift) {\n return { date: makeShiftDateTime(today, shift), shift, isCurrentShift: false };\n }\n }\n\n const tomorrow = dayjs(now).add(1, 'day').startOf('day');\n const tomorrowNormalizedShifts = normalizeShifts(sortedShifts, tomorrow);\n\n if (tomorrowNormalizedShifts.length > 0) {\n const shift = findShiftByName(sortedShifts, tomorrowNormalizedShifts[0].name);\n if (shift) {\n return { date: makeShiftDateTime(tomorrow.format('YYYY-MM-DD'), shift), shift, isCurrentShift: false };\n }\n }\n\n return null;\n};\n\nconst MAX_DAYS_FORWARD = 14;\n\nexport const canNavigate = (currentState: ViewState, shifts: Shift[], direction: 'prev' | 'next'): boolean => {\n const sortedShifts = sortShifts(shifts);\n const currentDate = extractDate(currentState.date);\n const minDate = getMinDate(sortedShifts);\n const maxDate = dayjs().add(MAX_DAYS_FORWARD, 'day').format('YYYY-MM-DD');\n const currentIndex = sortedShifts.findIndex((s) => s.id === currentState.shift.id);\n\n if (direction === 'next') {\n if (currentIndex < sortedShifts.length - 1) {\n return true;\n }\n const nextDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD');\n return nextDate <= maxDate;\n }\n\n if (currentIndex > 0) {\n return currentDate >= minDate;\n }\n const prevDate = dayjs(currentDate).subtract(1, 'day').format('YYYY-MM-DD');\n return prevDate >= minDate;\n};\n\nexport const navigateState = (currentState: ViewState, shifts: Shift[], direction: 'prev' | 'next'): ViewState => {\n const sortedShifts = sortShifts(shifts);\n if (!canNavigate(currentState, sortedShifts, direction)) {\n return currentState;\n }\n\n const currentDate = extractDate(currentState.date);\n const currentIndex = sortedShifts.findIndex((s) => s.id === currentState.shift.id);\n\n const checkIsCurrent = (date: string, shift: Shift): boolean => {\n const now = dayjs();\n const normalizedShifts = normalizeShifts(sortedShifts, now);\n const currentNormalized = getCurrentShift(now, normalizedShifts);\n if (!currentNormalized || currentNormalized.name !== shift.name) return false;\n return currentNormalized.startedAt.format('YYYY-MM-DD') === dayjs(date).format('YYYY-MM-DD');\n };\n\n if (direction === 'next') {\n if (currentIndex < sortedShifts.length - 1) {\n const shift = sortedShifts[currentIndex + 1];\n const date = makeShiftDateTime(currentDate, shift);\n return { date, shift, isCurrentShift: checkIsCurrent(date, shift) };\n }\n const nextDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD');\n const shift = sortedShifts[0];\n return { date: makeShiftDateTime(nextDate, shift), shift, isCurrentShift: false };\n }\n\n if (currentIndex > 0) {\n const shift = sortedShifts[currentIndex - 1];\n const date = makeShiftDateTime(currentDate, shift);\n return { date, shift, isCurrentShift: checkIsCurrent(date, shift) };\n }\n const prevDate = dayjs(currentDate).subtract(1, 'day').format('YYYY-MM-DD');\n const shift = sortedShifts[sortedShifts.length - 1];\n return { date: makeShiftDateTime(prevDate, shift), shift, isCurrentShift: false };\n};\n","export const LIBRARY_VERSION = '1.0.7';","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TabContext, TabList, TabPanel } from '@mui/lab';\nimport { Box, FormControl, InputLabel, MenuItem, Select, Tab } from '@mui/material';\nimport { SettingsFormContentProps } from 'andoncloud-widget-base';\n\nimport { WidgetData, WidgetSettings } from '@/types';\n\nconst SettingsFormContent: React.FC<SettingsFormContentProps<WidgetData, WidgetSettings>> = ({ data, formProps }) => {\n const [tabValue, setTabValue] = useState('1');\n const { t } = useTranslation();\n\n const handleTabChange = (_: React.SyntheticEvent, newValue: string) => {\n setTabValue(newValue);\n };\n\n return (\n <TabContext value={tabValue}>\n <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>\n <TabList onChange={handleTabChange}>\n <Tab label={t('filters')} value=\"1\" />\n <Tab label={t('advanced')} value=\"2\" />\n </TabList>\n </Box>\n <TabPanel value=\"1\">\n <FormControl fullWidth>\n <InputLabel id=\"department-label\">{t('department')}</InputLabel>\n <Select\n name=\"departmentId\"\n labelId=\"department-label\"\n variant=\"outlined\"\n value={formProps.values.departmentId ?? ''}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value=\"\">{t('allDepartments')}</MenuItem>\n {data.departments.map((department) => (\n <MenuItem key={department.id} value={department.id}>\n {department.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </TabPanel>\n <TabPanel value=\"2\">\n <FormControl fullWidth>\n <InputLabel id=\"refresh-interval-label\">{t('refreshInterval')}</InputLabel>\n <Select\n name=\"refreshInterval\"\n labelId=\"refresh-interval-label\"\n variant=\"outlined\"\n value={formProps.values.refreshInterval}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value={15}>15s</MenuItem>\n <MenuItem value={30}>30s</MenuItem>\n <MenuItem value={60}>60s</MenuItem>\n </Select>\n </FormControl>\n </TabPanel>\n </TabContext>\n );\n};\n\nexport default SettingsFormContent;\n","// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nvar nodejsCustomInspectSymbol = typeof Symbol === 'function' && typeof Symbol.for === 'function' ? Symbol.for('nodejs.util.inspect.custom') : undefined;\nexport default nodejsCustomInspectSymbol;\n","import invariant from \"./invariant.mjs\";\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\n/**\n * The `defineInspect()` function defines `inspect()` prototype method as alias of `toJSON`\n */\n\nexport default function defineInspect(classObject) {\n var fn = classObject.prototype.toJSON;\n typeof fn === 'function' || invariant(0);\n classObject.prototype.inspect = fn; // istanbul ignore else (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n if (nodejsCustomInspectSymbol) {\n classObject.prototype[nodejsCustomInspectSymbol] = fn;\n }\n}\n","export default function invariant(condition, message) {\n var booleanCondition = Boolean(condition); // istanbul ignore else (See transformation done in './resources/inlineInvariant.js')\n\n if (!booleanCondition) {\n throw new Error(message != null ? message : 'Unexpected invariant triggered.');\n }\n}\n","import defineInspect from \"../jsutils/defineInspect.mjs\";\n\n/**\n * Contains a range of UTF-8 character offsets and token references that\n * identify the region of the source from which the AST derived.\n */\nexport var Location = /*#__PURE__*/function () {\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The Token at which this Node begins.\n */\n\n /**\n * The Token at which this Node ends.\n */\n\n /**\n * The Source document the AST represents.\n */\n function Location(startToken, endToken, source) {\n this.start = startToken.start;\n this.end = endToken.end;\n this.startToken = startToken;\n this.endToken = endToken;\n this.source = source;\n }\n\n var _proto = Location.prototype;\n\n _proto.toJSON = function toJSON() {\n return {\n start: this.start,\n end: this.end\n };\n };\n\n return Location;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Location);\n/**\n * Represents a range of characters represented by a lexical token\n * within a Source.\n */\n\nexport var Token = /*#__PURE__*/function () {\n /**\n * The kind of Token.\n */\n\n /**\n * The character offset at which this Node begins.\n */\n\n /**\n * The character offset at which this Node ends.\n */\n\n /**\n * The 1-indexed line number on which this Token appears.\n */\n\n /**\n * The 1-indexed column number at which this Token begins.\n */\n\n /**\n * For non-punctuation tokens, represents the interpreted value of the token.\n */\n\n /**\n * Tokens exist as nodes in a double-linked-list amongst all tokens\n * including ignored tokens. <SOF> is always the first node and <EOF>\n * the last.\n */\n function Token(kind, start, end, line, column, prev, value) {\n this.kind = kind;\n this.start = start;\n this.end = end;\n this.line = line;\n this.column = column;\n this.value = value;\n this.prev = prev;\n this.next = null;\n }\n\n var _proto2 = Token.prototype;\n\n _proto2.toJSON = function toJSON() {\n return {\n kind: this.kind,\n value: this.value,\n line: this.line,\n column: this.column\n };\n };\n\n return Token;\n}(); // Print a simplified form when appearing in `inspect` and `util.inspect`.\n\ndefineInspect(Token);\n/**\n * @internal\n */\n\nexport function isNode(maybeNode) {\n return maybeNode != null && typeof maybeNode.kind === 'string';\n}\n/**\n * The list of all possible AST node types.\n */\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-disable flowtype/no-weak-types */\nimport nodejsCustomInspectSymbol from \"./nodejsCustomInspectSymbol.mjs\";\nvar MAX_ARRAY_LENGTH = 10;\nvar MAX_RECURSIVE_DEPTH = 2;\n/**\n * Used to print values in error messages.\n */\n\nexport default function inspect(value) {\n return formatValue(value, []);\n}\n\nfunction formatValue(value, seenValues) {\n switch (_typeof(value)) {\n case 'string':\n return JSON.stringify(value);\n\n case 'function':\n return value.name ? \"[function \".concat(value.name, \"]\") : '[function]';\n\n case 'object':\n if (value === null) {\n return 'null';\n }\n\n return formatObjectValue(value, seenValues);\n\n default:\n return String(value);\n }\n}\n\nfunction formatObjectValue(value, previouslySeenValues) {\n if (previouslySeenValues.indexOf(value) !== -1) {\n return '[Circular]';\n }\n\n var seenValues = [].concat(previouslySeenValues, [value]);\n var customInspectFn = getCustomFn(value);\n\n if (customInspectFn !== undefined) {\n var customValue = customInspectFn.call(value); // check for infinite recursion\n\n if (customValue !== value) {\n return typeof customValue === 'string' ? customValue : formatValue(customValue, seenValues);\n }\n } else if (Array.isArray(value)) {\n return formatArray(value, seenValues);\n }\n\n return formatObject(value, seenValues);\n}\n\nfunction formatObject(object, seenValues) {\n var keys = Object.keys(object);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[' + getObjectTag(object) + ']';\n }\n\n var properties = keys.map(function (key) {\n var value = formatValue(object[key], seenValues);\n return key + ': ' + value;\n });\n return '{ ' + properties.join(', ') + ' }';\n}\n\nfunction formatArray(array, seenValues) {\n if (array.length === 0) {\n return '[]';\n }\n\n if (seenValues.length > MAX_RECURSIVE_DEPTH) {\n return '[Array]';\n }\n\n var len = Math.min(MAX_ARRAY_LENGTH, array.length);\n var remaining = array.length - len;\n var items = [];\n\n for (var i = 0; i < len; ++i) {\n items.push(formatValue(array[i], seenValues));\n }\n\n if (remaining === 1) {\n items.push('... 1 more item');\n } else if (remaining > 1) {\n items.push(\"... \".concat(remaining, \" more items\"));\n }\n\n return '[' + items.join(', ') + ']';\n}\n\nfunction getCustomFn(object) {\n var customInspectFn = object[String(nodejsCustomInspectSymbol)];\n\n if (typeof customInspectFn === 'function') {\n return customInspectFn;\n }\n\n if (typeof object.inspect === 'function') {\n return object.inspect;\n }\n}\n\nfunction getObjectTag(object) {\n var tag = Object.prototype.toString.call(object).replace(/^\\[object /, '').replace(/]$/, '');\n\n if (tag === 'Object' && typeof object.constructor === 'function') {\n var name = object.constructor.name;\n\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n }\n\n return tag;\n}\n","import inspect from \"../jsutils/inspect.mjs\";\nimport { isNode } from \"./ast.mjs\";\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n\nexport var QueryDocumentKeys = {\n Name: [],\n Document: ['definitions'],\n OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'],\n Variable: ['name'],\n SelectionSet: ['selections'],\n Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n Argument: ['name', 'value'],\n FragmentSpread: ['name', 'directives'],\n InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n FragmentDefinition: ['name', // Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n IntValue: [],\n FloatValue: [],\n StringValue: [],\n BooleanValue: [],\n NullValue: [],\n EnumValue: [],\n ListValue: ['values'],\n ObjectValue: ['fields'],\n ObjectField: ['name', 'value'],\n Directive: ['name', 'arguments'],\n NamedType: ['name'],\n ListType: ['type'],\n NonNullType: ['type'],\n SchemaDefinition: ['description', 'directives', 'operationTypes'],\n OperationTypeDefinition: ['type'],\n ScalarTypeDefinition: ['description', 'name', 'directives'],\n ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n InterfaceTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n EnumValueDefinition: ['description', 'name', 'directives'],\n InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n DirectiveDefinition: ['description', 'name', 'arguments', 'locations'],\n SchemaExtension: ['directives', 'operationTypes'],\n ScalarTypeExtension: ['name', 'directives'],\n ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n InterfaceTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n UnionTypeExtension: ['name', 'directives', 'types'],\n EnumTypeExtension: ['name', 'directives', 'values'],\n InputObjectTypeExtension: ['name', 'directives', 'fields']\n};\nexport var BREAK = Object.freeze({});\n/**\n * visit() will walk through an AST using a depth-first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n * const editedAST = visit(ast, {\n * enter(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: skip visiting this node\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * },\n * leave(node, key, parent, path, ancestors) {\n * // @return\n * // undefined: no action\n * // false: no action\n * // visitor.BREAK: stop visiting altogether\n * // null: delete this node\n * // any value: replace this node with the returned value\n * }\n * });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of the\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node of a specific kind.\n *\n * visit(ast, {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n * a specific kind.\n *\n * visit(ast, {\n * Kind: {\n * enter(node) {\n * // enter the \"Kind\" node\n * }\n * leave(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n * visit(ast, {\n * enter(node) {\n * // enter any node\n * },\n * leave(node) {\n * // leave any node\n * }\n * })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n * visit(ast, {\n * enter: {\n * Kind(node) {\n * // enter the \"Kind\" node\n * }\n * },\n * leave: {\n * Kind(node) {\n * // leave the \"Kind\" node\n * }\n * }\n * })\n */\n\nexport function visit(root, visitor) {\n var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n /* eslint-disable no-undef-init */\n var stack = undefined;\n var inArray = Array.isArray(root);\n var keys = [root];\n var index = -1;\n var edits = [];\n var node = undefined;\n var key = undefined;\n var parent = undefined;\n var path = [];\n var ancestors = [];\n var newRoot = root;\n /* eslint-enable no-undef-init */\n\n do {\n index++;\n var isLeaving = index === keys.length;\n var isEdited = isLeaving && edits.length !== 0;\n\n if (isLeaving) {\n key = ancestors.length === 0 ? undefined : path[path.length - 1];\n node = parent;\n parent = ancestors.pop();\n\n if (isEdited) {\n if (inArray) {\n node = node.slice();\n } else {\n var clone = {};\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(node); _i2 < _Object$keys2.length; _i2++) {\n var k = _Object$keys2[_i2];\n clone[k] = node[k];\n }\n\n node = clone;\n }\n\n var editOffset = 0;\n\n for (var ii = 0; ii < edits.length; ii++) {\n var editKey = edits[ii][0];\n var editValue = edits[ii][1];\n\n if (inArray) {\n editKey -= editOffset;\n }\n\n if (inArray && editValue === null) {\n node.splice(editKey, 1);\n editOffset++;\n } else {\n node[editKey] = editValue;\n }\n }\n }\n\n index = stack.index;\n keys = stack.keys;\n edits = stack.edits;\n inArray = stack.inArray;\n stack = stack.prev;\n } else {\n key = parent ? inArray ? index : keys[index] : undefined;\n node = parent ? parent[key] : newRoot;\n\n if (node === null || node === undefined) {\n continue;\n }\n\n if (parent) {\n path.push(key);\n }\n }\n\n var result = void 0;\n\n if (!Array.isArray(node)) {\n if (!isNode(node)) {\n throw new Error(\"Invalid AST Node: \".concat(inspect(node), \".\"));\n }\n\n var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n\n if (visitFn) {\n result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n if (result === BREAK) {\n break;\n }\n\n if (result === false) {\n if (!isLeaving) {\n path.pop();\n continue;\n }\n } else if (result !== undefined) {\n edits.push([key, result]);\n\n if (!isLeaving) {\n if (isNode(result)) {\n node = result;\n } else {\n path.pop();\n continue;\n }\n }\n }\n }\n }\n\n if (result === undefined && isEdited) {\n edits.push([key, node]);\n }\n\n if (isLeaving) {\n path.pop();\n } else {\n var _visitorKeys$node$kin;\n\n stack = {\n inArray: inArray,\n index: index,\n keys: keys,\n edits: edits,\n prev: stack\n };\n inArray = Array.isArray(node);\n keys = inArray ? node : (_visitorKeys$node$kin = visitorKeys[node.kind]) !== null && _visitorKeys$node$kin !== void 0 ? _visitorKeys$node$kin : [];\n index = -1;\n edits = [];\n\n if (parent) {\n ancestors.push(parent);\n }\n\n parent = node;\n }\n } while (stack !== undefined);\n\n if (edits.length !== 0) {\n newRoot = edits[edits.length - 1][1];\n }\n\n return newRoot;\n}\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\n\nexport function visitInParallel(visitors) {\n var skipping = new Array(visitors.length);\n return {\n enter: function enter(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n false);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === false) {\n skipping[i] = node;\n } else if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined) {\n return result;\n }\n }\n }\n }\n },\n leave: function leave(node) {\n for (var i = 0; i < visitors.length; i++) {\n if (skipping[i] == null) {\n var fn = getVisitFn(visitors[i], node.kind,\n /* isLeaving */\n true);\n\n if (fn) {\n var result = fn.apply(visitors[i], arguments);\n\n if (result === BREAK) {\n skipping[i] = BREAK;\n } else if (result !== undefined && result !== false) {\n return result;\n }\n }\n } else if (skipping[i] === node) {\n skipping[i] = null;\n }\n }\n }\n };\n}\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\n\nexport function getVisitFn(visitor, kind, isLeaving) {\n var kindVisitor = visitor[kind];\n\n if (kindVisitor) {\n if (!isLeaving && typeof kindVisitor === 'function') {\n // { Kind() {} }\n return kindVisitor;\n }\n\n var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n\n if (typeof kindSpecificVisitor === 'function') {\n // { Kind: { enter() {}, leave() {} } }\n return kindSpecificVisitor;\n }\n } else {\n var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n\n if (specificVisitor) {\n if (typeof specificVisitor === 'function') {\n // { enter() {}, leave() {} }\n return specificVisitor;\n }\n\n var specificKindVisitor = specificVisitor[kind];\n\n if (typeof specificKindVisitor === 'function') {\n // { enter: { Kind() {} }, leave: { Kind() {} } }\n return specificKindVisitor;\n }\n }\n }\n}\n","import { visit } from \"./visitor.mjs\";\nimport { printBlockString } from \"./blockString.mjs\";\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\n\nexport function print(ast) {\n return visit(ast, {\n leave: printDocASTReducer\n });\n}\nvar MAX_LINE_LENGTH = 80; // TODO: provide better type coverage in future\n\nvar printDocASTReducer = {\n Name: function Name(node) {\n return node.value;\n },\n Variable: function Variable(node) {\n return '$' + node.name;\n },\n // Document\n Document: function Document(node) {\n return join(node.definitions, '\\n\\n') + '\\n';\n },\n OperationDefinition: function OperationDefinition(node) {\n var op = node.operation;\n var name = node.name;\n var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n var directives = join(node.directives, ' ');\n var selectionSet = node.selectionSet; // Anonymous queries with no directives or variable definitions can use\n // the query short form.\n\n return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n },\n VariableDefinition: function VariableDefinition(_ref) {\n var variable = _ref.variable,\n type = _ref.type,\n defaultValue = _ref.defaultValue,\n directives = _ref.directives;\n return variable + ': ' + type + wrap(' = ', defaultValue) + wrap(' ', join(directives, ' '));\n },\n SelectionSet: function SelectionSet(_ref2) {\n var selections = _ref2.selections;\n return block(selections);\n },\n Field: function Field(_ref3) {\n var alias = _ref3.alias,\n name = _ref3.name,\n args = _ref3.arguments,\n directives = _ref3.directives,\n selectionSet = _ref3.selectionSet;\n var prefix = wrap('', alias, ': ') + name;\n var argsLine = prefix + wrap('(', join(args, ', '), ')');\n\n if (argsLine.length > MAX_LINE_LENGTH) {\n argsLine = prefix + wrap('(\\n', indent(join(args, '\\n')), '\\n)');\n }\n\n return join([argsLine, join(directives, ' '), selectionSet], ' ');\n },\n Argument: function Argument(_ref4) {\n var name = _ref4.name,\n value = _ref4.value;\n return name + ': ' + value;\n },\n // Fragments\n FragmentSpread: function FragmentSpread(_ref5) {\n var name = _ref5.name,\n directives = _ref5.directives;\n return '...' + name + wrap(' ', join(directives, ' '));\n },\n InlineFragment: function InlineFragment(_ref6) {\n var typeCondition = _ref6.typeCondition,\n directives = _ref6.directives,\n selectionSet = _ref6.selectionSet;\n return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n },\n FragmentDefinition: function FragmentDefinition(_ref7) {\n var name = _ref7.name,\n typeCondition = _ref7.typeCondition,\n variableDefinitions = _ref7.variableDefinitions,\n directives = _ref7.directives,\n selectionSet = _ref7.selectionSet;\n return (// Note: fragment variable definitions are experimental and may be changed\n // or removed in the future.\n \"fragment \".concat(name).concat(wrap('(', join(variableDefinitions, ', '), ')'), \" \") + \"on \".concat(typeCondition, \" \").concat(wrap('', join(directives, ' '), ' ')) + selectionSet\n );\n },\n // Value\n IntValue: function IntValue(_ref8) {\n var value = _ref8.value;\n return value;\n },\n FloatValue: function FloatValue(_ref9) {\n var value = _ref9.value;\n return value;\n },\n StringValue: function StringValue(_ref10, key) {\n var value = _ref10.value,\n isBlockString = _ref10.block;\n return isBlockString ? printBlockString(value, key === 'description' ? '' : ' ') : JSON.stringify(value);\n },\n BooleanValue: function BooleanValue(_ref11) {\n var value = _ref11.value;\n return value ? 'true' : 'false';\n },\n NullValue: function NullValue() {\n return 'null';\n },\n EnumValue: function EnumValue(_ref12) {\n var value = _ref12.value;\n return value;\n },\n ListValue: function ListValue(_ref13) {\n var values = _ref13.values;\n return '[' + join(values, ', ') + ']';\n },\n ObjectValue: function ObjectValue(_ref14) {\n var fields = _ref14.fields;\n return '{' + join(fields, ', ') + '}';\n },\n ObjectField: function ObjectField(_ref15) {\n var name = _ref15.name,\n value = _ref15.value;\n return name + ': ' + value;\n },\n // Directive\n Directive: function Directive(_ref16) {\n var name = _ref16.name,\n args = _ref16.arguments;\n return '@' + name + wrap('(', join(args, ', '), ')');\n },\n // Type\n NamedType: function NamedType(_ref17) {\n var name = _ref17.name;\n return name;\n },\n ListType: function ListType(_ref18) {\n var type = _ref18.type;\n return '[' + type + ']';\n },\n NonNullType: function NonNullType(_ref19) {\n var type = _ref19.type;\n return type + '!';\n },\n // Type System Definitions\n SchemaDefinition: addDescription(function (_ref20) {\n var directives = _ref20.directives,\n operationTypes = _ref20.operationTypes;\n return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n }),\n OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n var operation = _ref21.operation,\n type = _ref21.type;\n return operation + ': ' + type;\n },\n ScalarTypeDefinition: addDescription(function (_ref22) {\n var name = _ref22.name,\n directives = _ref22.directives;\n return join(['scalar', name, join(directives, ' ')], ' ');\n }),\n ObjectTypeDefinition: addDescription(function (_ref23) {\n var name = _ref23.name,\n interfaces = _ref23.interfaces,\n directives = _ref23.directives,\n fields = _ref23.fields;\n return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n FieldDefinition: addDescription(function (_ref24) {\n var name = _ref24.name,\n args = _ref24.arguments,\n type = _ref24.type,\n directives = _ref24.directives;\n return name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + ': ' + type + wrap(' ', join(directives, ' '));\n }),\n InputValueDefinition: addDescription(function (_ref25) {\n var name = _ref25.name,\n type = _ref25.type,\n defaultValue = _ref25.defaultValue,\n directives = _ref25.directives;\n return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n }),\n InterfaceTypeDefinition: addDescription(function (_ref26) {\n var name = _ref26.name,\n interfaces = _ref26.interfaces,\n directives = _ref26.directives,\n fields = _ref26.fields;\n return join(['interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n }),\n UnionTypeDefinition: addDescription(function (_ref27) {\n var name = _ref27.name,\n directives = _ref27.directives,\n types = _ref27.types;\n return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n }),\n EnumTypeDefinition: addDescription(function (_ref28) {\n var name = _ref28.name,\n directives = _ref28.directives,\n values = _ref28.values;\n return join(['enum', name, join(directives, ' '), block(values)], ' ');\n }),\n EnumValueDefinition: addDescription(function (_ref29) {\n var name = _ref29.name,\n directives = _ref29.directives;\n return join([name, join(directives, ' ')], ' ');\n }),\n InputObjectTypeDefinition: addDescription(function (_ref30) {\n var name = _ref30.name,\n directives = _ref30.directives,\n fields = _ref30.fields;\n return join(['input', name, join(directives, ' '), block(fields)], ' ');\n }),\n DirectiveDefinition: addDescription(function (_ref31) {\n var name = _ref31.name,\n args = _ref31.arguments,\n repeatable = _ref31.repeatable,\n locations = _ref31.locations;\n return 'directive @' + name + (hasMultilineItems(args) ? wrap('(\\n', indent(join(args, '\\n')), '\\n)') : wrap('(', join(args, ', '), ')')) + (repeatable ? ' repeatable' : '') + ' on ' + join(locations, ' | ');\n }),\n SchemaExtension: function SchemaExtension(_ref32) {\n var directives = _ref32.directives,\n operationTypes = _ref32.operationTypes;\n return join(['extend schema', join(directives, ' '), block(operationTypes)], ' ');\n },\n ScalarTypeExtension: function ScalarTypeExtension(_ref33) {\n var name = _ref33.name,\n directives = _ref33.directives;\n return join(['extend scalar', name, join(directives, ' ')], ' ');\n },\n ObjectTypeExtension: function ObjectTypeExtension(_ref34) {\n var name = _ref34.name,\n interfaces = _ref34.interfaces,\n directives = _ref34.directives,\n fields = _ref34.fields;\n return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n InterfaceTypeExtension: function InterfaceTypeExtension(_ref35) {\n var name = _ref35.name,\n interfaces = _ref35.interfaces,\n directives = _ref35.directives,\n fields = _ref35.fields;\n return join(['extend interface', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n },\n UnionTypeExtension: function UnionTypeExtension(_ref36) {\n var name = _ref36.name,\n directives = _ref36.directives,\n types = _ref36.types;\n return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n },\n EnumTypeExtension: function EnumTypeExtension(_ref37) {\n var name = _ref37.name,\n directives = _ref37.directives,\n values = _ref37.values;\n return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n },\n InputObjectTypeExtension: function InputObjectTypeExtension(_ref38) {\n var name = _ref38.name,\n directives = _ref38.directives,\n fields = _ref38.fields;\n return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n }\n};\n\nfunction addDescription(cb) {\n return function (node) {\n return join([node.description, cb(node)], '\\n');\n };\n}\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\n\n\nfunction join(maybeArray) {\n var _maybeArray$filter$jo;\n\n var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n return (_maybeArray$filter$jo = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.filter(function (x) {\n return x;\n }).join(separator)) !== null && _maybeArray$filter$jo !== void 0 ? _maybeArray$filter$jo : '';\n}\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\n\n\nfunction block(array) {\n return wrap('{\\n', indent(join(array, '\\n')), '\\n}');\n}\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string.\n */\n\n\nfunction wrap(start, maybeString) {\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n return maybeString != null && maybeString !== '' ? start + maybeString + end : '';\n}\n\nfunction indent(str) {\n return wrap(' ', str.replace(/\\n/g, '\\n '));\n}\n\nfunction isMultiline(str) {\n return str.indexOf('\\n') !== -1;\n}\n\nfunction hasMultilineItems(maybeArray) {\n return maybeArray != null && maybeArray.some(isMultiline);\n}\n","/**\n * Produces the value of a block string from its parsed raw value, similar to\n * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n *\n * @internal\n */\nexport function dedentBlockStringValue(rawString) {\n // Expand a block string's raw value into independent lines.\n var lines = rawString.split(/\\r\\n|[\\n\\r]/g); // Remove common indentation from all lines but first.\n\n var commonIndent = getBlockStringIndentation(rawString);\n\n if (commonIndent !== 0) {\n for (var i = 1; i < lines.length; i++) {\n lines[i] = lines[i].slice(commonIndent);\n }\n } // Remove leading and trailing blank lines.\n\n\n var startLine = 0;\n\n while (startLine < lines.length && isBlank(lines[startLine])) {\n ++startLine;\n }\n\n var endLine = lines.length;\n\n while (endLine > startLine && isBlank(lines[endLine - 1])) {\n --endLine;\n } // Return a string of the lines joined with U+000A.\n\n\n return lines.slice(startLine, endLine).join('\\n');\n}\n\nfunction isBlank(str) {\n for (var i = 0; i < str.length; ++i) {\n if (str[i] !== ' ' && str[i] !== '\\t') {\n return false;\n }\n }\n\n return true;\n}\n/**\n * @internal\n */\n\n\nexport function getBlockStringIndentation(value) {\n var _commonIndent;\n\n var isFirstLine = true;\n var isEmptyLine = true;\n var indent = 0;\n var commonIndent = null;\n\n for (var i = 0; i < value.length; ++i) {\n switch (value.charCodeAt(i)) {\n case 13:\n // \\r\n if (value.charCodeAt(i + 1) === 10) {\n ++i; // skip \\r\\n as one symbol\n }\n\n // falls through\n\n case 10:\n // \\n\n isFirstLine = false;\n isEmptyLine = true;\n indent = 0;\n break;\n\n case 9: // \\t\n\n case 32:\n // <space>\n ++indent;\n break;\n\n default:\n if (isEmptyLine && !isFirstLine && (commonIndent === null || indent < commonIndent)) {\n commonIndent = indent;\n }\n\n isEmptyLine = false;\n }\n }\n\n return (_commonIndent = commonIndent) !== null && _commonIndent !== void 0 ? _commonIndent : 0;\n}\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n *\n * @internal\n */\n\nexport function printBlockString(value) {\n var indentation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var preferMultipleLines = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isSingleLine = value.indexOf('\\n') === -1;\n var hasLeadingSpace = value[0] === ' ' || value[0] === '\\t';\n var hasTrailingQuote = value[value.length - 1] === '\"';\n var hasTrailingSlash = value[value.length - 1] === '\\\\';\n var printAsMultipleLines = !isSingleLine || hasTrailingQuote || hasTrailingSlash || preferMultipleLines;\n var result = ''; // Format a multi-line block quote to account for leading space.\n\n if (printAsMultipleLines && !(isSingleLine && hasLeadingSpace)) {\n result += '\\n' + indentation;\n }\n\n result += indentation ? value.replace(/\\n/g, '\\n' + indentation) : value;\n\n if (printAsMultipleLines) {\n result += '\\n';\n }\n\n return '\"\"\"' + result.replace(/\"\"\"/g, '\\\\\"\"\"') + '\"\"\"';\n}\n","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null)\n return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n if (val === void 0)\n return \"undefined\";\n if (val === null)\n return \"null\";\n const type = typeof val;\n switch (type) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\": {\n return type;\n }\n }\n if (Array.isArray(val))\n return \"array\";\n if (isDate(val))\n return \"date\";\n if (isError(val))\n return \"error\";\n const constructorName = ctorName(val);\n switch (constructorName) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return constructorName;\n }\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n if (val instanceof Date)\n return true;\n return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n let typeOfVal = typeof val;\n if (process.env.NODE_ENV !== \"production\") {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n if (typeof reducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n }\n if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n enhancer = preloadedState;\n preloadedState = void 0;\n }\n if (typeof enhancer !== \"undefined\") {\n if (typeof enhancer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, preloadedState);\n }\n let currentReducer = reducer;\n let currentState = preloadedState;\n let currentListeners = /* @__PURE__ */ new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = /* @__PURE__ */ new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n }\n return currentState;\n }\n function subscribe(listener) {\n if (typeof listener !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== \"string\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach((listener) => {\n listener();\n });\n return action;\n }\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== \"function\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = nextReducer;\n dispatch({\n type: actionTypes_default.REPLACE\n });\n }\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer) {\n if (typeof observer !== \"object\" || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = observer;\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [symbol_observable_default]() {\n return this;\n }\n };\n }\n dispatch({\n type: actionTypes_default.INIT\n });\n const store = {\n dispatch,\n subscribe,\n getState,\n replaceReducer,\n [symbol_observable_default]: observable\n };\n return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(message);\n }\n try {\n throw new Error(message);\n } catch (e) {\n }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (reducerKeys.length === 0) {\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach((key) => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === actionTypes_default.REPLACE)\n return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach((key) => {\n const reducer = reducers[key];\n const initialState = reducer(void 0, {\n type: actionTypes_default.INIT\n });\n if (typeof initialState === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n }\n if (typeof reducer(void 0, {\n type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n }) === \"undefined\") {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\nfunction combineReducers(reducers) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof reducers[key] === \"undefined\") {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === \"function\") {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n let unexpectedKeyCache;\n if (process.env.NODE_ENV !== \"production\") {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state = {}, action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== \"production\") {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === \"undefined\") {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n return function(...args) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === \"function\") {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== \"object\" || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === \"function\") {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n return (createStore2) => (reducer, preloadedState) => {\n const store = createStore2(reducer, preloadedState);\n let dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n };\n const middlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n actionTypes_default as __DO_NOT_USE__ActionTypes,\n applyMiddleware,\n bindActionCreators,\n combineReducers,\n compose,\n createStore,\n isAction,\n isPlainObject,\n legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","/**\n * @license React\n * use-sync-external-store-with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = React.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","import invariant from 'tiny-invariant';\n\nvar getRect = function getRect(_ref) {\n var top = _ref.top,\n right = _ref.right,\n bottom = _ref.bottom,\n left = _ref.left;\n var width = right - left;\n var height = bottom - top;\n var rect = {\n top: top,\n right: right,\n bottom: bottom,\n left: left,\n width: width,\n height: height,\n x: left,\n y: top,\n center: {\n x: (right + left) / 2,\n y: (bottom + top) / 2\n }\n };\n return rect;\n};\nvar expand = function expand(target, expandBy) {\n return {\n top: target.top - expandBy.top,\n left: target.left - expandBy.left,\n bottom: target.bottom + expandBy.bottom,\n right: target.right + expandBy.right\n };\n};\nvar shrink = function shrink(target, shrinkBy) {\n return {\n top: target.top + shrinkBy.top,\n left: target.left + shrinkBy.left,\n bottom: target.bottom - shrinkBy.bottom,\n right: target.right - shrinkBy.right\n };\n};\n\nvar shift = function shift(target, shiftBy) {\n return {\n top: target.top + shiftBy.y,\n left: target.left + shiftBy.x,\n bottom: target.bottom + shiftBy.y,\n right: target.right + shiftBy.x\n };\n};\n\nvar noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\nvar createBox = function createBox(_ref2) {\n var borderBox = _ref2.borderBox,\n _ref2$margin = _ref2.margin,\n margin = _ref2$margin === void 0 ? noSpacing : _ref2$margin,\n _ref2$border = _ref2.border,\n border = _ref2$border === void 0 ? noSpacing : _ref2$border,\n _ref2$padding = _ref2.padding,\n padding = _ref2$padding === void 0 ? noSpacing : _ref2$padding;\n var marginBox = getRect(expand(borderBox, margin));\n var paddingBox = getRect(shrink(borderBox, border));\n var contentBox = getRect(shrink(paddingBox, padding));\n return {\n marginBox: marginBox,\n borderBox: getRect(borderBox),\n paddingBox: paddingBox,\n contentBox: contentBox,\n margin: margin,\n border: border,\n padding: padding\n };\n};\n\nvar parse = function parse(raw) {\n var value = raw.slice(0, -2);\n var suffix = raw.slice(-2);\n\n if (suffix !== 'px') {\n return 0;\n }\n\n var result = Number(value);\n !!isNaN(result) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Could not parse value [raw: \" + raw + \", without suffix: \" + value + \"]\") : invariant(false) : void 0;\n return result;\n};\n\nvar getWindowScroll = function getWindowScroll() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n};\n\nvar offset = function offset(original, change) {\n var borderBox = original.borderBox,\n border = original.border,\n margin = original.margin,\n padding = original.padding;\n var shifted = shift(borderBox, change);\n return createBox({\n borderBox: shifted,\n border: border,\n margin: margin,\n padding: padding\n });\n};\nvar withScroll = function withScroll(original, scroll) {\n if (scroll === void 0) {\n scroll = getWindowScroll();\n }\n\n return offset(original, scroll);\n};\nvar calculateBox = function calculateBox(borderBox, styles) {\n var margin = {\n top: parse(styles.marginTop),\n right: parse(styles.marginRight),\n bottom: parse(styles.marginBottom),\n left: parse(styles.marginLeft)\n };\n var padding = {\n top: parse(styles.paddingTop),\n right: parse(styles.paddingRight),\n bottom: parse(styles.paddingBottom),\n left: parse(styles.paddingLeft)\n };\n var border = {\n top: parse(styles.borderTopWidth),\n right: parse(styles.borderRightWidth),\n bottom: parse(styles.borderBottomWidth),\n left: parse(styles.borderLeftWidth)\n };\n return createBox({\n borderBox: borderBox,\n margin: margin,\n padding: padding,\n border: border\n });\n};\nvar getBox = function getBox(el) {\n var borderBox = el.getBoundingClientRect();\n var styles = window.getComputedStyle(el);\n return calculateBox(borderBox, styles);\n};\n\nexport { calculateBox, createBox, expand, getBox, getRect, offset, shrink, withScroll };\n","var rafSchd = function rafSchd(fn) {\n var lastArgs = [];\n var frameId = null;\n\n var wrapperFn = function wrapperFn() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n lastArgs = args;\n\n if (frameId) {\n return;\n }\n\n frameId = requestAnimationFrame(function () {\n frameId = null;\n fn.apply(void 0, lastArgs);\n });\n };\n\n wrapperFn.cancel = function () {\n if (!frameId) {\n return;\n }\n\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return wrapperFn;\n};\n\nexport default rafSchd;\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import React, { useState, useRef, useEffect, useLayoutEffect, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { createStore as createStore$1, compose, applyMiddleware, bindActionCreators } from 'redux';\nimport { Provider, connect } from 'react-redux';\nimport { getRect, expand, offset, withScroll, calculateBox, getBox, createBox } from 'css-box-model';\nimport rafSchd from 'raf-schd';\nimport _extends from '@babel/runtime/helpers/esm/extends';\n\nconst isProduction$1 = process.env.NODE_ENV === 'production';\nconst spacesAndTabs = /[ \\t]{2,}/g;\nconst lineStartWithSpaces = /^[ \\t]*/gm;\nconst clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\nconst getDevMessage = message => clean$2(`\n %c@hello-pangea/dnd\n\n %c${clean$2(message)}\n\n %c👷‍ This is a development only message. It will be removed in production builds.\n`);\nconst getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;'];\nconst isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings';\nfunction log(type, message) {\n if (isProduction$1) {\n return;\n }\n if (typeof window !== 'undefined' && window[isDisabledFlag]) {\n return;\n }\n console[type](...getFormattedMessage(message));\n}\nconst warning = log.bind(null, 'warn');\nconst error = log.bind(null, 'error');\n\nfunction noop$2() {}\n\nfunction getOptions(shared, fromBinding) {\n return {\n ...shared,\n ...fromBinding\n };\n}\nfunction bindEvents(el, bindings, sharedOptions) {\n const unbindings = bindings.map(binding => {\n const options = getOptions(sharedOptions, binding.options);\n el.addEventListener(binding.eventName, binding.fn, options);\n return function unbind() {\n el.removeEventListener(binding.eventName, binding.fn, options);\n };\n });\n return function unbindAll() {\n unbindings.forEach(unbind => {\n unbind();\n });\n };\n}\n\nconst isProduction = process.env.NODE_ENV === 'production';\nconst prefix$1 = 'Invariant failed';\nclass RbdInvariant extends Error {}\nRbdInvariant.prototype.toString = function toString() {\n return this.message;\n};\nfunction invariant(condition, message) {\n if (isProduction) {\n throw new RbdInvariant(prefix$1);\n } else {\n throw new RbdInvariant(`${prefix$1}: ${message || ''}`);\n }\n}\n\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.callbacks = null;\n this.unbind = noop$2;\n this.onWindowError = event => {\n const callbacks = this.getCallbacks();\n if (callbacks.isDragging()) {\n callbacks.tryAbort();\n process.env.NODE_ENV !== \"production\" ? warning(`\n An error was caught by our window 'error' event listener while a drag was occurring.\n The active drag has been aborted.\n `) : void 0;\n }\n const err = event.error;\n if (err instanceof RbdInvariant) {\n event.preventDefault();\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n }\n };\n this.getCallbacks = () => {\n if (!this.callbacks) {\n throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>');\n }\n return this.callbacks;\n };\n this.setCallbacks = callbacks => {\n this.callbacks = callbacks;\n };\n }\n componentDidMount() {\n this.unbind = bindEvents(window, [{\n eventName: 'error',\n fn: this.onWindowError\n }]);\n }\n componentDidCatch(err) {\n if (err instanceof RbdInvariant) {\n if (process.env.NODE_ENV !== 'production') {\n error(err.message);\n }\n this.setState({});\n return;\n }\n throw err;\n }\n componentWillUnmount() {\n this.unbind();\n }\n render() {\n return this.props.children(this.setCallbacks);\n }\n}\n\nconst dragHandleUsageInstructions = `\n Press space bar to start a drag.\n When dragging you can use the arrow keys to move the item around and escape to cancel.\n Some screen readers may require you to be in focus mode or to use your pass through key\n`;\nconst position = index => index + 1;\nconst onDragStart = start => `\n You have lifted an item in position ${position(start.source.index)}\n`;\nconst withLocation = (source, destination) => {\n const isInHomeList = source.droppableId === destination.droppableId;\n const startPosition = position(source.index);\n const endPosition = position(destination.index);\n if (isInHomeList) {\n return `\n You have moved the item from position ${startPosition}\n to position ${endPosition}\n `;\n }\n return `\n You have moved the item from position ${startPosition}\n in list ${source.droppableId}\n to list ${destination.droppableId}\n in position ${endPosition}\n `;\n};\nconst withCombine = (id, source, combine) => {\n const inHomeList = source.droppableId === combine.droppableId;\n if (inHomeList) {\n return `\n The item ${id}\n has been combined with ${combine.draggableId}`;\n }\n return `\n The item ${id}\n in list ${source.droppableId}\n has been combined with ${combine.draggableId}\n in list ${combine.droppableId}\n `;\n};\nconst onDragUpdate = update => {\n const location = update.destination;\n if (location) {\n return withLocation(update.source, location);\n }\n const combine = update.combine;\n if (combine) {\n return withCombine(update.draggableId, update.source, combine);\n }\n return 'You are over an area that cannot be dropped on';\n};\nconst returnedToStart = source => `\n The item has returned to its starting position\n of ${position(source.index)}\n`;\nconst onDragEnd = result => {\n if (result.reason === 'CANCEL') {\n return `\n Movement cancelled.\n ${returnedToStart(result.source)}\n `;\n }\n const location = result.destination;\n const combine = result.combine;\n if (location) {\n return `\n You have dropped the item.\n ${withLocation(result.source, location)}\n `;\n }\n if (combine) {\n return `\n You have dropped the item.\n ${withCombine(result.draggableId, result.source, combine)}\n `;\n }\n return `\n The item has been dropped while not over a drop area.\n ${returnedToStart(result.source)}\n `;\n};\nconst preset = {\n dragHandleUsageInstructions,\n onDragStart,\n onDragUpdate,\n onDragEnd\n};\n\nfunction isEqual$2(first, second) {\n if (first === second) {\n return true;\n }\n if (Number.isNaN(first) && Number.isNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (let i = 0; i < newInputs.length; i++) {\n if (!isEqual$2(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction useMemo(getResult, inputs) {\n const initial = useState(() => ({\n inputs,\n result: getResult()\n }))[0];\n const isFirstRun = useRef(true);\n const committed = useRef(initial);\n const useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n const cache = useCache ? committed.current : {\n inputs,\n result: getResult()\n };\n useEffect(() => {\n isFirstRun.current = false;\n committed.current = cache;\n }, [cache]);\n return cache.result;\n}\nfunction useCallback(callback, inputs) {\n return useMemo(() => callback, inputs);\n}\n\nconst origin = {\n x: 0,\n y: 0\n};\nconst add = (point1, point2) => ({\n x: point1.x + point2.x,\n y: point1.y + point2.y\n});\nconst subtract = (point1, point2) => ({\n x: point1.x - point2.x,\n y: point1.y - point2.y\n});\nconst isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y;\nconst negate = point => ({\n x: point.x !== 0 ? -point.x : 0,\n y: point.y !== 0 ? -point.y : 0\n});\nconst patch = (line, value, otherValue = 0) => {\n if (line === 'x') {\n return {\n x: value,\n y: otherValue\n };\n }\n return {\n x: otherValue,\n y: value\n };\n};\nconst distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2);\nconst closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point)));\nconst apply = fn => point => ({\n x: fn(point.x),\n y: fn(point.y)\n});\n\nvar executeClip = (frame, subject) => {\n const result = getRect({\n top: Math.max(subject.top, frame.top),\n right: Math.min(subject.right, frame.right),\n bottom: Math.min(subject.bottom, frame.bottom),\n left: Math.max(subject.left, frame.left)\n });\n if (result.width <= 0 || result.height <= 0) {\n return null;\n }\n return result;\n};\n\nconst offsetByPosition = (spacing, point) => ({\n top: spacing.top + point.y,\n left: spacing.left + point.x,\n bottom: spacing.bottom + point.y,\n right: spacing.right + point.x\n});\nconst getCorners = spacing => [{\n x: spacing.left,\n y: spacing.top\n}, {\n x: spacing.right,\n y: spacing.top\n}, {\n x: spacing.left,\n y: spacing.bottom\n}, {\n x: spacing.right,\n y: spacing.bottom\n}];\nconst noSpacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n};\n\nconst scroll$1 = (target, frame) => {\n if (!frame) {\n return target;\n }\n return offsetByPosition(target, frame.scroll.diff.displacement);\n};\nconst increase = (target, axis, withPlaceholder) => {\n if (withPlaceholder && withPlaceholder.increasedBy) {\n return {\n ...target,\n [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line]\n };\n }\n return target;\n};\nconst clip = (target, frame) => {\n if (frame && frame.shouldClipSubject) {\n return executeClip(frame.pageMarginBox, target);\n }\n return getRect(target);\n};\nvar getSubject = ({\n page,\n withPlaceholder,\n axis,\n frame\n}) => {\n const scrolled = scroll$1(page.marginBox, frame);\n const increased = increase(scrolled, axis, withPlaceholder);\n const clipped = clip(increased, frame);\n return {\n page,\n withPlaceholder,\n active: clipped\n };\n};\n\nvar scrollDroppable = (droppable, newScroll) => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const scrollable = droppable.frame;\n const scrollDiff = subtract(newScroll, scrollable.scroll.initial);\n const scrollDisplacement = negate(scrollDiff);\n const frame = {\n ...scrollable,\n scroll: {\n initial: scrollable.scroll.initial,\n current: newScroll,\n diff: {\n value: scrollDiff,\n displacement: scrollDisplacement\n },\n max: scrollable.scroll.max\n }\n };\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: droppable.subject.withPlaceholder,\n axis: droppable.axis,\n frame\n });\n const result = {\n ...droppable,\n frame,\n subject\n };\n return result;\n};\n\nfunction memoizeOne(resultFn, isEqual = areInputsEqual) {\n let cache = null;\n function memoized(...newArgs) {\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n const lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult,\n lastArgs: newArgs,\n lastThis: this\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nconst toDroppableMap = memoizeOne(droppables => droppables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDraggableMap = memoizeOne(draggables => draggables.reduce((previous, current) => {\n previous[current.descriptor.id] = current;\n return previous;\n}, {}));\nconst toDroppableList = memoizeOne(droppables => Object.values(droppables));\nconst toDraggableList = memoizeOne(draggables => Object.values(draggables));\n\nvar getDraggablesInsideDroppable = memoizeOne((droppableId, draggables) => {\n const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId).sort((a, b) => a.descriptor.index - b.descriptor.index);\n return result;\n});\n\nfunction tryGetDestination(impact) {\n if (impact.at && impact.at.type === 'REORDER') {\n return impact.at.destination;\n }\n return null;\n}\nfunction tryGetCombine(impact) {\n if (impact.at && impact.at.type === 'COMBINE') {\n return impact.at.combine;\n }\n return null;\n}\n\nvar removeDraggableFromList = memoizeOne((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id));\n\nvar moveToNextCombine = ({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const location = tryGetDestination(previousImpact);\n if (!location) {\n return null;\n }\n function getImpact(target) {\n const at = {\n type: 'COMBINE',\n combine: {\n draggableId: target,\n droppableId: destination.descriptor.id\n }\n };\n return {\n ...previousImpact,\n at\n };\n }\n const all = previousImpact.displaced.all;\n const closestId = all.length ? all[0] : null;\n if (isMovingForward) {\n return closestId ? getImpact(closestId) : null;\n }\n const withoutDraggable = removeDraggableFromList(draggable, insideDestination);\n if (!closestId) {\n if (!withoutDraggable.length) {\n return null;\n }\n const last = withoutDraggable[withoutDraggable.length - 1];\n return getImpact(last.descriptor.id);\n }\n const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId);\n !(indexOfClosest !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find displaced item in set') : invariant() : void 0;\n const proposedIndex = indexOfClosest - 1;\n if (proposedIndex < 0) {\n return null;\n }\n const before = withoutDraggable[proposedIndex];\n return getImpact(before.descriptor.id);\n};\n\nvar isHomeOf = (draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id;\n\nconst noDisplacedBy = {\n point: origin,\n value: 0\n};\nconst emptyGroups = {\n invisible: {},\n visible: {},\n all: []\n};\nconst noImpact = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: null\n};\n\nvar isWithin = (lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound;\n\nvar isPartiallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n if (isContained) {\n return true;\n }\n const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom);\n const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right);\n const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally;\n if (isPartiallyContained) {\n return true;\n }\n const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom;\n const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right;\n const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally;\n if (isTargetBiggerThanFrame) {\n return true;\n }\n const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically;\n return isTargetBiggerOnOneAxis;\n };\n};\n\nvar isTotallyVisibleThroughFrame = frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n return isContained;\n };\n};\n\nconst vertical = {\n direction: 'vertical',\n line: 'y',\n crossAxisLine: 'x',\n start: 'top',\n end: 'bottom',\n size: 'height',\n crossAxisStart: 'left',\n crossAxisEnd: 'right',\n crossAxisSize: 'width'\n};\nconst horizontal = {\n direction: 'horizontal',\n line: 'x',\n crossAxisLine: 'y',\n start: 'left',\n end: 'right',\n size: 'width',\n crossAxisStart: 'top',\n crossAxisEnd: 'bottom',\n crossAxisSize: 'height'\n};\n\nvar isTotallyVisibleThroughFrameOnAxis = axis => frame => {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return subject => {\n if (axis === vertical) {\n return isWithinVertical(subject.top) && isWithinVertical(subject.bottom);\n }\n return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right);\n };\n};\n\nconst getDroppableDisplaced = (target, destination) => {\n const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin;\n return offsetByPosition(target, displacement);\n};\nconst isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => {\n if (!destination.subject.active) {\n return false;\n }\n return isVisibleThroughFrameFn(destination.subject.active)(target);\n};\nconst isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target);\nconst isVisible$1 = ({\n target: toBeDisplaced,\n destination,\n viewport,\n withDroppableDisplacement,\n isVisibleThroughFrameFn\n}) => {\n const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced;\n return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn);\n};\nconst isPartiallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame\n});\nconst isTotallyVisible = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrame\n});\nconst isTotallyVisibleOnAxis = args => isVisible$1({\n ...args,\n isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis)\n});\n\nconst getShouldAnimate = (id, last, forceShouldAnimate) => {\n if (typeof forceShouldAnimate === 'boolean') {\n return forceShouldAnimate;\n }\n if (!last) {\n return true;\n }\n const {\n invisible,\n visible\n } = last;\n if (invisible[id]) {\n return false;\n }\n const previous = visible[id];\n return previous ? previous.shouldAnimate : true;\n};\nfunction getTarget(draggable, displacedBy) {\n const marginBox = draggable.page.marginBox;\n const expandBy = {\n top: displacedBy.point.y,\n right: 0,\n bottom: 0,\n left: displacedBy.point.x\n };\n return getRect(expand(marginBox, expandBy));\n}\nfunction getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy,\n viewport,\n forceShouldAnimate,\n last\n}) {\n return afterDragging.reduce(function process(groups, draggable) {\n const target = getTarget(draggable, displacedBy);\n const id = draggable.descriptor.id;\n groups.all.push(id);\n const isVisible = isPartiallyVisible({\n target,\n destination,\n viewport,\n withDroppableDisplacement: true\n });\n if (!isVisible) {\n groups.invisible[draggable.descriptor.id] = true;\n return groups;\n }\n const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate);\n const displacement = {\n draggableId: id,\n shouldAnimate\n };\n groups.visible[id] = displacement;\n return groups;\n }, {\n all: [],\n visible: {},\n invisible: {}\n });\n}\n\nfunction getIndexOfLastItem(draggables, options) {\n if (!draggables.length) {\n return 0;\n }\n const indexOfLastItem = draggables[draggables.length - 1].descriptor.index;\n return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1;\n}\nfunction goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n}) {\n const newIndex = getIndexOfLastItem(insideDestination, {\n inHomeList\n });\n return {\n displaced: emptyGroups,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: newIndex\n }\n }\n };\n}\nfunction calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last,\n index,\n forceShouldAnimate\n}) {\n const inHomeList = isHomeOf(draggable, destination);\n if (index == null) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const match = insideDestination.find(item => item.descriptor.index === index);\n if (!match) {\n return goAtEnd({\n insideDestination,\n inHomeList,\n displacedBy,\n destination\n });\n }\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const sliceFrom = insideDestination.indexOf(match);\n const impacted = withoutDragging.slice(sliceFrom);\n const displaced = getDisplacementGroups({\n afterDragging: impacted,\n destination,\n displacedBy,\n last,\n viewport: viewport.frame,\n forceShouldAnimate\n });\n return {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index\n }\n }\n };\n}\n\nfunction didStartAfterCritical(draggableId, afterCritical) {\n return Boolean(afterCritical.effected[draggableId]);\n}\n\nvar fromCombine = ({\n isMovingForward,\n destination,\n draggables,\n combine,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const combineId = combine.draggableId;\n const combineWith = draggables[combineId];\n const combineWithIndex = combineWith.descriptor.index;\n const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical);\n if (didCombineWithStartAfterCritical) {\n if (isMovingForward) {\n return combineWithIndex;\n }\n return combineWithIndex - 1;\n }\n if (isMovingForward) {\n return combineWithIndex + 1;\n }\n return combineWithIndex;\n};\n\nvar fromReorder = ({\n isMovingForward,\n isInHomeList,\n insideDestination,\n location\n}) => {\n if (!insideDestination.length) {\n return null;\n }\n const currentIndex = location.index;\n const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1;\n const firstIndex = insideDestination[0].descriptor.index;\n const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index;\n const upperBound = isInHomeList ? lastIndex : lastIndex + 1;\n if (proposedIndex < firstIndex) {\n return null;\n }\n if (proposedIndex > upperBound) {\n return null;\n }\n return proposedIndex;\n};\n\nvar moveToNextIndex = ({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const wasAt = previousImpact.at;\n !wasAt ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot move in direction without previous impact location') : invariant() : void 0;\n if (wasAt.type === 'REORDER') {\n const newIndex = fromReorder({\n isMovingForward,\n isInHomeList,\n location: wasAt.destination,\n insideDestination\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n }\n const newIndex = fromCombine({\n isMovingForward,\n destination,\n displaced: previousImpact.displaced,\n draggables,\n combine: wasAt.combine,\n afterCritical\n });\n if (newIndex == null) {\n return null;\n }\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last: previousImpact.displaced,\n displacedBy: previousImpact.displacedBy,\n index: newIndex\n });\n};\n\nvar getCombinedItemDisplacement = ({\n displaced,\n afterCritical,\n combineWith,\n displacedBy\n}) => {\n const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]);\n if (didStartAfterCritical(combineWith, afterCritical)) {\n return isDisplaced ? origin : negate(displacedBy.point);\n }\n return isDisplaced ? displacedBy.point : origin;\n};\n\nvar whenCombining = ({\n afterCritical,\n impact,\n draggables\n}) => {\n const combine = tryGetCombine(impact);\n !combine ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const combineWith = combine.draggableId;\n const center = draggables[combineWith].page.borderBox.center;\n const displaceBy = getCombinedItemDisplacement({\n displaced: impact.displaced,\n afterCritical,\n combineWith,\n displacedBy: impact.displacedBy\n });\n return add(center, displaceBy);\n};\n\nconst distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2;\nconst distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2;\nconst getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2;\nconst goAfter = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goBefore = ({\n axis,\n moveRelativeTo,\n isMoving\n}) => patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving));\nconst goIntoStart = ({\n axis,\n moveInto,\n isMoving\n}) => patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving));\n\nvar whenReordering = ({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n}) => {\n const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const draggablePage = draggable.page;\n const axis = droppable.axis;\n if (!insideDestination.length) {\n return goIntoStart({\n axis,\n moveInto: droppable.page,\n isMoving: draggablePage\n });\n }\n const {\n displaced,\n displacedBy\n } = impact;\n const closestAfter = displaced.all[0];\n if (closestAfter) {\n const closest = draggables[closestAfter];\n if (didStartAfterCritical(closestAfter, afterCritical)) {\n return goBefore({\n axis,\n moveRelativeTo: closest.page,\n isMoving: draggablePage\n });\n }\n const withDisplacement = offset(closest.page, displacedBy.point);\n return goBefore({\n axis,\n moveRelativeTo: withDisplacement,\n isMoving: draggablePage\n });\n }\n const last = insideDestination[insideDestination.length - 1];\n if (last.descriptor.id === draggable.descriptor.id) {\n return draggablePage.borderBox.center;\n }\n if (didStartAfterCritical(last.descriptor.id, afterCritical)) {\n const page = offset(last.page, negate(afterCritical.displacedBy.point));\n return goAfter({\n axis,\n moveRelativeTo: page,\n isMoving: draggablePage\n });\n }\n return goAfter({\n axis,\n moveRelativeTo: last.page,\n isMoving: draggablePage\n });\n};\n\nvar withDroppableDisplacement = (droppable, point) => {\n const frame = droppable.frame;\n if (!frame) {\n return point;\n }\n return add(point, frame.scroll.diff.displacement);\n};\n\nconst getResultWithoutDroppableDisplacement = ({\n impact,\n draggable,\n droppable,\n draggables,\n afterCritical\n}) => {\n const original = draggable.page.borderBox.center;\n const at = impact.at;\n if (!droppable) {\n return original;\n }\n if (!at) {\n return original;\n }\n if (at.type === 'REORDER') {\n return whenReordering({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n }\n return whenCombining({\n impact,\n draggables,\n afterCritical\n });\n};\nvar getPageBorderBoxCenterFromImpact = args => {\n const withoutDisplacement = getResultWithoutDroppableDisplacement(args);\n const droppable = args.droppable;\n const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement;\n return withDisplacement;\n};\n\nvar scrollViewport = (viewport, newScroll) => {\n const diff = subtract(newScroll, viewport.scroll.initial);\n const displacement = negate(diff);\n const frame = getRect({\n top: newScroll.y,\n bottom: newScroll.y + viewport.frame.height,\n left: newScroll.x,\n right: newScroll.x + viewport.frame.width\n });\n const updated = {\n frame,\n scroll: {\n initial: viewport.scroll.initial,\n max: viewport.scroll.max,\n current: newScroll,\n diff: {\n value: diff,\n displacement\n }\n }\n };\n return updated;\n};\n\nfunction getDraggables$1(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nfunction tryGetVisible(id, groups) {\n for (let i = 0; i < groups.length; i++) {\n const displacement = groups[i].visible[id];\n if (displacement) {\n return displacement;\n }\n }\n return null;\n}\nvar speculativelyIncrease = ({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange\n}) => {\n const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange));\n const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination;\n const last = impact.displaced;\n const withViewportScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination,\n displacedBy: impact.displacedBy,\n viewport: scrolledViewport.frame,\n last,\n forceShouldAnimate: false\n });\n const withDroppableScroll = getDisplacementGroups({\n afterDragging: getDraggables$1(last.all, draggables),\n destination: scrolledDroppable,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n last,\n forceShouldAnimate: false\n });\n const invisible = {};\n const visible = {};\n const groups = [last, withViewportScroll, withDroppableScroll];\n last.all.forEach(id => {\n const displacement = tryGetVisible(id, groups);\n if (displacement) {\n visible[id] = displacement;\n return;\n }\n invisible[id] = true;\n });\n const newImpact = {\n ...impact,\n displaced: {\n all: last.all,\n invisible,\n visible\n }\n };\n return newImpact;\n};\n\nvar withViewportDisplacement = (viewport, point) => add(viewport.scroll.diff.displacement, point);\n\nvar getClientFromPageBorderBoxCenter = ({\n pageBorderBoxCenter,\n draggable,\n viewport\n}) => {\n const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter);\n const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center);\n return add(draggable.client.borderBox.center, offset);\n};\n\nvar isTotallyVisibleInNewLocation = ({\n draggable,\n destination,\n newPageBorderBoxCenter,\n viewport,\n withDroppableDisplacement,\n onlyOnMainAxis = false\n}) => {\n const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center);\n const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded);\n const args = {\n target: shifted,\n destination,\n withDroppableDisplacement,\n viewport\n };\n return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args);\n};\n\nvar moveToNextPlace = ({\n isMovingForward,\n draggable,\n destination,\n draggables,\n previousImpact,\n viewport,\n previousPageBorderBoxCenter,\n previousClientSelection,\n afterCritical\n}) => {\n if (!destination.isEnabled) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const isInHomeList = isHomeOf(draggable, destination);\n const impact = moveToNextCombine({\n isMovingForward,\n draggable,\n destination,\n insideDestination,\n previousImpact\n }) || moveToNextIndex({\n isMovingForward,\n isInHomeList,\n draggable,\n draggables,\n destination,\n insideDestination,\n previousImpact,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination,\n newPageBorderBoxCenter: pageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n if (isVisibleInNewLocation) {\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n }\n const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter);\n const cautious = speculativelyIncrease({\n impact,\n viewport,\n destination,\n draggables,\n maxScrollChange: distance\n });\n return {\n clientSelection: previousClientSelection,\n impact: cautious,\n scrollJumpRequest: distance\n };\n};\n\nconst getKnownActive = droppable => {\n const rect = droppable.subject.active;\n !rect ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get clipped area from droppable') : invariant() : void 0;\n return rect;\n};\nvar getBestCrossAxisDroppable = ({\n isMovingForward,\n pageBorderBoxCenter,\n source,\n droppables,\n viewport\n}) => {\n const active = source.subject.active;\n if (!active) {\n return null;\n }\n const axis = source.axis;\n const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]);\n const candidates = toDroppableList(droppables).filter(droppable => droppable !== source).filter(droppable => droppable.isEnabled).filter(droppable => Boolean(droppable.subject.active)).filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n if (isMovingForward) {\n return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd];\n }\n return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart];\n }).filter(droppable => {\n const activeOfTarget = getKnownActive(droppable);\n const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]);\n return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]);\n }).sort((a, b) => {\n const first = getKnownActive(a)[axis.crossAxisStart];\n const second = getKnownActive(b)[axis.crossAxisStart];\n if (isMovingForward) {\n return first - second;\n }\n return second - first;\n }).filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]);\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0];\n }\n const contains = candidates.filter(droppable => {\n const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]);\n return isWithinDroppable(pageBorderBoxCenter[axis.line]);\n });\n if (contains.length === 1) {\n return contains[0];\n }\n if (contains.length > 1) {\n return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0];\n }\n return candidates.sort((a, b) => {\n const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a)));\n const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b)));\n if (first !== second) {\n return first - second;\n }\n return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start];\n })[0];\n};\n\nconst getCurrentPageBorderBoxCenter = (draggable, afterCritical) => {\n const original = draggable.page.borderBox.center;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original;\n};\nconst getCurrentPageBorderBox = (draggable, afterCritical) => {\n const original = draggable.page.borderBox;\n return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original;\n};\n\nvar getClosestDraggable = ({\n pageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n}) => {\n const sorted = insideDestination.filter(draggable => isTotallyVisible({\n target: getCurrentPageBorderBox(draggable, afterCritical),\n destination,\n viewport: viewport.frame,\n withDroppableDisplacement: true\n })).sort((a, b) => {\n const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical)));\n const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical)));\n if (distanceToA < distanceToB) {\n return -1;\n }\n if (distanceToB < distanceToA) {\n return 1;\n }\n return a.descriptor.index - b.descriptor.index;\n });\n return sorted[0] || null;\n};\n\nvar getDisplacedBy = memoizeOne(function getDisplacedBy(axis, displaceBy) {\n const displacement = displaceBy[axis.line];\n return {\n value: displacement,\n point: patch(axis.line, displacement)\n };\n});\n\nconst getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => {\n const axis = droppable.axis;\n if (droppable.descriptor.mode === 'virtual') {\n return patch(axis.line, placeholderSize[axis.line]);\n }\n const availableSpace = droppable.subject.page.contentBox[axis.size];\n const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables);\n const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0);\n const requiredSpace = spaceUsed + placeholderSize[axis.line];\n const needsToGrowBy = requiredSpace - availableSpace;\n if (needsToGrowBy <= 0) {\n return null;\n }\n return patch(axis.line, needsToGrowBy);\n};\nconst withMaxScroll = (frame, max) => ({\n ...frame,\n scroll: {\n ...frame.scroll,\n max\n }\n});\nconst addPlaceholder = (droppable, draggable, draggables) => {\n const frame = droppable.frame;\n !!isHomeOf(draggable, droppable) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should not add placeholder space to home list') : invariant() : void 0;\n !!droppable.subject.withPlaceholder ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : invariant() : void 0;\n const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point;\n const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables);\n const added = {\n placeholderSize,\n increasedBy: requiredGrowth,\n oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null\n };\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: droppable.frame\n });\n return {\n ...droppable,\n subject\n };\n }\n const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max;\n const newFrame = withMaxScroll(frame, maxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n withPlaceholder: added,\n axis: droppable.axis,\n frame: newFrame\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\nconst removePlaceholder = droppable => {\n const added = droppable.subject.withPlaceholder;\n !added ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot remove placeholder form subject when there was none') : invariant() : void 0;\n const frame = droppable.frame;\n if (!frame) {\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: null,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject\n };\n }\n const oldMaxScroll = added.oldFrameMaxScroll;\n !oldMaxScroll ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : invariant() : void 0;\n const newFrame = withMaxScroll(frame, oldMaxScroll);\n const subject = getSubject({\n page: droppable.subject.page,\n axis: droppable.axis,\n frame: newFrame,\n withPlaceholder: null\n });\n return {\n ...droppable,\n subject,\n frame: newFrame\n };\n};\n\nvar moveToNewDroppable = ({\n previousPageBorderBoxCenter,\n moveRelativeTo,\n insideDestination,\n draggable,\n draggables,\n destination,\n viewport,\n afterCritical\n}) => {\n if (!moveRelativeTo) {\n if (insideDestination.length) {\n return null;\n }\n const proposed = {\n displaced: emptyGroups,\n displacedBy: noDisplacedBy,\n at: {\n type: 'REORDER',\n destination: {\n droppableId: destination.descriptor.id,\n index: 0\n }\n }\n };\n const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact: proposed,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables);\n const isVisibleInNewLocation = isTotallyVisibleInNewLocation({\n draggable,\n destination: withPlaceholder,\n newPageBorderBoxCenter: proposedPageBorderBoxCenter,\n viewport: viewport.frame,\n withDroppableDisplacement: false,\n onlyOnMainAxis: true\n });\n return isVisibleInNewLocation ? proposed : null;\n }\n const isGoingBeforeTarget = Boolean(previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]);\n const proposedIndex = (() => {\n const relativeTo = moveRelativeTo.descriptor.index;\n if (moveRelativeTo.descriptor.id === draggable.descriptor.id) {\n return relativeTo;\n }\n if (isGoingBeforeTarget) {\n return relativeTo;\n }\n return relativeTo + 1;\n })();\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n displacedBy,\n last: emptyGroups,\n index: proposedIndex\n });\n};\n\nvar moveCrossAxis = ({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport,\n afterCritical\n}) => {\n const destination = getBestCrossAxisDroppable({\n isMovingForward,\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n source: isOver,\n droppables,\n viewport\n });\n if (!destination) {\n return null;\n }\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const moveRelativeTo = getClosestDraggable({\n pageBorderBoxCenter: previousPageBorderBoxCenter,\n viewport,\n destination,\n insideDestination,\n afterCritical\n });\n const impact = moveToNewDroppable({\n previousPageBorderBoxCenter,\n destination,\n draggable,\n draggables,\n moveRelativeTo,\n insideDestination,\n viewport,\n afterCritical\n });\n if (!impact) {\n return null;\n }\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n droppable: destination,\n draggables,\n afterCritical\n });\n const clientSelection = getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n return {\n clientSelection,\n impact,\n scrollJumpRequest: null\n };\n};\n\nvar whatIsDraggedOver = impact => {\n const at = impact.at;\n if (!at) {\n return null;\n }\n if (at.type === 'REORDER') {\n return at.destination.droppableId;\n }\n return at.combine.droppableId;\n};\n\nconst getDroppableOver$1 = (impact, droppables) => {\n const id = whatIsDraggedOver(impact);\n return id ? droppables[id] : null;\n};\nvar moveInDirection = ({\n state,\n type\n}) => {\n const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables);\n const isMainAxisMovementAllowed = Boolean(isActuallyOver);\n const home = state.dimensions.droppables[state.critical.droppable.id];\n const isOver = isActuallyOver || home;\n const direction = isOver.axis.direction;\n const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT');\n if (isMovingOnMainAxis && !isMainAxisMovementAllowed) {\n return null;\n }\n const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT';\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const previousPageBorderBoxCenter = state.current.page.borderBoxCenter;\n const {\n draggables,\n droppables\n } = state.dimensions;\n return isMovingOnMainAxis ? moveToNextPlace({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n destination: isOver,\n draggables,\n viewport: state.viewport,\n previousClientSelection: state.current.client.selection,\n previousImpact: state.impact,\n afterCritical: state.afterCritical\n }) : moveCrossAxis({\n isMovingForward,\n previousPageBorderBoxCenter,\n draggable,\n isOver,\n draggables,\n droppables,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n};\n\nfunction isMovementAllowed(state) {\n return state.phase === 'DRAGGING' || state.phase === 'COLLECTING';\n}\n\nfunction isPositionInFrame(frame) {\n const isWithinVertical = isWithin(frame.top, frame.bottom);\n const isWithinHorizontal = isWithin(frame.left, frame.right);\n return function run(point) {\n return isWithinVertical(point.y) && isWithinHorizontal(point.x);\n };\n}\n\nfunction getHasOverlap(first, second) {\n return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;\n}\nfunction getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n}) {\n const startCenter = draggable.page.borderBox.center;\n const sorted = candidates.map(candidate => {\n const axis = candidate.axis;\n const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]);\n return {\n id: candidate.descriptor.id,\n distance: distance(startCenter, target)\n };\n }).sort((a, b) => b.distance - a.distance);\n return sorted[0] ? sorted[0].id : null;\n}\nfunction getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n}) {\n const candidates = toDroppableList(droppables).filter(item => {\n if (!item.isEnabled) {\n return false;\n }\n const active = item.subject.active;\n if (!active) {\n return false;\n }\n if (!getHasOverlap(pageBorderBox, active)) {\n return false;\n }\n if (isPositionInFrame(active)(pageBorderBox.center)) {\n return true;\n }\n const axis = item.axis;\n const childCenter = active.center[axis.crossAxisLine];\n const crossAxisStart = pageBorderBox[axis.crossAxisStart];\n const crossAxisEnd = pageBorderBox[axis.crossAxisEnd];\n const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]);\n const isStartContained = isContained(crossAxisStart);\n const isEndContained = isContained(crossAxisEnd);\n if (!isStartContained && !isEndContained) {\n return true;\n }\n if (isStartContained) {\n return crossAxisStart < childCenter;\n }\n return crossAxisEnd > childCenter;\n });\n if (!candidates.length) {\n return null;\n }\n if (candidates.length === 1) {\n return candidates[0].descriptor.id;\n }\n return getFurthestAway({\n pageBorderBox,\n draggable,\n candidates\n });\n}\n\nconst offsetRectByPosition = (rect, point) => getRect(offsetByPosition(rect, point));\n\nvar withDroppableScroll = (droppable, area) => {\n const frame = droppable.frame;\n if (!frame) {\n return area;\n }\n return offsetRectByPosition(area, frame.scroll.diff.value);\n};\n\nfunction getIsDisplaced({\n displaced,\n id\n}) {\n return Boolean(displaced.visible[id] || displaced.invisible[id]);\n}\n\nfunction atIndex({\n draggable,\n closest,\n inHomeList\n}) {\n if (!closest) {\n return null;\n }\n if (!inHomeList) {\n return closest.descriptor.index;\n }\n if (closest.descriptor.index > draggable.descriptor.index) {\n return closest.descriptor.index - 1;\n }\n return closest.descriptor.index;\n}\nvar getReorderImpact = ({\n pageBorderBoxWithDroppableScroll: targetRect,\n draggable,\n destination,\n insideDestination,\n last,\n viewport,\n afterCritical\n}) => {\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const closest = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childCenter = child.page.borderBox.center[axis.line];\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: last,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd <= childCenter;\n }\n return targetStart < childCenter - displacement;\n }\n if (isDisplaced) {\n return targetEnd <= childCenter + displacement;\n }\n return targetStart < childCenter;\n }) || null;\n const newIndex = atIndex({\n draggable,\n closest,\n inHomeList: isHomeOf(draggable, destination)\n });\n return calculateReorderImpact({\n draggable,\n insideDestination,\n destination,\n viewport,\n last,\n displacedBy,\n index: newIndex\n });\n};\n\nconst combineThresholdDivisor = 4;\nvar getCombineImpact = ({\n draggable,\n pageBorderBoxWithDroppableScroll: targetRect,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n}) => {\n if (!destination.isCombineEnabled) {\n return null;\n }\n const axis = destination.axis;\n const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy);\n const displacement = displacedBy.value;\n const targetStart = targetRect[axis.start];\n const targetEnd = targetRect[axis.end];\n const withoutDragging = removeDraggableFromList(draggable, insideDestination);\n const combineWith = withoutDragging.find(child => {\n const id = child.descriptor.id;\n const childRect = child.page.borderBox;\n const childSize = childRect[axis.size];\n const threshold = childSize / combineThresholdDivisor;\n const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical);\n const isDisplaced = getIsDisplaced({\n displaced: previousImpact.displaced,\n id\n });\n if (didStartAfterCritical$1) {\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold;\n }\n return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold;\n }\n if (isDisplaced) {\n return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold;\n }\n return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold;\n });\n if (!combineWith) {\n return null;\n }\n const impact = {\n displacedBy,\n displaced: previousImpact.displaced,\n at: {\n type: 'COMBINE',\n combine: {\n draggableId: combineWith.descriptor.id,\n droppableId: destination.descriptor.id\n }\n }\n };\n return impact;\n};\n\nvar getDragImpact = ({\n pageOffset,\n draggable,\n draggables,\n droppables,\n previousImpact,\n viewport,\n afterCritical\n}) => {\n const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset);\n const destinationId = getDroppableOver({\n pageBorderBox,\n draggable,\n droppables\n });\n if (!destinationId) {\n return noImpact;\n }\n const destination = droppables[destinationId];\n const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables);\n const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox);\n return getCombineImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n previousImpact,\n destination,\n insideDestination,\n afterCritical\n }) || getReorderImpact({\n pageBorderBoxWithDroppableScroll,\n draggable,\n destination,\n insideDestination,\n last: previousImpact.displaced,\n viewport,\n afterCritical\n });\n};\n\nvar patchDroppableMap = (droppables, updated) => ({\n ...droppables,\n [updated.descriptor.id]: updated\n});\n\nconst clearUnusedPlaceholder = ({\n previousImpact,\n impact,\n droppables\n}) => {\n const last = whatIsDraggedOver(previousImpact);\n const now = whatIsDraggedOver(impact);\n if (!last) {\n return droppables;\n }\n if (last === now) {\n return droppables;\n }\n const lastDroppable = droppables[last];\n if (!lastDroppable.subject.withPlaceholder) {\n return droppables;\n }\n const updated = removePlaceholder(lastDroppable);\n return patchDroppableMap(droppables, updated);\n};\nvar recomputePlaceholders = ({\n draggable,\n draggables,\n droppables,\n previousImpact,\n impact\n}) => {\n const cleaned = clearUnusedPlaceholder({\n previousImpact,\n impact,\n droppables\n });\n const isOver = whatIsDraggedOver(impact);\n if (!isOver) {\n return cleaned;\n }\n const droppable = droppables[isOver];\n if (isHomeOf(draggable, droppable)) {\n return cleaned;\n }\n if (droppable.subject.withPlaceholder) {\n return cleaned;\n }\n const patched = addPlaceholder(droppable, draggable, draggables);\n return patchDroppableMap(cleaned, patched);\n};\n\nvar update = ({\n state,\n clientSelection: forcedClientSelection,\n dimensions: forcedDimensions,\n viewport: forcedViewport,\n impact: forcedImpact,\n scrollJumpRequest\n}) => {\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const clientSelection = forcedClientSelection || state.current.client.selection;\n const offset = subtract(clientSelection, state.initial.client.selection);\n const client = {\n offset,\n selection: clientSelection,\n borderBoxCenter: add(state.initial.client.borderBoxCenter, offset)\n };\n const page = {\n selection: add(client.selection, viewport.scroll.current),\n borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current),\n offset: add(client.offset, viewport.scroll.diff.value)\n };\n const current = {\n client,\n page\n };\n if (state.phase === 'COLLECTING') {\n return {\n ...state,\n dimensions,\n viewport,\n current\n };\n }\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const newImpact = forcedImpact || getDragImpact({\n pageOffset: page.offset,\n draggable,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact: state.impact,\n viewport,\n afterCritical: state.afterCritical\n });\n const withUpdatedPlaceholders = recomputePlaceholders({\n draggable,\n impact: newImpact,\n previousImpact: state.impact,\n draggables: dimensions.draggables,\n droppables: dimensions.droppables\n });\n const result = {\n ...state,\n current,\n dimensions: {\n draggables: dimensions.draggables,\n droppables: withUpdatedPlaceholders\n },\n impact: newImpact,\n viewport,\n scrollJumpRequest: scrollJumpRequest || null,\n forceShouldAnimate: scrollJumpRequest ? false : null\n };\n return result;\n};\n\nfunction getDraggables(ids, draggables) {\n return ids.map(id => draggables[id]);\n}\nvar recompute = ({\n impact,\n viewport,\n draggables,\n destination,\n forceShouldAnimate\n}) => {\n const last = impact.displaced;\n const afterDragging = getDraggables(last.all, draggables);\n const displaced = getDisplacementGroups({\n afterDragging,\n destination,\n displacedBy: impact.displacedBy,\n viewport: viewport.frame,\n forceShouldAnimate,\n last\n });\n return {\n ...impact,\n displaced\n };\n};\n\nvar getClientBorderBoxCenter = ({\n impact,\n draggable,\n droppable,\n draggables,\n viewport,\n afterCritical\n}) => {\n const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({\n impact,\n draggable,\n draggables,\n droppable,\n afterCritical\n });\n return getClientFromPageBorderBoxCenter({\n pageBorderBoxCenter,\n draggable,\n viewport\n });\n};\n\nvar refreshSnap = ({\n state,\n dimensions: forcedDimensions,\n viewport: forcedViewport\n}) => {\n !(state.movementMode === 'SNAP') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const needsVisibilityCheck = state.impact;\n const viewport = forcedViewport || state.viewport;\n const dimensions = forcedDimensions || state.dimensions;\n const {\n draggables,\n droppables\n } = dimensions;\n const draggable = draggables[state.critical.draggable.id];\n const isOver = whatIsDraggedOver(needsVisibilityCheck);\n !isOver ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must be over a destination in SNAP movement mode') : invariant() : void 0;\n const destination = droppables[isOver];\n const impact = recompute({\n impact: needsVisibilityCheck,\n viewport,\n destination,\n draggables\n });\n const clientSelection = getClientBorderBoxCenter({\n impact,\n draggable,\n droppable: destination,\n draggables,\n viewport,\n afterCritical: state.afterCritical\n });\n return update({\n impact,\n clientSelection,\n state,\n dimensions,\n viewport\n });\n};\n\nvar getHomeLocation = descriptor => ({\n index: descriptor.index,\n droppableId: descriptor.droppableId\n});\n\nvar getLiftEffect = ({\n draggable,\n home,\n draggables,\n viewport\n}) => {\n const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy);\n const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables);\n const rawIndex = insideHome.indexOf(draggable);\n !(rawIndex !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected draggable to be inside home list') : invariant() : void 0;\n const afterDragging = insideHome.slice(rawIndex + 1);\n const effected = afterDragging.reduce((previous, item) => {\n previous[item.descriptor.id] = true;\n return previous;\n }, {});\n const afterCritical = {\n inVirtualList: home.descriptor.mode === 'virtual',\n displacedBy,\n effected\n };\n const displaced = getDisplacementGroups({\n afterDragging,\n destination: home,\n displacedBy,\n last: null,\n viewport: viewport.frame,\n forceShouldAnimate: false\n });\n const impact = {\n displaced,\n displacedBy,\n at: {\n type: 'REORDER',\n destination: getHomeLocation(draggable.descriptor)\n }\n };\n return {\n impact,\n afterCritical\n };\n};\n\nvar patchDimensionMap = (dimensions, updated) => ({\n draggables: dimensions.draggables,\n droppables: patchDroppableMap(dimensions.droppables, updated)\n});\n\nconst start = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\nconst finish = key => {\n if (process.env.NODE_ENV !== 'production') {\n {\n return;\n }\n }\n};\n\nvar offsetDraggable = ({\n draggable,\n offset: offset$1,\n initialWindowScroll\n}) => {\n const client = offset(draggable.client, offset$1);\n const page = withScroll(client, initialWindowScroll);\n const moved = {\n ...draggable,\n placeholder: {\n ...draggable.placeholder,\n client\n },\n client,\n page\n };\n return moved;\n};\n\nvar getFrame = droppable => {\n const frame = droppable.frame;\n !frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected Droppable to have a frame') : invariant() : void 0;\n return frame;\n};\n\nvar adjustAdditionsForScrollChanges = ({\n additions,\n updatedDroppables,\n viewport\n}) => {\n const windowScrollChange = viewport.scroll.diff.value;\n return additions.map(draggable => {\n const droppableId = draggable.descriptor.droppableId;\n const modified = updatedDroppables[droppableId];\n const frame = getFrame(modified);\n const droppableScrollChange = frame.scroll.diff.value;\n const totalChange = add(windowScrollChange, droppableScrollChange);\n const moved = offsetDraggable({\n draggable,\n offset: totalChange,\n initialWindowScroll: viewport.scroll.initial\n });\n return moved;\n });\n};\n\nvar publishWhileDraggingInVirtual = ({\n state,\n published\n}) => {\n start();\n const withScrollChange = published.modified.map(update => {\n const existing = state.dimensions.droppables[update.droppableId];\n const scrolled = scrollDroppable(existing, update.scroll);\n return scrolled;\n });\n const droppables = {\n ...state.dimensions.droppables,\n ...toDroppableMap(withScrollChange)\n };\n const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({\n additions: published.additions,\n updatedDroppables: droppables,\n viewport: state.viewport\n }));\n const draggables = {\n ...state.dimensions.draggables,\n ...updatedAdditions\n };\n published.removals.forEach(id => {\n delete draggables[id];\n });\n const dimensions = {\n droppables,\n draggables\n };\n const wasOverId = whatIsDraggedOver(state.impact);\n const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const home = dimensions.droppables[state.critical.droppable.id];\n const {\n impact: onLiftImpact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables,\n viewport: state.viewport\n });\n const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact;\n const impact = getDragImpact({\n pageOffset: state.current.page.offset,\n draggable: dimensions.draggables[state.critical.draggable.id],\n draggables: dimensions.draggables,\n droppables: dimensions.droppables,\n previousImpact,\n viewport: state.viewport,\n afterCritical\n });\n finish();\n const draggingState = {\n ...state,\n phase: 'DRAGGING',\n impact,\n onLiftImpact,\n dimensions,\n afterCritical,\n forceShouldAnimate: false\n };\n if (state.phase === 'COLLECTING') {\n return draggingState;\n }\n const dropPending = {\n ...draggingState,\n phase: 'DROP_PENDING',\n reason: state.reason,\n isWaiting: false\n };\n return dropPending;\n};\n\nconst isSnapping = state => state.movementMode === 'SNAP';\nconst postDroppableChange = (state, updated, isEnabledChanging) => {\n const dimensions = patchDimensionMap(state.dimensions, updated);\n if (!isSnapping(state) || isEnabledChanging) {\n return update({\n state,\n dimensions\n });\n }\n return refreshSnap({\n state,\n dimensions\n });\n};\nfunction removeScrollJumpRequest(state) {\n if (state.isDragging && state.movementMode === 'SNAP') {\n return {\n ...state,\n scrollJumpRequest: null\n };\n }\n return state;\n}\nconst idle$2 = {\n phase: 'IDLE',\n completed: null,\n shouldFlush: false\n};\nvar reducer = (state = idle$2, action) => {\n if (action.type === 'FLUSH') {\n return {\n ...idle$2,\n shouldFlush: true\n };\n }\n if (action.type === 'INITIAL_PUBLISH') {\n !(state.phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : invariant() : void 0;\n const {\n critical,\n clientSelection,\n viewport,\n dimensions,\n movementMode\n } = action.payload;\n const draggable = dimensions.draggables[critical.draggable.id];\n const home = dimensions.droppables[critical.droppable.id];\n const client = {\n selection: clientSelection,\n borderBoxCenter: draggable.client.borderBox.center,\n offset: origin\n };\n const initial = {\n client,\n page: {\n selection: add(client.selection, viewport.scroll.initial),\n borderBoxCenter: add(client.selection, viewport.scroll.initial),\n offset: add(client.selection, viewport.scroll.diff.value)\n }\n };\n const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage);\n const {\n impact,\n afterCritical\n } = getLiftEffect({\n draggable,\n home,\n draggables: dimensions.draggables,\n viewport\n });\n const result = {\n phase: 'DRAGGING',\n isDragging: true,\n critical,\n movementMode,\n dimensions,\n initial,\n current: initial,\n isWindowScrollAllowed,\n impact,\n afterCritical,\n onLiftImpact: impact,\n viewport,\n scrollJumpRequest: null,\n forceShouldAnimate: null\n };\n return result;\n }\n if (action.type === 'COLLECTION_STARTING') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Collection cannot start from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n ...state,\n phase: 'COLLECTING'\n };\n return result;\n }\n if (action.type === 'PUBLISH_WHILE_DRAGGING') {\n !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : invariant() : void 0;\n return publishWhileDraggingInVirtual({\n state,\n published: action.payload\n });\n }\n if (action.type === 'MOVE') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n client: clientSelection\n } = action.payload;\n if (isEqual$1(clientSelection, state.current.client.selection)) {\n return state;\n }\n return update({\n state,\n clientSelection,\n impact: isSnapping(state) ? state.impact : null\n });\n }\n if (action.type === 'UPDATE_DROPPABLE_SCROLL') {\n if (state.phase === 'DROP_PENDING') {\n return removeScrollJumpRequest(state);\n }\n if (state.phase === 'COLLECTING') {\n return removeScrollJumpRequest(state);\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n newScroll\n } = action.payload;\n const target = state.dimensions.droppables[id];\n if (!target) {\n return state;\n }\n const scrolled = scrollDroppable(target, newScroll);\n return postDroppableChange(state, scrolled, false);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : invariant() : void 0;\n !(target.isEnabled !== isEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)}\n but it is already ${String(target.isEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') {\n if (state.phase === 'DROP_PENDING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : invariant() : void 0;\n const {\n id,\n isCombineEnabled\n } = action.payload;\n const target = state.dimensions.droppables[id];\n !target ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : invariant() : void 0;\n !(target.isCombineEnabled !== isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)}\n but it is already ${String(target.isCombineEnabled)}`) : invariant() : void 0;\n const updated = {\n ...target,\n isCombineEnabled\n };\n return postDroppableChange(state, updated, true);\n }\n if (action.type === 'MOVE_BY_WINDOW_SCROLL') {\n if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') {\n return state;\n }\n !isMovementAllowed(state) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot move by window in phase ${state.phase}`) : invariant() : void 0;\n !state.isWindowScrollAllowed ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : invariant() : void 0;\n const newScroll = action.payload.newScroll;\n if (isEqual$1(state.viewport.scroll.current, newScroll)) {\n return removeScrollJumpRequest(state);\n }\n const viewport = scrollViewport(state.viewport, newScroll);\n if (isSnapping(state)) {\n return refreshSnap({\n state,\n viewport\n });\n }\n return update({\n state,\n viewport\n });\n }\n if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') {\n if (!isMovementAllowed(state)) {\n return state;\n }\n const maxScroll = action.payload.maxScroll;\n if (isEqual$1(maxScroll, state.viewport.scroll.max)) {\n return state;\n }\n const withMaxScroll = {\n ...state.viewport,\n scroll: {\n ...state.viewport.scroll,\n max: maxScroll\n }\n };\n return {\n ...state,\n viewport: withMaxScroll\n };\n }\n if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') {\n if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') {\n return state;\n }\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${action.type} received while not in DRAGGING phase`) : invariant() : void 0;\n const result = moveInDirection({\n state,\n type: action.type\n });\n if (!result) {\n return state;\n }\n return update({\n state,\n impact: result.impact,\n clientSelection: result.clientSelection,\n scrollJumpRequest: result.scrollJumpRequest\n });\n }\n if (action.type === 'DROP_PENDING') {\n const reason = action.payload.reason;\n !(state.phase === 'COLLECTING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : invariant() : void 0;\n const newState = {\n ...state,\n phase: 'DROP_PENDING',\n isWaiting: true,\n reason\n };\n return newState;\n }\n if (action.type === 'DROP_ANIMATE') {\n const {\n completed,\n dropDuration,\n newHomeClientOffset\n } = action.payload;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : invariant() : void 0;\n const result = {\n phase: 'DROP_ANIMATING',\n completed,\n dropDuration,\n newHomeClientOffset,\n dimensions: state.dimensions\n };\n return result;\n }\n if (action.type === 'DROP_COMPLETE') {\n const {\n completed\n } = action.payload;\n return {\n phase: 'IDLE',\n completed,\n shouldFlush: false\n };\n }\n return state;\n};\n\nfunction guard(action, predicate) {\n return action instanceof Object && 'type' in action && action.type === predicate;\n}\nconst beforeInitialCapture = args => ({\n type: 'BEFORE_INITIAL_CAPTURE',\n payload: args\n});\nconst lift$1 = args => ({\n type: 'LIFT',\n payload: args\n});\nconst initialPublish = args => ({\n type: 'INITIAL_PUBLISH',\n payload: args\n});\nconst publishWhileDragging = args => ({\n type: 'PUBLISH_WHILE_DRAGGING',\n payload: args\n});\nconst collectionStarting = () => ({\n type: 'COLLECTION_STARTING',\n payload: null\n});\nconst updateDroppableScroll = args => ({\n type: 'UPDATE_DROPPABLE_SCROLL',\n payload: args\n});\nconst updateDroppableIsEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_ENABLED',\n payload: args\n});\nconst updateDroppableIsCombineEnabled = args => ({\n type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED',\n payload: args\n});\nconst move = args => ({\n type: 'MOVE',\n payload: args\n});\nconst moveByWindowScroll = args => ({\n type: 'MOVE_BY_WINDOW_SCROLL',\n payload: args\n});\nconst updateViewportMaxScroll = args => ({\n type: 'UPDATE_VIEWPORT_MAX_SCROLL',\n payload: args\n});\nconst moveUp = () => ({\n type: 'MOVE_UP',\n payload: null\n});\nconst moveDown = () => ({\n type: 'MOVE_DOWN',\n payload: null\n});\nconst moveRight = () => ({\n type: 'MOVE_RIGHT',\n payload: null\n});\nconst moveLeft = () => ({\n type: 'MOVE_LEFT',\n payload: null\n});\nconst flush = () => ({\n type: 'FLUSH',\n payload: null\n});\nconst animateDrop = args => ({\n type: 'DROP_ANIMATE',\n payload: args\n});\nconst completeDrop = args => ({\n type: 'DROP_COMPLETE',\n payload: args\n});\nconst drop = args => ({\n type: 'DROP',\n payload: args\n});\nconst dropPending = args => ({\n type: 'DROP_PENDING',\n payload: args\n});\nconst dropAnimationFinished = () => ({\n type: 'DROP_ANIMATION_FINISHED',\n payload: null\n});\n\nfunction checkIndexes(insideDestination) {\n if (insideDestination.length <= 1) {\n return;\n }\n const indexes = insideDestination.map(d => d.descriptor.index);\n const errors = {};\n for (let i = 1; i < indexes.length; i++) {\n const current = indexes[i];\n const previous = indexes[i - 1];\n if (current !== previous + 1) {\n errors[current] = true;\n }\n }\n if (!Object.keys(errors).length) {\n return;\n }\n const formatted = indexes.map(index => {\n const hasError = Boolean(errors[index]);\n return hasError ? `[🔥${index}]` : `${index}`;\n }).join(', ');\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected non-consecutive <Draggable /> indexes.\n\n (This can cause unexpected bugs)\n\n ${formatted}\n `) : void 0;\n}\nfunction validateDimensions(critical, dimensions) {\n if (process.env.NODE_ENV !== 'production') {\n const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables);\n checkIndexes(insideDestination);\n }\n}\n\nvar lift = marshal => ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'LIFT')) {\n next(action);\n return;\n }\n const {\n id,\n clientSelection,\n movementMode\n } = action.payload;\n const initial = getState();\n if (initial.phase === 'DROP_ANIMATING') {\n dispatch(completeDrop({\n completed: initial.completed\n }));\n }\n !(getState().phase === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase to start a drag') : invariant() : void 0;\n dispatch(flush());\n dispatch(beforeInitialCapture({\n draggableId: id,\n movementMode\n }));\n const scrollOptions = {\n shouldPublishImmediately: movementMode === 'SNAP'\n };\n const request = {\n draggableId: id,\n scrollOptions\n };\n const {\n critical,\n dimensions,\n viewport\n } = marshal.startPublishing(request);\n validateDimensions(critical, dimensions);\n dispatch(initialPublish({\n critical,\n dimensions,\n clientSelection,\n movementMode,\n viewport\n }));\n};\n\nvar style = marshal => () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n marshal.dragging();\n }\n if (guard(action, 'DROP_ANIMATE')) {\n marshal.dropping(action.payload.completed.result.reason);\n }\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE')) {\n marshal.resting();\n }\n next(action);\n};\n\nconst curves = {\n outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)',\n drop: 'cubic-bezier(.2,1,.1,1)'\n};\nconst combine = {\n opacity: {\n drop: 0,\n combining: 0.7\n },\n scale: {\n drop: 0.75\n }\n};\nconst timings = {\n outOfTheWay: 0.2,\n minDropTime: 0.33,\n maxDropTime: 0.55\n};\nconst outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`;\nconst transitions = {\n fluid: `opacity ${outOfTheWayTiming}`,\n snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`,\n drop: duration => {\n const timing = `${duration}s ${curves.drop}`;\n return `transform ${timing}, opacity ${timing}`;\n },\n outOfTheWay: `transform ${outOfTheWayTiming}`,\n placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}`\n};\nconst moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`;\nconst transforms = {\n moveTo,\n drop: (offset, isCombining) => {\n const translate = moveTo(offset);\n if (!translate) {\n return undefined;\n }\n if (!isCombining) {\n return translate;\n }\n return `${translate} scale(${combine.scale.drop})`;\n }\n};\n\nconst {\n minDropTime,\n maxDropTime\n} = timings;\nconst dropTimeRange = maxDropTime - minDropTime;\nconst maxDropTimeAtDistance = 1500;\nconst cancelDropModifier = 0.6;\nvar getDropDuration = ({\n current,\n destination,\n reason\n}) => {\n const distance$1 = distance(current, destination);\n if (distance$1 <= 0) {\n return minDropTime;\n }\n if (distance$1 >= maxDropTimeAtDistance) {\n return maxDropTime;\n }\n const percentage = distance$1 / maxDropTimeAtDistance;\n const duration = minDropTime + dropTimeRange * percentage;\n const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration;\n return Number(withDuration.toFixed(2));\n};\n\nvar getNewHomeClientOffset = ({\n impact,\n draggable,\n dimensions,\n viewport,\n afterCritical\n}) => {\n const {\n draggables,\n droppables\n } = dimensions;\n const droppableId = whatIsDraggedOver(impact);\n const destination = droppableId ? droppables[droppableId] : null;\n const home = droppables[draggable.descriptor.droppableId];\n const newClientCenter = getClientBorderBoxCenter({\n impact,\n draggable,\n draggables,\n afterCritical,\n droppable: destination || home,\n viewport\n });\n const offset = subtract(newClientCenter, draggable.client.borderBox.center);\n return offset;\n};\n\nvar getDropImpact = ({\n draggables,\n reason,\n lastImpact,\n home,\n viewport,\n onLiftImpact\n}) => {\n if (!lastImpact.at || reason !== 'DROP') {\n const recomputedHomeImpact = recompute({\n draggables,\n impact: onLiftImpact,\n destination: home,\n viewport,\n forceShouldAnimate: true\n });\n return {\n impact: recomputedHomeImpact,\n didDropInsideDroppable: false\n };\n }\n if (lastImpact.at.type === 'REORDER') {\n return {\n impact: lastImpact,\n didDropInsideDroppable: true\n };\n }\n const withoutMovement = {\n ...lastImpact,\n displaced: emptyGroups\n };\n return {\n impact: withoutMovement,\n didDropInsideDroppable: true\n };\n};\n\nconst dropMiddleware = ({\n getState,\n dispatch\n}) => next => action => {\n if (!guard(action, 'DROP')) {\n next(action);\n return;\n }\n const state = getState();\n const reason = action.payload.reason;\n if (state.phase === 'COLLECTING') {\n dispatch(dropPending({\n reason\n }));\n return;\n }\n if (state.phase === 'IDLE') {\n return;\n }\n const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting;\n !!isWaitingForDrop ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : invariant() : void 0;\n !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot drop in phase: ${state.phase}`) : invariant() : void 0;\n const critical = state.critical;\n const dimensions = state.dimensions;\n const draggable = dimensions.draggables[state.critical.draggable.id];\n const {\n impact,\n didDropInsideDroppable\n } = getDropImpact({\n reason,\n lastImpact: state.impact,\n afterCritical: state.afterCritical,\n onLiftImpact: state.onLiftImpact,\n home: state.dimensions.droppables[state.critical.droppable.id],\n viewport: state.viewport,\n draggables: state.dimensions.draggables\n });\n const destination = didDropInsideDroppable ? tryGetDestination(impact) : null;\n const combine = didDropInsideDroppable ? tryGetCombine(impact) : null;\n const source = {\n index: critical.draggable.index,\n droppableId: critical.droppable.id\n };\n const result = {\n draggableId: draggable.descriptor.id,\n type: draggable.descriptor.type,\n source,\n reason,\n mode: state.movementMode,\n destination,\n combine\n };\n const newHomeClientOffset = getNewHomeClientOffset({\n impact,\n draggable,\n dimensions,\n viewport: state.viewport,\n afterCritical: state.afterCritical\n });\n const completed = {\n critical: state.critical,\n afterCritical: state.afterCritical,\n result,\n impact\n };\n const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine);\n if (!isAnimationRequired) {\n dispatch(completeDrop({\n completed\n }));\n return;\n }\n const dropDuration = getDropDuration({\n current: state.current.client.offset,\n destination: newHomeClientOffset,\n reason\n });\n const args = {\n newHomeClientOffset,\n dropDuration,\n completed\n };\n dispatch(animateDrop(args));\n};\n\nvar getWindowScroll = () => ({\n x: window.pageXOffset,\n y: window.pageYOffset\n});\n\nfunction getWindowScrollBinding(update) {\n return {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: event => {\n if (event.target !== window && event.target !== window.document) {\n return;\n }\n update();\n }\n };\n}\nfunction getScrollListener({\n onWindowScroll\n}) {\n function updateScroll() {\n onWindowScroll(getWindowScroll());\n }\n const scheduled = rafSchd(updateScroll);\n const binding = getWindowScrollBinding(scheduled);\n let unbind = noop$2;\n function isActive() {\n return unbind !== noop$2;\n }\n function start() {\n !!isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start scroll listener when already active') : invariant() : void 0;\n unbind = bindEvents(window, [binding]);\n }\n function stop() {\n !isActive() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop scroll listener when not active') : invariant() : void 0;\n scheduled.cancel();\n unbind();\n unbind = noop$2;\n }\n return {\n start,\n stop,\n isActive\n };\n}\n\nconst shouldStop$1 = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nconst scrollListener = store => {\n const listener = getScrollListener({\n onWindowScroll: newScroll => {\n store.dispatch(moveByWindowScroll({\n newScroll\n }));\n }\n });\n return next => action => {\n if (!listener.isActive() && guard(action, 'INITIAL_PUBLISH')) {\n listener.start();\n }\n if (listener.isActive() && shouldStop$1(action)) {\n listener.stop();\n }\n next(action);\n };\n};\n\nvar getExpiringAnnounce = announce => {\n let wasCalled = false;\n let isExpired = false;\n const timeoutId = setTimeout(() => {\n isExpired = true;\n });\n const result = message => {\n if (wasCalled) {\n process.env.NODE_ENV !== \"production\" ? warning('Announcement already made. Not making a second announcement') : void 0;\n return;\n }\n if (isExpired) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Announcements cannot be made asynchronously.\n Default message has already been announced.\n `) : void 0;\n return;\n }\n wasCalled = true;\n announce(message);\n clearTimeout(timeoutId);\n };\n result.wasCalled = () => wasCalled;\n return result;\n};\n\nvar getAsyncMarshal = () => {\n const entries = [];\n const execute = timerId => {\n const index = entries.findIndex(item => item.timerId === timerId);\n !(index !== -1) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find timer') : invariant() : void 0;\n const [entry] = entries.splice(index, 1);\n entry.callback();\n };\n const add = fn => {\n const timerId = setTimeout(() => execute(timerId));\n const entry = {\n timerId,\n callback: fn\n };\n entries.push(entry);\n };\n const flush = () => {\n if (!entries.length) {\n return;\n }\n const shallow = [...entries];\n entries.length = 0;\n shallow.forEach(entry => {\n clearTimeout(entry.timerId);\n entry.callback();\n });\n };\n return {\n add,\n flush\n };\n};\n\nconst areLocationsEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.droppableId === second.droppableId && first.index === second.index;\n};\nconst isCombineEqual = (first, second) => {\n if (first == null && second == null) {\n return true;\n }\n if (first == null || second == null) {\n return false;\n }\n return first.draggableId === second.draggableId && first.droppableId === second.droppableId;\n};\nconst isCriticalEqual = (first, second) => {\n if (first === second) {\n return true;\n }\n const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index;\n const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type;\n return isDraggableEqual && isDroppableEqual;\n};\n\nconst withTimings = (key, fn) => {\n start();\n fn();\n finish();\n};\nconst getDragStart = (critical, mode) => ({\n draggableId: critical.draggable.id,\n type: critical.droppable.type,\n source: {\n droppableId: critical.droppable.id,\n index: critical.draggable.index\n },\n mode\n});\nfunction execute(responder, data, announce, getDefaultMessage) {\n if (!responder) {\n announce(getDefaultMessage(data));\n return;\n }\n const willExpire = getExpiringAnnounce(announce);\n const provided = {\n announce: willExpire\n };\n responder(data, provided);\n if (!willExpire.wasCalled()) {\n announce(getDefaultMessage(data));\n }\n}\nvar getPublisher = (getResponders, announce) => {\n const asyncMarshal = getAsyncMarshal();\n let dragging = null;\n const beforeCapture = (draggableId, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeCapture', () => {\n const fn = getResponders().onBeforeCapture;\n if (fn) {\n const before = {\n draggableId,\n mode\n };\n fn(before);\n }\n });\n };\n const beforeStart = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n withTimings('onBeforeDragStart', () => {\n const fn = getResponders().onBeforeDragStart;\n if (fn) {\n fn(getDragStart(critical, mode));\n }\n });\n };\n const start = (critical, mode) => {\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : invariant() : void 0;\n const data = getDragStart(critical, mode);\n dragging = {\n mode,\n lastCritical: critical,\n lastLocation: data.source,\n lastCombine: null\n };\n asyncMarshal.add(() => {\n withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset.onDragStart));\n });\n };\n const update = (critical, impact) => {\n const location = tryGetDestination(impact);\n const combine = tryGetCombine(impact);\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : invariant() : void 0;\n const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical);\n if (hasCriticalChanged) {\n dragging.lastCritical = critical;\n }\n const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location);\n if (hasLocationChanged) {\n dragging.lastLocation = location;\n }\n const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine);\n if (hasGroupingChanged) {\n dragging.lastCombine = combine;\n }\n if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) {\n return;\n }\n const data = {\n ...getDragStart(critical, dragging.mode),\n combine,\n destination: location\n };\n asyncMarshal.add(() => {\n withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset.onDragUpdate));\n });\n };\n const flush = () => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only flush responders while dragging') : invariant() : void 0;\n asyncMarshal.flush();\n };\n const drop = result => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : invariant() : void 0;\n dragging = null;\n withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset.onDragEnd));\n };\n const abort = () => {\n if (!dragging) {\n return;\n }\n const result = {\n ...getDragStart(dragging.lastCritical, dragging.mode),\n combine: null,\n destination: null,\n reason: 'CANCEL'\n };\n drop(result);\n };\n return {\n beforeCapture,\n beforeStart,\n start,\n update,\n flush,\n drop,\n abort\n };\n};\n\nvar responders = (getResponders, announce) => {\n const publisher = getPublisher(getResponders, announce);\n return store => next => action => {\n if (guard(action, 'BEFORE_INITIAL_CAPTURE')) {\n publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n const critical = action.payload.critical;\n publisher.beforeStart(critical, action.payload.movementMode);\n next(action);\n publisher.start(critical, action.payload.movementMode);\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n const result = action.payload.completed.result;\n publisher.flush();\n next(action);\n publisher.drop(result);\n return;\n }\n next(action);\n if (guard(action, 'FLUSH')) {\n publisher.abort();\n return;\n }\n const state = store.getState();\n if (state.phase === 'DRAGGING') {\n publisher.update(state.critical, state.impact);\n }\n };\n};\n\nconst dropAnimationFinishMiddleware = store => next => action => {\n if (!guard(action, 'DROP_ANIMATION_FINISHED')) {\n next(action);\n return;\n }\n const state = store.getState();\n !(state.phase === 'DROP_ANIMATING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : invariant() : void 0;\n store.dispatch(completeDrop({\n completed: state.completed\n }));\n};\n\nconst dropAnimationFlushOnScrollMiddleware = store => {\n let unbind = null;\n let frameId = null;\n function clear() {\n if (frameId) {\n cancelAnimationFrame(frameId);\n frameId = null;\n }\n if (unbind) {\n unbind();\n unbind = null;\n }\n }\n return next => action => {\n if (guard(action, 'FLUSH') || guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATION_FINISHED')) {\n clear();\n }\n next(action);\n if (!guard(action, 'DROP_ANIMATE')) {\n return;\n }\n const binding = {\n eventName: 'scroll',\n options: {\n capture: true,\n passive: false,\n once: true\n },\n fn: function flushDropAnimation() {\n const state = store.getState();\n if (state.phase === 'DROP_ANIMATING') {\n store.dispatch(dropAnimationFinished());\n }\n }\n };\n frameId = requestAnimationFrame(() => {\n frameId = null;\n unbind = bindEvents(window, [binding]);\n });\n };\n};\n\nvar dimensionMarshalStopper = marshal => () => next => action => {\n if (guard(action, 'DROP_COMPLETE') || guard(action, 'FLUSH') || guard(action, 'DROP_ANIMATE')) {\n marshal.stopPublishing();\n }\n next(action);\n};\n\nvar focus = marshal => {\n let isWatching = false;\n return () => next => action => {\n if (guard(action, 'INITIAL_PUBLISH')) {\n isWatching = true;\n marshal.tryRecordFocus(action.payload.critical.draggable.id);\n next(action);\n marshal.tryRestoreFocusRecorded();\n return;\n }\n next(action);\n if (!isWatching) {\n return;\n }\n if (guard(action, 'FLUSH')) {\n isWatching = false;\n marshal.tryRestoreFocusRecorded();\n return;\n }\n if (guard(action, 'DROP_COMPLETE')) {\n isWatching = false;\n const result = action.payload.completed.result;\n if (result.combine) {\n marshal.tryShiftRecord(result.draggableId, result.combine.draggableId);\n }\n marshal.tryRestoreFocusRecorded();\n }\n };\n};\n\nconst shouldStop = action => guard(action, 'DROP_COMPLETE') || guard(action, 'DROP_ANIMATE') || guard(action, 'FLUSH');\nvar autoScroll = autoScroller => store => next => action => {\n if (shouldStop(action)) {\n autoScroller.stop();\n next(action);\n return;\n }\n if (guard(action, 'INITIAL_PUBLISH')) {\n next(action);\n const state = store.getState();\n !(state.phase === 'DRAGGING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : invariant() : void 0;\n autoScroller.start(state);\n return;\n }\n next(action);\n autoScroller.scroll(store.getState());\n};\n\nconst pendingDrop = store => next => action => {\n next(action);\n if (!guard(action, 'PUBLISH_WHILE_DRAGGING')) {\n return;\n }\n const postActionState = store.getState();\n if (postActionState.phase !== 'DROP_PENDING') {\n return;\n }\n if (postActionState.isWaiting) {\n return;\n }\n store.dispatch(drop({\n reason: postActionState.reason\n }));\n};\n\nconst composeEnhancers = process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n name: '@hello-pangea/dnd'\n}) : compose;\nvar createStore = ({\n dimensionMarshal,\n focusMarshal,\n styleMarshal,\n getResponders,\n announce,\n autoScroller\n}) => createStore$1(reducer, composeEnhancers(applyMiddleware(style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), dropMiddleware, dropAnimationFinishMiddleware, dropAnimationFlushOnScrollMiddleware, pendingDrop, autoScroll(autoScroller), scrollListener, focus(focusMarshal), responders(getResponders, announce))));\n\nconst clean$1 = () => ({\n additions: {},\n removals: {},\n modified: {}\n});\nfunction createPublisher({\n registry,\n callbacks\n}) {\n let staging = clean$1();\n let frameId = null;\n const collect = () => {\n if (frameId) {\n return;\n }\n callbacks.collectionStarting();\n frameId = requestAnimationFrame(() => {\n frameId = null;\n start();\n const {\n additions,\n removals,\n modified\n } = staging;\n const added = Object.keys(additions).map(id => registry.draggable.getById(id).getDimension(origin)).sort((a, b) => a.descriptor.index - b.descriptor.index);\n const updated = Object.keys(modified).map(id => {\n const entry = registry.droppable.getById(id);\n const scroll = entry.callbacks.getScrollWhileDragging();\n return {\n droppableId: id,\n scroll\n };\n });\n const result = {\n additions: added,\n removals: Object.keys(removals),\n modified: updated\n };\n staging = clean$1();\n finish();\n callbacks.publish(result);\n });\n };\n const add = entry => {\n const id = entry.descriptor.id;\n staging.additions[id] = entry;\n staging.modified[entry.descriptor.droppableId] = true;\n if (staging.removals[id]) {\n delete staging.removals[id];\n }\n collect();\n };\n const remove = entry => {\n const descriptor = entry.descriptor;\n staging.removals[descriptor.id] = true;\n staging.modified[descriptor.droppableId] = true;\n if (staging.additions[descriptor.id]) {\n delete staging.additions[descriptor.id];\n }\n collect();\n };\n const stop = () => {\n if (!frameId) {\n return;\n }\n cancelAnimationFrame(frameId);\n frameId = null;\n staging = clean$1();\n };\n return {\n add,\n remove,\n stop\n };\n}\n\nvar getMaxScroll = ({\n scrollHeight,\n scrollWidth,\n height,\n width\n}) => {\n const maxScroll = subtract({\n x: scrollWidth,\n y: scrollHeight\n }, {\n x: width,\n y: height\n });\n const adjustedMaxScroll = {\n x: Math.max(0, maxScroll.x),\n y: Math.max(0, maxScroll.y)\n };\n return adjustedMaxScroll;\n};\n\nvar getDocumentElement = () => {\n const doc = document.documentElement;\n !doc ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.documentElement') : invariant() : void 0;\n return doc;\n};\n\nvar getMaxWindowScroll = () => {\n const doc = getDocumentElement();\n const maxScroll = getMaxScroll({\n scrollHeight: doc.scrollHeight,\n scrollWidth: doc.scrollWidth,\n width: doc.clientWidth,\n height: doc.clientHeight\n });\n return maxScroll;\n};\n\nvar getViewport = () => {\n const scroll = getWindowScroll();\n const maxScroll = getMaxWindowScroll();\n const top = scroll.y;\n const left = scroll.x;\n const doc = getDocumentElement();\n const width = doc.clientWidth;\n const height = doc.clientHeight;\n const right = left + width;\n const bottom = top + height;\n const frame = getRect({\n top,\n left,\n right,\n bottom\n });\n const viewport = {\n frame,\n scroll: {\n initial: scroll,\n current: scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n return viewport;\n};\n\nvar getInitialPublish = ({\n critical,\n scrollOptions,\n registry\n}) => {\n start();\n const viewport = getViewport();\n const windowScroll = viewport.scroll.current;\n const home = critical.droppable;\n const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions));\n const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll));\n const dimensions = {\n draggables: toDraggableMap(draggables),\n droppables: toDroppableMap(droppables)\n };\n finish();\n const result = {\n dimensions,\n critical,\n viewport\n };\n return result;\n};\n\nfunction shouldPublishUpdate(registry, dragging, entry) {\n if (entry.descriptor.id === dragging.id) {\n return false;\n }\n if (entry.descriptor.type !== dragging.type) {\n return false;\n }\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n if (home.descriptor.mode !== 'virtual') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}]\n while a drag is occurring. This is only supported for virtual lists.\n\n See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md\n `) : void 0;\n return false;\n }\n return true;\n}\nvar createDimensionMarshal = (registry, callbacks) => {\n let collection = null;\n const publisher = createPublisher({\n callbacks: {\n publish: callbacks.publishWhileDragging,\n collectionStarting: callbacks.collectionStarting\n },\n registry\n });\n const updateDroppableIsEnabled = (id, isEnabled) => {\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n if (!collection) {\n return;\n }\n callbacks.updateDroppableIsEnabled({\n id,\n isEnabled\n });\n };\n const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableIsCombineEnabled({\n id,\n isCombineEnabled\n });\n };\n const updateDroppableScroll = (id, newScroll) => {\n if (!collection) {\n return;\n }\n !registry.droppable.exists(id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : invariant() : void 0;\n callbacks.updateDroppableScroll({\n id,\n newScroll\n });\n };\n const scrollDroppable = (id, change) => {\n if (!collection) {\n return;\n }\n registry.droppable.getById(id).callbacks.scroll(change);\n };\n const stopPublishing = () => {\n if (!collection) {\n return;\n }\n publisher.stop();\n const home = collection.critical.droppable;\n registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped());\n collection.unsubscribe();\n collection = null;\n };\n const subscriber = event => {\n !collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Should only be subscribed when a collection is occurring') : invariant() : void 0;\n const dragging = collection.critical.draggable;\n if (event.type === 'ADDITION') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.add(event.value);\n }\n }\n if (event.type === 'REMOVAL') {\n if (shouldPublishUpdate(registry, dragging, event.value)) {\n publisher.remove(event.value);\n }\n }\n };\n const startPublishing = request => {\n !!collection ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : invariant() : void 0;\n const entry = registry.draggable.getById(request.draggableId);\n const home = registry.droppable.getById(entry.descriptor.droppableId);\n const critical = {\n draggable: entry.descriptor,\n droppable: home.descriptor\n };\n const unsubscribe = registry.subscribe(subscriber);\n collection = {\n critical,\n unsubscribe\n };\n return getInitialPublish({\n critical,\n registry,\n scrollOptions: request.scrollOptions\n });\n };\n const marshal = {\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n scrollDroppable,\n updateDroppableScroll,\n startPublishing,\n stopPublishing\n };\n return marshal;\n};\n\nvar canStartDrag = (state, id) => {\n if (state.phase === 'IDLE') {\n return true;\n }\n if (state.phase !== 'DROP_ANIMATING') {\n return false;\n }\n if (state.completed.result.draggableId === id) {\n return false;\n }\n return state.completed.result.reason === 'DROP';\n};\n\nvar scrollWindow = change => {\n window.scrollBy(change.x, change.y);\n};\n\nconst getScrollableDroppables = memoizeOne(droppables => toDroppableList(droppables).filter(droppable => {\n if (!droppable.isEnabled) {\n return false;\n }\n if (!droppable.frame) {\n return false;\n }\n return true;\n}));\nconst getScrollableDroppableOver = (target, droppables) => {\n const maybe = getScrollableDroppables(droppables).find(droppable => {\n !droppable.frame ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Invalid result') : invariant() : void 0;\n return isPositionInFrame(droppable.frame.pageMarginBox)(target);\n }) || null;\n return maybe;\n};\nvar getBestScrollableDroppable = ({\n center,\n destination,\n droppables\n}) => {\n if (destination) {\n const dimension = droppables[destination];\n if (!dimension.frame) {\n return null;\n }\n return dimension;\n }\n const dimension = getScrollableDroppableOver(center, droppables);\n return dimension;\n};\n\nconst defaultAutoScrollerOptions = {\n startFromPercentage: 0.25,\n maxScrollAtPercentage: 0.05,\n maxPixelScroll: 28,\n ease: percentage => percentage ** 2,\n durationDampening: {\n stopDampeningAt: 1200,\n accelerateAt: 360\n },\n disabled: false\n};\n\nvar getDistanceThresholds = (container, axis, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage;\n const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage;\n const thresholds = {\n startScrollingFrom,\n maxScrollValueAt\n };\n return thresholds;\n};\n\nvar getPercentage = ({\n startOfRange,\n endOfRange,\n current\n}) => {\n const range = endOfRange - startOfRange;\n if (range === 0) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Detected distance range of 0 in the fluid auto scroller\n This is unexpected and would cause a divide by 0 issue.\n Not allowing an auto scroll\n `) : void 0;\n return 0;\n }\n const currentInRange = current - startOfRange;\n const percentage = currentInRange / range;\n return percentage;\n};\n\nvar minScroll = 1;\n\nvar getValueFromDistance = (distanceToEdge, thresholds, getAutoScrollerOptions = () => defaultAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (distanceToEdge > thresholds.startScrollingFrom) {\n return 0;\n }\n if (distanceToEdge <= thresholds.maxScrollValueAt) {\n return autoScrollerOptions.maxPixelScroll;\n }\n if (distanceToEdge === thresholds.startScrollingFrom) {\n return minScroll;\n }\n const percentageFromMaxScrollValueAt = getPercentage({\n startOfRange: thresholds.maxScrollValueAt,\n endOfRange: thresholds.startScrollingFrom,\n current: distanceToEdge\n });\n const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt;\n const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom);\n return Math.ceil(scroll);\n};\n\nvar dampenValueByTime = (proposedScroll, dragStartTime, getAutoScrollerOptions) => {\n const autoScrollerOptions = getAutoScrollerOptions();\n const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt;\n const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt;\n const startOfRange = dragStartTime;\n const endOfRange = stopAt;\n const now = Date.now();\n const runTime = now - startOfRange;\n if (runTime >= stopAt) {\n return proposedScroll;\n }\n if (runTime < accelerateAt) {\n return minScroll;\n }\n const betweenAccelerateAtAndStopAtPercentage = getPercentage({\n startOfRange: accelerateAt,\n endOfRange,\n current: runTime\n });\n const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage);\n return Math.ceil(scroll);\n};\n\nvar getValue = ({\n distanceToEdge,\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions);\n if (scroll === 0) {\n return 0;\n }\n if (!shouldUseTimeDampening) {\n return scroll;\n }\n return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll);\n};\n\nvar getScrollOnAxis = ({\n container,\n distanceToEdges,\n dragStartTime,\n axis,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions);\n const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start];\n if (isCloserToEnd) {\n return getValue({\n distanceToEdge: distanceToEdges[axis.end],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n }\n return -1 * getValue({\n distanceToEdge: distanceToEdges[axis.start],\n thresholds,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n};\n\nvar adjustForSizeLimits = ({\n container,\n subject,\n proposedScroll\n}) => {\n const isTooBigVertically = subject.height > container.height;\n const isTooBigHorizontally = subject.width > container.width;\n if (!isTooBigHorizontally && !isTooBigVertically) {\n return proposedScroll;\n }\n if (isTooBigHorizontally && isTooBigVertically) {\n return null;\n }\n return {\n x: isTooBigHorizontally ? 0 : proposedScroll.x,\n y: isTooBigVertically ? 0 : proposedScroll.y\n };\n};\n\nconst clean = apply(value => value === 0 ? 0 : value);\nvar getScroll$1 = ({\n dragStartTime,\n container,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const distanceToEdges = {\n top: center.y - container.top,\n right: container.right - center.x,\n bottom: container.bottom - center.y,\n left: center.x - container.left\n };\n const y = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: vertical,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const x = getScrollOnAxis({\n container,\n distanceToEdges,\n dragStartTime,\n axis: horizontal,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n const required = clean({\n x,\n y\n });\n if (isEqual$1(required, origin)) {\n return null;\n }\n const limited = adjustForSizeLimits({\n container,\n subject,\n proposedScroll: required\n });\n if (!limited) {\n return null;\n }\n return isEqual$1(limited, origin) ? null : limited;\n};\n\nconst smallestSigned = apply(value => {\n if (value === 0) {\n return 0;\n }\n return value > 0 ? 1 : -1;\n});\nconst getOverlap = (() => {\n const getRemainder = (target, max) => {\n if (target < 0) {\n return target;\n }\n if (target > max) {\n return target - max;\n }\n return 0;\n };\n return ({\n current,\n max,\n change\n }) => {\n const targetScroll = add(current, change);\n const overlap = {\n x: getRemainder(targetScroll.x, max.x),\n y: getRemainder(targetScroll.y, max.y)\n };\n if (isEqual$1(overlap, origin)) {\n return null;\n }\n return overlap;\n };\n})();\nconst canPartiallyScroll = ({\n max: rawMax,\n current,\n change\n}) => {\n const max = {\n x: Math.max(current.x, rawMax.x),\n y: Math.max(current.y, rawMax.y)\n };\n const smallestChange = smallestSigned(change);\n const overlap = getOverlap({\n max,\n current,\n change: smallestChange\n });\n if (!overlap) {\n return true;\n }\n if (smallestChange.x !== 0 && overlap.x === 0) {\n return true;\n }\n if (smallestChange.y !== 0 && overlap.y === 0) {\n return true;\n }\n return false;\n};\nconst canScrollWindow = (viewport, change) => canPartiallyScroll({\n current: viewport.scroll.current,\n max: viewport.scroll.max,\n change\n});\nconst getWindowOverlap = (viewport, change) => {\n if (!canScrollWindow(viewport, change)) {\n return null;\n }\n const max = viewport.scroll.max;\n const current = viewport.scroll.current;\n return getOverlap({\n current,\n max,\n change\n });\n};\nconst canScrollDroppable = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return false;\n }\n return canPartiallyScroll({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\nconst getDroppableOverlap = (droppable, change) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n if (!canScrollDroppable(droppable, change)) {\n return null;\n }\n return getOverlap({\n current: frame.scroll.current,\n max: frame.scroll.max,\n change\n });\n};\n\nvar getWindowScrollChange = ({\n viewport,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const scroll = getScroll$1({\n dragStartTime,\n container: viewport.frame,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollWindow(viewport, scroll) ? scroll : null;\n};\n\nvar getDroppableScrollChange = ({\n droppable,\n subject,\n center,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n}) => {\n const frame = droppable.frame;\n if (!frame) {\n return null;\n }\n const scroll = getScroll$1({\n dragStartTime,\n container: frame.pageMarginBox,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n return scroll && canScrollDroppable(droppable, scroll) ? scroll : null;\n};\n\nvar scroll = ({\n state,\n dragStartTime,\n shouldUseTimeDampening,\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n}) => {\n const center = state.current.page.borderBoxCenter;\n const draggable = state.dimensions.draggables[state.critical.draggable.id];\n const subject = draggable.page.marginBox;\n if (state.isWindowScrollAllowed) {\n const viewport = state.viewport;\n const change = getWindowScrollChange({\n dragStartTime,\n viewport,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollWindow(change);\n return;\n }\n }\n const droppable = getBestScrollableDroppable({\n center,\n destination: whatIsDraggedOver(state.impact),\n droppables: state.dimensions.droppables\n });\n if (!droppable) {\n return;\n }\n const change = getDroppableScrollChange({\n dragStartTime,\n droppable,\n subject,\n center,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n if (change) {\n scrollDroppable(droppable.descriptor.id, change);\n }\n};\n\nvar createFluidScroller = ({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions = () => defaultAutoScrollerOptions\n}) => {\n const scheduleWindowScroll = rafSchd(scrollWindow);\n const scheduleDroppableScroll = rafSchd(scrollDroppable);\n let dragging = null;\n const tryScroll = state => {\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot fluid scroll if not dragging') : invariant() : void 0;\n const {\n shouldUseTimeDampening,\n dragStartTime\n } = dragging;\n scroll({\n state,\n scrollWindow: scheduleWindowScroll,\n scrollDroppable: scheduleDroppableScroll,\n dragStartTime,\n shouldUseTimeDampening,\n getAutoScrollerOptions\n });\n };\n const start$1 = state => {\n start();\n !!dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot start auto scrolling when already started') : invariant() : void 0;\n const dragStartTime = Date.now();\n let wasScrollNeeded = false;\n const fakeScrollCallback = () => {\n wasScrollNeeded = true;\n };\n scroll({\n state,\n dragStartTime: 0,\n shouldUseTimeDampening: false,\n scrollWindow: fakeScrollCallback,\n scrollDroppable: fakeScrollCallback,\n getAutoScrollerOptions\n });\n dragging = {\n dragStartTime,\n shouldUseTimeDampening: wasScrollNeeded\n };\n finish();\n if (wasScrollNeeded) {\n tryScroll(state);\n }\n };\n const stop = () => {\n if (!dragging) {\n return;\n }\n scheduleWindowScroll.cancel();\n scheduleDroppableScroll.cancel();\n dragging = null;\n };\n return {\n start: start$1,\n stop,\n scroll: tryScroll\n };\n};\n\nvar createJumpScroller = ({\n move,\n scrollDroppable,\n scrollWindow\n}) => {\n const moveByOffset = (state, offset) => {\n const client = add(state.current.client.selection, offset);\n move({\n client\n });\n };\n const scrollDroppableAsMuchAsItCan = (droppable, change) => {\n if (!canScrollDroppable(droppable, change)) {\n return change;\n }\n const overlap = getDroppableOverlap(droppable, change);\n if (!overlap) {\n scrollDroppable(droppable.descriptor.id, change);\n return null;\n }\n const whatTheDroppableCanScroll = subtract(change, overlap);\n scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll);\n const remainder = subtract(change, whatTheDroppableCanScroll);\n return remainder;\n };\n const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => {\n if (!isWindowScrollAllowed) {\n return change;\n }\n if (!canScrollWindow(viewport, change)) {\n return change;\n }\n const overlap = getWindowOverlap(viewport, change);\n if (!overlap) {\n scrollWindow(change);\n return null;\n }\n const whatTheWindowCanScroll = subtract(change, overlap);\n scrollWindow(whatTheWindowCanScroll);\n const remainder = subtract(change, whatTheWindowCanScroll);\n return remainder;\n };\n const jumpScroller = state => {\n const request = state.scrollJumpRequest;\n if (!request) {\n return;\n }\n const destination = whatIsDraggedOver(state.impact);\n !destination ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : invariant() : void 0;\n const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request);\n if (!droppableRemainder) {\n return;\n }\n const viewport = state.viewport;\n const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder);\n if (!windowRemainder) {\n return;\n }\n moveByOffset(state, windowRemainder);\n };\n return jumpScroller;\n};\n\nvar createAutoScroller = ({\n scrollDroppable,\n scrollWindow,\n move,\n getAutoScrollerOptions\n}) => {\n const fluidScroller = createFluidScroller({\n scrollWindow,\n scrollDroppable,\n getAutoScrollerOptions\n });\n const jumpScroll = createJumpScroller({\n move,\n scrollWindow,\n scrollDroppable\n });\n const scroll = state => {\n const autoScrollerOptions = getAutoScrollerOptions();\n if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') {\n return;\n }\n if (state.movementMode === 'FLUID') {\n fluidScroller.scroll(state);\n return;\n }\n if (!state.scrollJumpRequest) {\n return;\n }\n jumpScroll(state);\n };\n const scroller = {\n scroll,\n start: fluidScroller.start,\n stop: fluidScroller.stop\n };\n return scroller;\n};\n\nconst prefix = 'data-rfd';\nconst dragHandle = (() => {\n const base = `${prefix}-drag-handle`;\n return {\n base,\n draggableId: `${base}-draggable-id`,\n contextId: `${base}-context-id`\n };\n})();\nconst draggable = (() => {\n const base = `${prefix}-draggable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst droppable = (() => {\n const base = `${prefix}-droppable`;\n return {\n base,\n contextId: `${base}-context-id`,\n id: `${base}-id`\n };\n})();\nconst scrollContainer = {\n contextId: `${prefix}-scroll-container-context-id`\n};\n\nconst makeGetSelector = context => attribute => `[${attribute}=\"${context}\"]`;\nconst getStyles = (rules, property) => rules.map(rule => {\n const value = rule.styles[property];\n if (!value) {\n return '';\n }\n return `${rule.selector} { ${value} }`;\n}).join(' ');\nconst noPointerEvents = 'pointer-events: none;';\nvar getStyles$1 = contextId => {\n const getSelector = makeGetSelector(contextId);\n const dragHandle$1 = (() => {\n const grabCursor = `\n cursor: -webkit-grab;\n cursor: grab;\n `;\n return {\n selector: getSelector(dragHandle.contextId),\n styles: {\n always: `\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n touch-action: manipulation;\n `,\n resting: grabCursor,\n dragging: noPointerEvents,\n dropAnimating: grabCursor\n }\n };\n })();\n const draggable$1 = (() => {\n const transition = `\n transition: ${transitions.outOfTheWay};\n `;\n return {\n selector: getSelector(draggable.contextId),\n styles: {\n dragging: transition,\n dropAnimating: transition,\n userCancel: transition\n }\n };\n })();\n const droppable$1 = {\n selector: getSelector(droppable.contextId),\n styles: {\n always: `overflow-anchor: none;`\n }\n };\n const body = {\n selector: 'body',\n styles: {\n dragging: `\n cursor: grabbing;\n cursor: -webkit-grabbing;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n overflow-anchor: none;\n `\n }\n };\n const rules = [draggable$1, dragHandle$1, droppable$1, body];\n return {\n always: getStyles(rules, 'always'),\n resting: getStyles(rules, 'resting'),\n dragging: getStyles(rules, 'dragging'),\n dropAnimating: getStyles(rules, 'dropAnimating'),\n userCancel: getStyles(rules, 'userCancel')\n };\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\n\nconst getHead = () => {\n const head = document.querySelector('head');\n !head ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find the head to append a style to') : invariant() : void 0;\n return head;\n};\nconst createStyleEl = nonce => {\n const el = document.createElement('style');\n if (nonce) {\n el.setAttribute('nonce', nonce);\n }\n el.type = 'text/css';\n return el;\n};\nfunction useStyleMarshal(contextId, nonce) {\n const styles = useMemo(() => getStyles$1(contextId), [contextId]);\n const alwaysRef = useRef(null);\n const dynamicRef = useRef(null);\n const setDynamicStyle = useCallback(memoizeOne(proposed => {\n const el = dynamicRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }), []);\n const setAlwaysStyle = useCallback(proposed => {\n const el = alwaysRef.current;\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot set dynamic style element if it is not set') : invariant() : void 0;\n el.textContent = proposed;\n }, []);\n useIsomorphicLayoutEffect(() => {\n !(!alwaysRef.current && !dynamicRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'style elements already mounted') : invariant() : void 0;\n const always = createStyleEl(nonce);\n const dynamic = createStyleEl(nonce);\n alwaysRef.current = always;\n dynamicRef.current = dynamic;\n always.setAttribute(`${prefix}-always`, contextId);\n dynamic.setAttribute(`${prefix}-dynamic`, contextId);\n getHead().appendChild(always);\n getHead().appendChild(dynamic);\n setAlwaysStyle(styles.always);\n setDynamicStyle(styles.resting);\n return () => {\n const remove = ref => {\n const current = ref.current;\n !current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot unmount ref as it is not set') : invariant() : void 0;\n getHead().removeChild(current);\n ref.current = null;\n };\n remove(alwaysRef);\n remove(dynamicRef);\n };\n }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]);\n const dragging = useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]);\n const dropping = useCallback(reason => {\n if (reason === 'DROP') {\n setDynamicStyle(styles.dropAnimating);\n return;\n }\n setDynamicStyle(styles.userCancel);\n }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]);\n const resting = useCallback(() => {\n if (!dynamicRef.current) {\n return;\n }\n setDynamicStyle(styles.resting);\n }, [setDynamicStyle, styles.resting]);\n const marshal = useMemo(() => ({\n dragging,\n dropping,\n resting\n }), [dragging, dropping, resting]);\n return marshal;\n}\n\nfunction querySelectorAll(parentNode, selector) {\n return Array.from(parentNode.querySelectorAll(selector));\n}\n\nvar getWindowFromEl = el => {\n if (el && el.ownerDocument && el.ownerDocument.defaultView) {\n return el.ownerDocument.defaultView;\n }\n return window;\n};\n\nfunction isHtmlElement(el) {\n return el instanceof getWindowFromEl(el).HTMLElement;\n}\n\nfunction findDragHandle(contextId, draggableId) {\n const selector = `[${dragHandle.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n if (!possible.length) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find any drag handles in the context \"${contextId}\"`) : void 0;\n return null;\n }\n const handle = possible.find(el => {\n return el.getAttribute(dragHandle.draggableId) === draggableId;\n });\n if (!handle) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find drag handle with id \"${draggableId}\" as no handle with a matching id was found`) : void 0;\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle needs to be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\n\nfunction useFocusMarshal(contextId) {\n const entriesRef = useRef({});\n const recordRef = useRef(null);\n const restoreFocusFrameRef = useRef(null);\n const isMountedRef = useRef(false);\n const register = useCallback(function register(id, focus) {\n const entry = {\n id,\n focus\n };\n entriesRef.current[id] = entry;\n return function unregister() {\n const entries = entriesRef.current;\n const current = entries[id];\n if (current !== entry) {\n delete entries[id];\n }\n };\n }, []);\n const tryGiveFocus = useCallback(function tryGiveFocus(tryGiveFocusTo) {\n const handle = findDragHandle(contextId, tryGiveFocusTo);\n if (handle && handle !== document.activeElement) {\n handle.focus();\n }\n }, [contextId]);\n const tryShiftRecord = useCallback(function tryShiftRecord(previous, redirectTo) {\n if (recordRef.current === previous) {\n recordRef.current = redirectTo;\n }\n }, []);\n const tryRestoreFocusRecorded = useCallback(function tryRestoreFocusRecorded() {\n if (restoreFocusFrameRef.current) {\n return;\n }\n if (!isMountedRef.current) {\n return;\n }\n restoreFocusFrameRef.current = requestAnimationFrame(() => {\n restoreFocusFrameRef.current = null;\n const record = recordRef.current;\n if (record) {\n tryGiveFocus(record);\n }\n });\n }, [tryGiveFocus]);\n const tryRecordFocus = useCallback(function tryRecordFocus(id) {\n recordRef.current = null;\n const focused = document.activeElement;\n if (!focused) {\n return;\n }\n if (focused.getAttribute(dragHandle.draggableId) !== id) {\n return;\n }\n recordRef.current = id;\n }, []);\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n return function clearFrameOnUnmount() {\n isMountedRef.current = false;\n const frameId = restoreFocusFrameRef.current;\n if (frameId) {\n cancelAnimationFrame(frameId);\n }\n };\n }, []);\n const marshal = useMemo(() => ({\n register,\n tryRecordFocus,\n tryRestoreFocusRecorded,\n tryShiftRecord\n }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]);\n return marshal;\n}\n\nfunction createRegistry() {\n const entries = {\n draggables: {},\n droppables: {}\n };\n const subscribers = [];\n function subscribe(cb) {\n subscribers.push(cb);\n return function unsubscribe() {\n const index = subscribers.indexOf(cb);\n if (index === -1) {\n return;\n }\n subscribers.splice(index, 1);\n };\n }\n function notify(event) {\n if (subscribers.length) {\n subscribers.forEach(cb => cb(event));\n }\n }\n function findDraggableById(id) {\n return entries.draggables[id] || null;\n }\n function getDraggableById(id) {\n const entry = findDraggableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find draggable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const draggableAPI = {\n register: entry => {\n entries.draggables[entry.descriptor.id] = entry;\n notify({\n type: 'ADDITION',\n value: entry\n });\n },\n update: (entry, last) => {\n const current = entries.draggables[last.descriptor.id];\n if (!current) {\n return;\n }\n if (current.uniqueId !== entry.uniqueId) {\n return;\n }\n delete entries.draggables[last.descriptor.id];\n entries.draggables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const draggableId = entry.descriptor.id;\n const current = findDraggableById(draggableId);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.draggables[draggableId];\n if (entries.droppables[entry.descriptor.droppableId]) {\n notify({\n type: 'REMOVAL',\n value: entry\n });\n }\n },\n getById: getDraggableById,\n findById: findDraggableById,\n exists: id => Boolean(findDraggableById(id)),\n getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type)\n };\n function findDroppableById(id) {\n return entries.droppables[id] || null;\n }\n function getDroppableById(id) {\n const entry = findDroppableById(id);\n !entry ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot find droppable entry with id [${id}]`) : invariant() : void 0;\n return entry;\n }\n const droppableAPI = {\n register: entry => {\n entries.droppables[entry.descriptor.id] = entry;\n },\n unregister: entry => {\n const current = findDroppableById(entry.descriptor.id);\n if (!current) {\n return;\n }\n if (entry.uniqueId !== current.uniqueId) {\n return;\n }\n delete entries.droppables[entry.descriptor.id];\n },\n getById: getDroppableById,\n findById: findDroppableById,\n exists: id => Boolean(findDroppableById(id)),\n getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type)\n };\n function clean() {\n entries.draggables = {};\n entries.droppables = {};\n subscribers.length = 0;\n }\n return {\n draggable: draggableAPI,\n droppable: droppableAPI,\n subscribe,\n clean\n };\n}\n\nfunction useRegistry() {\n const registry = useMemo(createRegistry, []);\n useEffect(() => {\n return function unmount() {\n registry.clean();\n };\n }, [registry]);\n return registry;\n}\n\nvar StoreContext = React.createContext(null);\n\nvar getBodyElement = () => {\n const body = document.body;\n !body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot find document.body') : invariant() : void 0;\n return body;\n};\n\nconst visuallyHidden = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n border: '0',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n 'clip-path': 'inset(100%)'\n};\n\nconst getId = contextId => `rfd-announcement-${contextId}`;\nfunction useAnnouncer(contextId) {\n const id = useMemo(() => getId(contextId), [contextId]);\n const ref = useRef(null);\n useEffect(function setup() {\n const el = document.createElement('div');\n ref.current = el;\n el.id = id;\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n _extends(el.style, visuallyHidden);\n getBodyElement().appendChild(el);\n return function cleanup() {\n setTimeout(function remove() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n if (el === ref.current) {\n ref.current = null;\n }\n });\n };\n }, [id]);\n const announce = useCallback(message => {\n const el = ref.current;\n if (el) {\n el.textContent = message;\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n A screen reader message was trying to be announced but it was unable to do so.\n This can occur if you unmount your <DragDropContext /> in your onDragEnd.\n Consider calling provided.announce() before the unmount so that the instruction will\n not be lost for users relying on a screen reader.\n\n Message not passed to screen reader:\n\n \"${message}\"\n `) : void 0;\n }, []);\n return announce;\n}\n\nconst defaults = {\n separator: '::'\n};\nfunction useUniqueId(prefix, options = defaults) {\n const id = React.useId();\n return useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]);\n}\n\nfunction getElementId({\n contextId,\n uniqueId\n}) {\n return `rfd-hidden-text-${contextId}-${uniqueId}`;\n}\nfunction useHiddenTextElement({\n contextId,\n text\n}) {\n const uniqueId = useUniqueId('hidden-text', {\n separator: '-'\n });\n const id = useMemo(() => getElementId({\n contextId,\n uniqueId\n }), [uniqueId, contextId]);\n useEffect(function mount() {\n const el = document.createElement('div');\n el.id = id;\n el.textContent = text;\n el.style.display = 'none';\n getBodyElement().appendChild(el);\n return function unmount() {\n const body = getBodyElement();\n if (body.contains(el)) {\n body.removeChild(el);\n }\n };\n }, [id, text]);\n return id;\n}\n\nvar AppContext = React.createContext(null);\n\nvar peerDependencies = {\n\treact: \"^18.0.0 || ^19.0.0\"};\n\nconst semver = /(\\d+)\\.(\\d+)\\.(\\d+)/;\nconst getVersion = value => {\n const result = semver.exec(value);\n !(result != null) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Unable to parse React version ${value}`) : invariant() : void 0;\n const major = Number(result[1]);\n const minor = Number(result[2]);\n const patch = Number(result[3]);\n return {\n major,\n minor,\n patch,\n raw: value\n };\n};\nconst isSatisfied = (expected, actual) => {\n if (actual.major > expected.major) {\n return true;\n }\n if (actual.major < expected.major) {\n return false;\n }\n if (actual.minor > expected.minor) {\n return true;\n }\n if (actual.minor < expected.minor) {\n return false;\n }\n return actual.patch >= expected.patch;\n};\nvar checkReactVersion = (peerDepValue, actualValue) => {\n const peerDep = getVersion(peerDepValue);\n const actual = getVersion(actualValue);\n if (isSatisfied(peerDep, actual)) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n React version: [${actual.raw}]\n does not satisfy expected peer dependency version: [${peerDep.raw}]\n\n This can result in run time bugs, and even fatal crashes\n `) : void 0;\n};\n\nconst suffix = `\n We expect a html5 doctype: <!doctype html>\n This is to ensure consistent browser layout and measurement\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md\n`;\nvar checkDoctype = doc => {\n const doctype = doc.doctype;\n if (!doctype) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n No <!doctype html> found.\n\n ${suffix}\n `) : void 0;\n return;\n }\n if (doctype.name.toLowerCase() !== 'html') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> found: (${doctype.name})\n\n ${suffix}\n `) : void 0;\n }\n if (doctype.publicId !== '') {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Unexpected <!doctype> publicId found: (${doctype.publicId})\n A html5 doctype does not have a publicId\n\n ${suffix}\n `) : void 0;\n }\n};\n\nfunction useDev(useHook) {\n if (process.env.NODE_ENV !== 'production') {\n useHook();\n }\n}\n\nfunction useDevSetupWarning(fn, inputs) {\n useDev(() => {\n useEffect(() => {\n try {\n fn();\n } catch (e) {\n error(`\n A setup problem was encountered.\n\n > ${e.message}\n `);\n }\n }, inputs);\n });\n}\n\nfunction useStartupValidation() {\n useDevSetupWarning(() => {\n checkReactVersion(peerDependencies.react, React.version);\n checkDoctype(document);\n }, []);\n}\n\nfunction usePrevious(current) {\n const ref = useRef(current);\n useEffect(() => {\n ref.current = current;\n });\n return ref;\n}\n\nfunction create() {\n let lock = null;\n function isClaimed() {\n return Boolean(lock);\n }\n function isActive(value) {\n return value === lock;\n }\n function claim(abandon) {\n !!lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot claim lock as it is already claimed') : invariant() : void 0;\n const newLock = {\n abandon\n };\n lock = newLock;\n return newLock;\n }\n function release() {\n !lock ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot release lock when there is no lock') : invariant() : void 0;\n lock = null;\n }\n function tryAbandon() {\n if (lock) {\n lock.abandon();\n release();\n }\n }\n return {\n isClaimed,\n isActive,\n claim,\n release,\n tryAbandon\n };\n}\n\nfunction isDragging(state) {\n if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') {\n return false;\n }\n return state.isDragging;\n}\n\nconst tab = 9;\nconst enter = 13;\nconst escape = 27;\nconst space = 32;\nconst pageUp = 33;\nconst pageDown = 34;\nconst end = 35;\nconst home = 36;\nconst arrowLeft = 37;\nconst arrowUp = 38;\nconst arrowRight = 39;\nconst arrowDown = 40;\n\nconst preventedKeys = {\n [enter]: true,\n [tab]: true\n};\nvar preventStandardKeyEvents = event => {\n if (preventedKeys[event.keyCode]) {\n event.preventDefault();\n }\n};\n\nconst supportedEventName = (() => {\n const base = 'visibilitychange';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`];\n const supported = candidates.find(eventName => `on${eventName}` in document);\n return supported || base;\n})();\n\nconst primaryButton = 0;\nconst sloppyClickThreshold = 5;\nfunction isSloppyClickThresholdExceeded(original, current) {\n return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold;\n}\nconst idle$1 = {\n type: 'IDLE'\n};\nfunction getCaptureBindings({\n cancel,\n completed,\n getPhase,\n setPhase\n}) {\n return [{\n eventName: 'mousemove',\n fn: event => {\n const {\n button,\n clientX,\n clientY\n } = event;\n if (button !== primaryButton) {\n return;\n }\n const point = {\n x: clientX,\n y: clientY\n };\n const phase = getPhase();\n if (phase.type === 'DRAGGING') {\n event.preventDefault();\n phase.actions.move(point);\n return;\n }\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot be IDLE') : invariant() : void 0;\n const pending = phase.point;\n if (!isSloppyClickThresholdExceeded(pending, point)) {\n return;\n }\n event.preventDefault();\n const actions = phase.actions.fluidLift(point);\n setPhase({\n type: 'DRAGGING',\n actions\n });\n }\n }, {\n eventName: 'mouseup',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'mousedown',\n fn: event => {\n if (getPhase().type === 'DRAGGING') {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'scroll',\n options: {\n passive: true,\n capture: false\n },\n fn: () => {\n if (getPhase().type === 'PENDING') {\n cancel();\n }\n }\n }, {\n eventName: 'webkitmouseforcedown',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Unexpected phase') : invariant() : void 0;\n if (phase.actions.shouldRespectForcePress()) {\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useMouseSensor(api) {\n const phaseRef = useRef(idle$1);\n const unbindEventsRef = useRef(noop$2);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'mousedown',\n fn: function onMouseDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.button !== primaryButton) {\n return;\n }\n if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n event.preventDefault();\n const point = {\n x: event.clientX,\n y: event.clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const preventForcePressBinding = useMemo(() => ({\n eventName: 'webkitmouseforcewillbegin',\n fn: event => {\n if (event.defaultPrevented) {\n return;\n }\n const id = api.findClosestDraggableId(event);\n if (!id) {\n return;\n }\n const options = api.findOptionsForDraggable(id);\n if (!options) {\n return;\n }\n if (options.shouldRespectForcePress) {\n return;\n }\n if (!api.canGetLock(id)) {\n return;\n }\n event.preventDefault();\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options);\n }, [preventForcePressBinding, startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n phaseRef.current = idle$1;\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const bindings = getCaptureBindings({\n cancel,\n completed: stop,\n getPhase: () => phaseRef.current,\n setPhase: phase => {\n phaseRef.current = phase;\n }\n });\n unbindEventsRef.current = bindEvents(window, bindings, options);\n }, [cancel, stop]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(phaseRef.current.type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n phaseRef.current = {\n type: 'PENDING',\n point,\n actions\n };\n bindCapturingEvents();\n }, [bindCapturingEvents]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nfunction noop$1() {}\nconst scrollJumpKeys = {\n [pageDown]: true,\n [pageUp]: true,\n [home]: true,\n [end]: true\n};\nfunction getDraggingBindings(actions, stop) {\n function cancel() {\n stop();\n actions.cancel();\n }\n function drop() {\n stop();\n actions.drop();\n }\n return [{\n eventName: 'keydown',\n fn: event => {\n if (event.keyCode === escape) {\n event.preventDefault();\n cancel();\n return;\n }\n if (event.keyCode === space) {\n event.preventDefault();\n drop();\n return;\n }\n if (event.keyCode === arrowDown) {\n event.preventDefault();\n actions.moveDown();\n return;\n }\n if (event.keyCode === arrowUp) {\n event.preventDefault();\n actions.moveUp();\n return;\n }\n if (event.keyCode === arrowRight) {\n event.preventDefault();\n actions.moveRight();\n return;\n }\n if (event.keyCode === arrowLeft) {\n event.preventDefault();\n actions.moveLeft();\n return;\n }\n if (scrollJumpKeys[event.keyCode]) {\n event.preventDefault();\n return;\n }\n preventStandardKeyEvents(event);\n }\n }, {\n eventName: 'mousedown',\n fn: cancel\n }, {\n eventName: 'mouseup',\n fn: cancel\n }, {\n eventName: 'click',\n fn: cancel\n }, {\n eventName: 'touchstart',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'wheel',\n fn: cancel,\n options: {\n passive: true\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useKeyboardSensor(api) {\n const unbindEventsRef = useRef(noop$1);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'keydown',\n fn: function onKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (event.keyCode !== space) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const preDrag = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!preDrag) {\n return;\n }\n event.preventDefault();\n let isCapturing = true;\n const actions = preDrag.snapLift();\n unbindEventsRef.current();\n function stop() {\n !isCapturing ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : invariant() : void 0;\n isCapturing = false;\n unbindEventsRef.current();\n listenForCapture();\n }\n unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), {\n capture: true,\n passive: false\n });\n }\n }), [api]);\n const listenForCapture = useCallback(function tryStartCapture() {\n const options = {\n passive: false,\n capture: true\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n };\n }, [listenForCapture]);\n}\n\nconst idle = {\n type: 'IDLE'\n};\nconst timeForLongPress = 120;\nconst forcePressThreshold = 0.15;\nfunction getWindowBindings({\n cancel,\n getPhase\n}) {\n return [{\n eventName: 'orientationchange',\n fn: cancel\n }, {\n eventName: 'resize',\n fn: cancel\n }, {\n eventName: 'contextmenu',\n fn: event => {\n event.preventDefault();\n }\n }, {\n eventName: 'keydown',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n if (event.keyCode === escape) {\n event.preventDefault();\n }\n cancel();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction getHandleBindings({\n cancel,\n completed,\n getPhase\n}) {\n return [{\n eventName: 'touchmove',\n options: {\n capture: false\n },\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n phase.hasMoved = true;\n const {\n clientX,\n clientY\n } = event.touches[0];\n const point = {\n x: clientX,\n y: clientY\n };\n event.preventDefault();\n phase.actions.move(point);\n }\n }, {\n eventName: 'touchend',\n fn: event => {\n const phase = getPhase();\n if (phase.type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n phase.actions.drop({\n shouldBlockNextClick: true\n });\n completed();\n }\n }, {\n eventName: 'touchcancel',\n fn: event => {\n if (getPhase().type !== 'DRAGGING') {\n cancel();\n return;\n }\n event.preventDefault();\n cancel();\n }\n }, {\n eventName: 'touchforcechange',\n fn: event => {\n const phase = getPhase();\n !(phase.type !== 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const isForcePress = touch.force >= forcePressThreshold;\n if (!isForcePress) {\n return;\n }\n const shouldRespect = phase.actions.shouldRespectForcePress();\n if (phase.type === 'PENDING') {\n if (shouldRespect) {\n cancel();\n }\n return;\n }\n if (shouldRespect) {\n if (phase.hasMoved) {\n event.preventDefault();\n return;\n }\n cancel();\n return;\n }\n event.preventDefault();\n }\n }, {\n eventName: supportedEventName,\n fn: cancel\n }];\n}\nfunction useTouchSensor(api) {\n const phaseRef = useRef(idle);\n const unbindEventsRef = useRef(noop$2);\n const getPhase = useCallback(function getPhase() {\n return phaseRef.current;\n }, []);\n const setPhase = useCallback(function setPhase(phase) {\n phaseRef.current = phase;\n }, []);\n const startCaptureBinding = useMemo(() => ({\n eventName: 'touchstart',\n fn: function onTouchStart(event) {\n if (event.defaultPrevented) {\n return;\n }\n const draggableId = api.findClosestDraggableId(event);\n if (!draggableId) {\n return;\n }\n const actions = api.tryGetLock(draggableId, stop, {\n sourceEvent: event\n });\n if (!actions) {\n return;\n }\n const touch = event.touches[0];\n const {\n clientX,\n clientY\n } = touch;\n const point = {\n x: clientX,\n y: clientY\n };\n unbindEventsRef.current();\n startPendingDrag(actions, point);\n }\n }), [api]);\n const listenForCapture = useCallback(function listenForCapture() {\n const options = {\n capture: true,\n passive: false\n };\n unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options);\n }, [startCaptureBinding]);\n const stop = useCallback(() => {\n const current = phaseRef.current;\n if (current.type === 'IDLE') {\n return;\n }\n if (current.type === 'PENDING') {\n clearTimeout(current.longPressTimerId);\n }\n setPhase(idle);\n unbindEventsRef.current();\n listenForCapture();\n }, [listenForCapture, setPhase]);\n const cancel = useCallback(() => {\n const phase = phaseRef.current;\n stop();\n if (phase.type === 'DRAGGING') {\n phase.actions.cancel({\n shouldBlockNextClick: true\n });\n }\n if (phase.type === 'PENDING') {\n phase.actions.abort();\n }\n }, [stop]);\n const bindCapturingEvents = useCallback(function bindCapturingEvents() {\n const options = {\n capture: true,\n passive: false\n };\n const args = {\n cancel,\n completed: stop,\n getPhase\n };\n const unbindTarget = bindEvents(window, getHandleBindings(args), options);\n const unbindWindow = bindEvents(window, getWindowBindings(args), options);\n unbindEventsRef.current = function unbindAll() {\n unbindTarget();\n unbindWindow();\n };\n }, [cancel, getPhase, stop]);\n const startDragging = useCallback(function startDragging() {\n const phase = getPhase();\n !(phase.type === 'PENDING') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : invariant() : void 0;\n const actions = phase.actions.fluidLift(phase.point);\n setPhase({\n type: 'DRAGGING',\n actions,\n hasMoved: false\n });\n }, [getPhase, setPhase]);\n const startPendingDrag = useCallback(function startPendingDrag(actions, point) {\n !(getPhase().type === 'IDLE') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected to move from IDLE to PENDING drag') : invariant() : void 0;\n const longPressTimerId = setTimeout(startDragging, timeForLongPress);\n setPhase({\n type: 'PENDING',\n point,\n actions,\n longPressTimerId\n });\n bindCapturingEvents();\n }, [bindCapturingEvents, getPhase, setPhase, startDragging]);\n useIsomorphicLayoutEffect(function mount() {\n listenForCapture();\n return function unmount() {\n unbindEventsRef.current();\n const phase = getPhase();\n if (phase.type === 'PENDING') {\n clearTimeout(phase.longPressTimerId);\n setPhase(idle);\n }\n };\n }, [getPhase, listenForCapture, setPhase]);\n useIsomorphicLayoutEffect(function webkitHack() {\n const unbind = bindEvents(window, [{\n eventName: 'touchmove',\n fn: () => {},\n options: {\n capture: false,\n passive: false\n }\n }]);\n return unbind;\n }, []);\n}\n\nfunction useValidateSensorHooks(sensorHooks) {\n useDev(() => {\n const previousRef = usePrevious(sensorHooks);\n useDevSetupWarning(() => {\n !(previousRef.current.length === sensorHooks.length) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0;\n });\n });\n}\n\nconst interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio'];\nfunction isAnInteractiveElement(parent, current) {\n if (current == null) {\n return false;\n }\n const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase());\n if (hasAnInteractiveTag) {\n return true;\n }\n const attribute = current.getAttribute('contenteditable');\n if (attribute === 'true' || attribute === '') {\n return true;\n }\n if (current === parent) {\n return false;\n }\n return isAnInteractiveElement(parent, current.parentElement);\n}\nfunction isEventInInteractiveElement(draggable, event) {\n const target = event.target;\n if (!isHtmlElement(target)) {\n return false;\n }\n return isAnInteractiveElement(draggable, target);\n}\n\nvar getBorderBoxCenterPosition = el => getRect(el.getBoundingClientRect()).center;\n\nfunction isElement(el) {\n return el instanceof getWindowFromEl(el).Element;\n}\n\nconst supportedMatchesName = (() => {\n const base = 'matches';\n if (typeof document === 'undefined') {\n return base;\n }\n const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector'];\n const value = candidates.find(name => name in Element.prototype);\n return value || base;\n})();\nfunction closestPonyfill(el, selector) {\n if (el == null) {\n return null;\n }\n if (el[supportedMatchesName](selector)) {\n return el;\n }\n return closestPonyfill(el.parentElement, selector);\n}\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n return closestPonyfill(el, selector);\n}\n\nfunction getSelector(contextId) {\n return `[${dragHandle.contextId}=\"${contextId}\"]`;\n}\nfunction findClosestDragHandleFromEvent(contextId, event) {\n const target = event.target;\n if (!isElement(target)) {\n process.env.NODE_ENV !== \"production\" ? warning('event.target must be a Element') : void 0;\n return null;\n }\n const selector = getSelector(contextId);\n const handle = closest(target, selector);\n if (!handle) {\n return null;\n }\n if (!isHtmlElement(handle)) {\n process.env.NODE_ENV !== \"production\" ? warning('drag handle must be a HTMLElement') : void 0;\n return null;\n }\n return handle;\n}\nfunction tryGetClosestDraggableIdFromEvent(contextId, event) {\n const handle = findClosestDragHandleFromEvent(contextId, event);\n if (!handle) {\n return null;\n }\n return handle.getAttribute(dragHandle.draggableId);\n}\n\nfunction findDraggable(contextId, draggableId) {\n const selector = `[${draggable.contextId}=\"${contextId}\"]`;\n const possible = querySelectorAll(document, selector);\n const draggable$1 = possible.find(el => {\n return el.getAttribute(draggable.id) === draggableId;\n });\n if (!draggable$1) {\n return null;\n }\n if (!isHtmlElement(draggable$1)) {\n process.env.NODE_ENV !== \"production\" ? warning('Draggable element is not a HTMLElement') : void 0;\n return null;\n }\n return draggable$1;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n}\nfunction isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn\n}) {\n if (!isLockActive()) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The sensor no longer has an action lock.\n\n Tips:\n\n - Throw away your action handlers when forceStop() is called\n - Check actions.isActive() if you really need to\n `) : void 0;\n }\n return false;\n }\n if (expected !== phase) {\n if (shouldWarn) {\n process.env.NODE_ENV !== \"production\" ? warning(`\n Cannot perform action.\n The actions you used belong to an outdated phase\n\n Current phase: ${expected}\n You called an action from outdated phase: ${phase}\n\n Tips:\n\n - Do not use preDragActions actions after calling preDragActions.lift()\n `) : void 0;\n }\n return false;\n }\n return true;\n}\nfunction canStart({\n lockAPI,\n store,\n registry,\n draggableId\n}) {\n if (lockAPI.isClaimed()) {\n return false;\n }\n const entry = registry.draggable.findById(draggableId);\n if (!entry) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable with id: ${draggableId}`) : void 0;\n return false;\n }\n if (!entry.options.isEnabled) {\n return false;\n }\n if (!canStartDrag(store.getState(), draggableId)) {\n return false;\n }\n return true;\n}\nfunction tryStart({\n lockAPI,\n contextId,\n store,\n registry,\n draggableId,\n forceSensorStop,\n sourceEvent\n}) {\n const shouldStart = canStart({\n lockAPI,\n store,\n registry,\n draggableId\n });\n if (!shouldStart) {\n return null;\n }\n const entry = registry.draggable.getById(draggableId);\n const el = findDraggable(contextId, entry.descriptor.id);\n if (!el) {\n process.env.NODE_ENV !== \"production\" ? warning(`Unable to find draggable element with id: ${draggableId}`) : void 0;\n return null;\n }\n if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) {\n return null;\n }\n const lock = lockAPI.claim(forceSensorStop || noop$2);\n let phase = 'PRE_DRAG';\n function getShouldRespectForcePress() {\n return entry.options.shouldRespectForcePress;\n }\n function isLockActive() {\n return lockAPI.isActive(lock);\n }\n function tryDispatch(expected, getAction) {\n if (isActive({\n expected,\n phase,\n isLockActive,\n shouldWarn: true\n })) {\n store.dispatch(getAction());\n }\n }\n const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING');\n function lift(args) {\n function completed() {\n lockAPI.release();\n phase = 'COMPLETED';\n }\n if (phase !== 'PRE_DRAG') {\n completed();\n process.env.NODE_ENV !== \"production\" ? invariant(false, `Cannot lift in phase ${phase}`) : invariant() ;\n }\n store.dispatch(lift$1(args.liftActionArgs));\n phase = 'DRAGGING';\n function finish(reason, options = {\n shouldBlockNextClick: false\n }) {\n args.cleanup();\n if (options.shouldBlockNextClick) {\n const unbind = bindEvents(window, [{\n eventName: 'click',\n fn: preventDefault,\n options: {\n once: true,\n passive: false,\n capture: true\n }\n }]);\n setTimeout(unbind);\n }\n completed();\n store.dispatch(drop({\n reason\n }));\n }\n return {\n isActive: () => isActive({\n expected: 'DRAGGING',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n drop: options => finish('DROP', options),\n cancel: options => finish('CANCEL', options),\n ...args.actions\n };\n }\n function fluidLift(clientSelection) {\n const move$1 = rafSchd(client => {\n tryDispatchWhenDragging(() => move({\n client\n }));\n });\n const api = lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection,\n movementMode: 'FLUID'\n },\n cleanup: () => move$1.cancel(),\n actions: {\n move: move$1\n }\n });\n return {\n ...api,\n move: move$1\n };\n }\n function snapLift() {\n const actions = {\n moveUp: () => tryDispatchWhenDragging(moveUp),\n moveRight: () => tryDispatchWhenDragging(moveRight),\n moveDown: () => tryDispatchWhenDragging(moveDown),\n moveLeft: () => tryDispatchWhenDragging(moveLeft)\n };\n return lift({\n liftActionArgs: {\n id: draggableId,\n clientSelection: getBorderBoxCenterPosition(el),\n movementMode: 'SNAP'\n },\n cleanup: noop$2,\n actions\n });\n }\n function abortPreDrag() {\n const shouldRelease = isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: true\n });\n if (shouldRelease) {\n lockAPI.release();\n }\n }\n const preDrag = {\n isActive: () => isActive({\n expected: 'PRE_DRAG',\n phase,\n isLockActive,\n shouldWarn: false\n }),\n shouldRespectForcePress: getShouldRespectForcePress,\n fluidLift,\n snapLift,\n abort: abortPreDrag\n };\n return preDrag;\n}\nconst defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor];\nfunction useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors,\n enableDefaultSensors\n}) {\n const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])];\n const lockAPI = useState(() => create())[0];\n const tryAbandonLock = useCallback(function tryAbandonLock(previous, current) {\n if (isDragging(previous) && !isDragging(current)) {\n lockAPI.tryAbandon();\n }\n }, [lockAPI]);\n useIsomorphicLayoutEffect(function listenToStore() {\n let previous = store.getState();\n const unsubscribe = store.subscribe(() => {\n const current = store.getState();\n tryAbandonLock(previous, current);\n previous = current;\n });\n return unsubscribe;\n }, [lockAPI, store, tryAbandonLock]);\n useIsomorphicLayoutEffect(() => {\n return lockAPI.tryAbandon;\n }, [lockAPI.tryAbandon]);\n const canGetLock = useCallback(draggableId => {\n return canStart({\n lockAPI,\n registry,\n store,\n draggableId\n });\n }, [lockAPI, registry, store]);\n const tryGetLock = useCallback((draggableId, forceStop, options) => tryStart({\n lockAPI,\n registry,\n contextId,\n store,\n draggableId,\n forceSensorStop: forceStop || null,\n sourceEvent: options && options.sourceEvent ? options.sourceEvent : null\n }), [contextId, lockAPI, registry, store]);\n const findClosestDraggableId = useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]);\n const findOptionsForDraggable = useCallback(id => {\n const entry = registry.draggable.findById(id);\n return entry ? entry.options : null;\n }, [registry.draggable]);\n const tryReleaseLock = useCallback(function tryReleaseLock() {\n if (!lockAPI.isClaimed()) {\n return;\n }\n lockAPI.tryAbandon();\n if (store.getState().phase !== 'IDLE') {\n store.dispatch(flush());\n }\n }, [lockAPI, store]);\n const isLockClaimed = useCallback(() => lockAPI.isClaimed(), [lockAPI]);\n const api = useMemo(() => ({\n canGetLock,\n tryGetLock,\n findClosestDraggableId,\n findOptionsForDraggable,\n tryReleaseLock,\n isLockClaimed\n }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]);\n useValidateSensorHooks(useSensors);\n for (let i = 0; i < useSensors.length; i++) {\n useSensors[i](api);\n }\n}\n\nconst createResponders = props => ({\n onBeforeCapture: t => {\n const onBeforeCapureCallback = () => {\n if (props.onBeforeCapture) {\n props.onBeforeCapture(t);\n }\n };\n flushSync(onBeforeCapureCallback);\n },\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragEnd: props.onDragEnd,\n onDragUpdate: props.onDragUpdate\n});\nconst createAutoScrollerOptions = props => ({\n ...defaultAutoScrollerOptions,\n ...props.autoScrollerOptions,\n durationDampening: {\n ...defaultAutoScrollerOptions.durationDampening,\n ...props.autoScrollerOptions\n }\n});\nfunction getStore(lazyRef) {\n !lazyRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find store from lazy ref') : invariant() : void 0;\n return lazyRef.current;\n}\nfunction App(props) {\n const {\n contextId,\n setCallbacks,\n sensors,\n nonce,\n dragHandleUsageInstructions\n } = props;\n const lazyStoreRef = useRef(null);\n useStartupValidation();\n const lastPropsRef = usePrevious(props);\n const getResponders = useCallback(() => {\n return createResponders(lastPropsRef.current);\n }, [lastPropsRef]);\n const getAutoScrollerOptions = useCallback(() => {\n return createAutoScrollerOptions(lastPropsRef.current);\n }, [lastPropsRef]);\n const announce = useAnnouncer(contextId);\n const dragHandleUsageInstructionsId = useHiddenTextElement({\n contextId,\n text: dragHandleUsageInstructions\n });\n const styleMarshal = useStyleMarshal(contextId, nonce);\n const lazyDispatch = useCallback(action => {\n getStore(lazyStoreRef).dispatch(action);\n }, []);\n const marshalCallbacks = useMemo(() => bindActionCreators({\n publishWhileDragging,\n updateDroppableScroll,\n updateDroppableIsEnabled,\n updateDroppableIsCombineEnabled,\n collectionStarting\n }, lazyDispatch), [lazyDispatch]);\n const registry = useRegistry();\n const dimensionMarshal = useMemo(() => {\n return createDimensionMarshal(registry, marshalCallbacks);\n }, [registry, marshalCallbacks]);\n const autoScroller = useMemo(() => createAutoScroller({\n scrollWindow,\n scrollDroppable: dimensionMarshal.scrollDroppable,\n getAutoScrollerOptions,\n ...bindActionCreators({\n move\n }, lazyDispatch)\n }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]);\n const focusMarshal = useFocusMarshal(contextId);\n const store = useMemo(() => createStore({\n announce,\n autoScroller,\n dimensionMarshal,\n focusMarshal,\n getResponders,\n styleMarshal\n }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]);\n if (process.env.NODE_ENV !== 'production') {\n if (lazyStoreRef.current && lazyStoreRef.current !== store) {\n process.env.NODE_ENV !== \"production\" ? warning('unexpected store change') : void 0;\n }\n }\n lazyStoreRef.current = store;\n const tryResetStore = useCallback(() => {\n const current = getStore(lazyStoreRef);\n const state = current.getState();\n if (state.phase !== 'IDLE') {\n current.dispatch(flush());\n }\n }, []);\n const isDragging = useCallback(() => {\n const state = getStore(lazyStoreRef).getState();\n if (state.phase === 'DROP_ANIMATING') {\n return true;\n }\n if (state.phase === 'IDLE') {\n return false;\n }\n return state.isDragging;\n }, []);\n const appCallbacks = useMemo(() => ({\n isDragging,\n tryAbort: tryResetStore\n }), [isDragging, tryResetStore]);\n setCallbacks(appCallbacks);\n const getCanLift = useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []);\n const getIsMovementAllowed = useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []);\n const appContext = useMemo(() => ({\n marshal: dimensionMarshal,\n focus: focusMarshal,\n contextId,\n canLift: getCanLift,\n isMovementAllowed: getIsMovementAllowed,\n dragHandleUsageInstructionsId,\n registry\n }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]);\n useSensorMarshal({\n contextId,\n store,\n registry,\n customSensors: sensors || null,\n enableDefaultSensors: props.enableDefaultSensors !== false\n });\n useEffect(() => {\n return tryResetStore;\n }, [tryResetStore]);\n return React.createElement(AppContext.Provider, {\n value: appContext\n }, React.createElement(Provider, {\n context: StoreContext,\n store: store\n }, props.children));\n}\n\nfunction useUniqueContextId() {\n return React.useId();\n}\n\nfunction DragDropContext(props) {\n const contextId = useUniqueContextId();\n const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset.dragHandleUsageInstructions;\n return React.createElement(ErrorBoundary, null, setCallbacks => React.createElement(App, {\n nonce: props.nonce,\n contextId: contextId,\n setCallbacks: setCallbacks,\n dragHandleUsageInstructions: dragHandleUsageInstructions,\n enableDefaultSensors: props.enableDefaultSensors,\n sensors: props.sensors,\n onBeforeCapture: props.onBeforeCapture,\n onBeforeDragStart: props.onBeforeDragStart,\n onDragStart: props.onDragStart,\n onDragUpdate: props.onDragUpdate,\n onDragEnd: props.onDragEnd,\n autoScrollerOptions: props.autoScrollerOptions\n }, props.children));\n}\n\nconst zIndexOptions = {\n dragging: 5000,\n dropAnimating: 4500\n};\nconst getDraggingTransition = (shouldAnimateDragMovement, dropping) => {\n if (dropping) {\n return transitions.drop(dropping.duration);\n }\n if (shouldAnimateDragMovement) {\n return transitions.snap;\n }\n return transitions.fluid;\n};\nconst getDraggingOpacity = (isCombining, isDropAnimating) => {\n if (!isCombining) {\n return undefined;\n }\n return isDropAnimating ? combine.opacity.drop : combine.opacity.combining;\n};\nconst getShouldDraggingAnimate = dragging => {\n if (dragging.forceShouldAnimate != null) {\n return dragging.forceShouldAnimate;\n }\n return dragging.mode === 'SNAP';\n};\nfunction getDraggingStyle(dragging) {\n const dimension = dragging.dimension;\n const box = dimension.client;\n const {\n offset,\n combineWith,\n dropping\n } = dragging;\n const isCombining = Boolean(combineWith);\n const shouldAnimate = getShouldDraggingAnimate(dragging);\n const isDropAnimating = Boolean(dropping);\n const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset);\n const style = {\n position: 'fixed',\n top: box.marginBox.top,\n left: box.marginBox.left,\n boxSizing: 'border-box',\n width: box.borderBox.width,\n height: box.borderBox.height,\n transition: getDraggingTransition(shouldAnimate, dropping),\n transform,\n opacity: getDraggingOpacity(isCombining, isDropAnimating),\n zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging,\n pointerEvents: 'none'\n };\n return style;\n}\nfunction getSecondaryStyle(secondary) {\n return {\n transform: transforms.moveTo(secondary.offset),\n transition: secondary.shouldAnimateDisplacement ? undefined : 'none'\n };\n}\nfunction getStyle$1(mapped) {\n return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped);\n}\n\nfunction getDimension$1(descriptor, el, windowScroll = origin) {\n const computedStyles = window.getComputedStyle(el);\n const borderBox = el.getBoundingClientRect();\n const client = calculateBox(borderBox, computedStyles);\n const page = withScroll(client, windowScroll);\n const placeholder = {\n client,\n tagName: el.tagName.toLowerCase(),\n display: computedStyles.display\n };\n const displaceBy = {\n x: client.marginBox.width,\n y: client.marginBox.height\n };\n const dimension = {\n descriptor,\n placeholder,\n displaceBy,\n client,\n page\n };\n return dimension;\n}\n\nfunction useDraggablePublisher(args) {\n const uniqueId = useUniqueId('draggable');\n const {\n descriptor,\n registry,\n getDraggableRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n } = args;\n const options = useMemo(() => ({\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]);\n const getDimension = useCallback(windowScroll => {\n const el = getDraggableRef();\n !el ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot get dimension when no ref is set') : invariant() : void 0;\n return getDimension$1(descriptor, el, windowScroll);\n }, [descriptor, getDraggableRef]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n options,\n getDimension\n }), [descriptor, getDimension, options, uniqueId]);\n const publishedRef = useRef(entry);\n const isFirstPublishRef = useRef(true);\n useIsomorphicLayoutEffect(() => {\n registry.draggable.register(publishedRef.current);\n return () => registry.draggable.unregister(publishedRef.current);\n }, [registry.draggable]);\n useIsomorphicLayoutEffect(() => {\n if (isFirstPublishRef.current) {\n isFirstPublishRef.current = false;\n return;\n }\n const last = publishedRef.current;\n publishedRef.current = entry;\n registry.draggable.update(entry, last);\n }, [entry, registry.draggable]);\n}\n\nvar DroppableContext = React.createContext(null);\n\nfunction checkIsValidInnerRef(el) {\n !(el && isHtmlElement(el)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `\n provided.innerRef has not been provided with a HTMLElement.\n\n You can find a guide on using the innerRef callback functions at:\n https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md\n `) : invariant() : void 0;\n}\n\nfunction useValidation$1(props, contextId, getRef) {\n useDevSetupWarning(() => {\n function prefix(id) {\n return `Draggable[id: ${id}]: `;\n }\n const id = props.draggableId;\n !id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0;\n !(typeof id === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `Draggable requires a [string] draggableId.\n Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0;\n !Number.isInteger(props.index) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0;\n if (props.mapped.type === 'DRAGGING') {\n return;\n }\n checkIsValidInnerRef(getRef());\n if (props.isEnabled) {\n !findDragHandle(contextId, id) ? process.env.NODE_ENV !== \"production\" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0;\n }\n });\n}\nfunction useClonePropValidation(isClone) {\n useDev(() => {\n const initialRef = useRef(isClone);\n useDevSetupWarning(() => {\n !(isClone === initialRef.current) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0;\n }, [isClone]);\n });\n}\n\nfunction useRequiredContext(Context) {\n const result = useContext(Context);\n !result ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find required context') : invariant() : void 0;\n return result;\n}\n\nfunction preventHtml5Dnd(event) {\n event.preventDefault();\n}\nconst Draggable = props => {\n const ref = useRef(null);\n const setRef = useCallback((el = null) => {\n ref.current = el;\n }, []);\n const getRef = useCallback(() => ref.current, []);\n const {\n contextId,\n dragHandleUsageInstructionsId,\n registry\n } = useRequiredContext(AppContext);\n const {\n type,\n droppableId\n } = useRequiredContext(DroppableContext);\n const descriptor = useMemo(() => ({\n id: props.draggableId,\n index: props.index,\n type,\n droppableId\n }), [props.draggableId, props.index, type, droppableId]);\n const {\n children,\n draggableId,\n isEnabled,\n shouldRespectForcePress,\n canDragInteractiveElements,\n isClone,\n mapped,\n dropAnimationFinished: dropAnimationFinishedAction\n } = props;\n useValidation$1(props, contextId, getRef);\n useClonePropValidation(isClone);\n if (!isClone) {\n const forPublisher = useMemo(() => ({\n descriptor,\n registry,\n getDraggableRef: getRef,\n canDragInteractiveElements,\n shouldRespectForcePress,\n isEnabled\n }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]);\n useDraggablePublisher(forPublisher);\n }\n const dragHandleProps = useMemo(() => isEnabled ? {\n tabIndex: 0,\n role: 'button',\n 'aria-describedby': dragHandleUsageInstructionsId,\n 'data-rfd-drag-handle-draggable-id': draggableId,\n 'data-rfd-drag-handle-context-id': contextId,\n draggable: false,\n onDragStart: preventHtml5Dnd\n } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]);\n const onMoveEnd = useCallback(event => {\n if (mapped.type !== 'DRAGGING') {\n return;\n }\n if (!mapped.dropping) {\n return;\n }\n if (event.propertyName !== 'transform') {\n return;\n }\n flushSync(dropAnimationFinishedAction);\n }, [dropAnimationFinishedAction, mapped]);\n const provided = useMemo(() => {\n const style = getStyle$1(mapped);\n const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined;\n const result = {\n innerRef: setRef,\n draggableProps: {\n 'data-rfd-draggable-context-id': contextId,\n 'data-rfd-draggable-id': draggableId,\n style,\n onTransitionEnd\n },\n dragHandleProps\n };\n return result;\n }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]);\n const rubric = useMemo(() => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]);\n return React.createElement(React.Fragment, null, children(provided, mapped.snapshot, rubric));\n};\n\nvar isStrictEqual = (a, b) => a === b;\n\nvar whatIsDraggedOverFromResult = result => {\n const {\n combine,\n destination\n } = result;\n if (destination) {\n return destination.droppableId;\n }\n if (combine) {\n return combine.droppableId;\n }\n return null;\n};\n\nconst getCombineWithFromResult = result => {\n return result.combine ? result.combine.draggableId : null;\n};\nconst getCombineWithFromImpact = impact => {\n return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null;\n};\nfunction getDraggableSelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne((mode, isClone, draggingOver = null, combineWith = null, dropping = null) => ({\n isDragging: true,\n isClone,\n isDropAnimating: Boolean(dropping),\n dropAnimation: dropping,\n mode,\n draggingOver,\n combineWith,\n combineTargetFor: null\n }));\n const getMemoizedProps = memoizeOne((offset, mode, dimension, isClone, draggingOver = null, combineWith = null, forceShouldAnimate = null) => ({\n mapped: {\n type: 'DRAGGING',\n dropping: null,\n draggingOver,\n combineWith,\n mode,\n offset,\n dimension,\n forceShouldAnimate,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null)\n }\n }));\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id !== ownProps.draggableId) {\n return null;\n }\n const offset = state.current.client.offset;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const draggingOver = whatIsDraggedOver(state.impact);\n const combineWith = getCombineWithFromImpact(state.impact);\n const forceShouldAnimate = state.forceShouldAnimate;\n return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId !== ownProps.draggableId) {\n return null;\n }\n const isClone = ownProps.isClone;\n const dimension = state.dimensions.draggables[ownProps.draggableId];\n const result = completed.result;\n const mode = result.mode;\n const draggingOver = whatIsDraggedOverFromResult(result);\n const combineWith = getCombineWithFromResult(result);\n const duration = state.dropDuration;\n const dropping = {\n duration,\n curve: curves.drop,\n moveTo: state.newHomeClientOffset,\n opacity: combineWith ? combine.opacity.drop : null,\n scale: combineWith ? combine.scale.drop : null\n };\n return {\n mapped: {\n type: 'DRAGGING',\n offset: state.newHomeClientOffset,\n dimension,\n dropping,\n draggingOver,\n combineWith,\n mode,\n forceShouldAnimate: null,\n snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping)\n }\n };\n }\n return null;\n };\n return selector;\n}\nfunction getSecondarySnapshot(combineTargetFor = null) {\n return {\n isDragging: false,\n isDropAnimating: false,\n isClone: false,\n dropAnimation: null,\n mode: null,\n draggingOver: null,\n combineTargetFor,\n combineWith: null\n };\n}\nconst atRest = {\n mapped: {\n type: 'SECONDARY',\n offset: origin,\n combineTargetFor: null,\n shouldAnimateDisplacement: true,\n snapshot: getSecondarySnapshot(null)\n }\n};\nfunction getSecondarySelector() {\n const memoizedOffset = memoizeOne((x, y) => ({\n x,\n y\n }));\n const getMemoizedSnapshot = memoizeOne(getSecondarySnapshot);\n const getMemoizedProps = memoizeOne((offset, combineTargetFor = null, shouldAnimateDisplacement) => ({\n mapped: {\n type: 'SECONDARY',\n offset,\n combineTargetFor,\n shouldAnimateDisplacement,\n snapshot: getMemoizedSnapshot(combineTargetFor)\n }\n }));\n const getFallback = combineTargetFor => {\n return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null;\n };\n const getProps = (ownId, draggingId, impact, afterCritical) => {\n const visualDisplacement = impact.displaced.visible[ownId];\n const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]);\n const combine = tryGetCombine(impact);\n const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null;\n if (!visualDisplacement) {\n if (!isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n if (impact.displaced.invisible[ownId]) {\n return null;\n }\n const change = negate(afterCritical.displacedBy.point);\n const offset = memoizedOffset(change.x, change.y);\n return getMemoizedProps(offset, combineTargetFor, true);\n }\n if (isAfterCriticalInVirtualList) {\n return getFallback(combineTargetFor);\n }\n const displaceBy = impact.displacedBy.point;\n const offset = memoizedOffset(displaceBy.x, displaceBy.y);\n return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate);\n };\n const selector = (state, ownProps) => {\n if (isDragging(state)) {\n if (state.critical.draggable.id === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (completed.result.draggableId === ownProps.draggableId) {\n return null;\n }\n return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical);\n }\n return null;\n };\n return selector;\n}\nconst makeMapStateToProps$1 = () => {\n const draggingSelector = getDraggableSelector();\n const secondarySelector = getSecondarySelector();\n const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest;\n return selector;\n};\nconst mapDispatchToProps$1 = {\n dropAnimationFinished: dropAnimationFinished\n};\nconst ConnectedDraggable = connect(makeMapStateToProps$1, mapDispatchToProps$1, null, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Draggable);\n\nfunction PrivateDraggable(props) {\n const droppableContext = useRequiredContext(DroppableContext);\n const isUsingCloneFor = droppableContext.isUsingCloneFor;\n if (isUsingCloneFor === props.draggableId && !props.isClone) {\n return null;\n }\n return React.createElement(ConnectedDraggable, props);\n}\nfunction PublicDraggable(props) {\n const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true;\n const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking);\n const shouldRespectForcePress = Boolean(props.shouldRespectForcePress);\n return React.createElement(PrivateDraggable, _extends({}, props, {\n isClone: false,\n isEnabled: isEnabled,\n canDragInteractiveElements: canDragInteractiveElements,\n shouldRespectForcePress: shouldRespectForcePress\n }));\n}\n\nconst isEqual = base => value => base === value;\nconst isScroll = isEqual('scroll');\nconst isAuto = isEqual('auto');\nconst isVisible = isEqual('visible');\nconst isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY);\nconst isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY);\nconst isElementScrollable = el => {\n const style = window.getComputedStyle(el);\n const overflow = {\n overflowX: style.overflowX,\n overflowY: style.overflowY\n };\n return isEither(overflow, isScroll) || isEither(overflow, isAuto);\n};\nconst isBodyScrollable = () => {\n if (process.env.NODE_ENV === 'production') {\n return false;\n }\n const body = getBodyElement();\n const html = document.documentElement;\n !html ? process.env.NODE_ENV !== \"production\" ? invariant() : invariant() : void 0;\n if (!isElementScrollable(body)) {\n return false;\n }\n const htmlStyle = window.getComputedStyle(html);\n const htmlOverflow = {\n overflowX: htmlStyle.overflowX,\n overflowY: htmlStyle.overflowY\n };\n if (isBoth(htmlOverflow, isVisible)) {\n return false;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n We have detected that your <body> element might be a scroll container.\n We have found no reliable way of detecting whether the <body> element is a scroll container.\n Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement)\n\n Because we cannot determine if the <body> is a scroll container, and generally it is not one,\n we will be treating the <body> as *not* a scroll container\n\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md\n `) : void 0;\n return false;\n};\nconst getClosestScrollable = el => {\n if (el == null) {\n return null;\n }\n if (el === document.body) {\n return isBodyScrollable() ? el : null;\n }\n if (el === document.documentElement) {\n return null;\n }\n if (!isElementScrollable(el)) {\n return getClosestScrollable(el.parentElement);\n }\n return el;\n};\n\nvar checkForNestedScrollContainers = scrollable => {\n if (!scrollable) {\n return;\n }\n const anotherScrollParent = getClosestScrollable(scrollable.parentElement);\n if (!anotherScrollParent) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable: unsupported nested scroll container detected.\n A Droppable can only have one scroll parent (which can be itself)\n Nested scroll containers are currently not supported.\n\n We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131\n `) : void 0;\n};\n\nvar getScroll = el => ({\n x: el.scrollLeft,\n y: el.scrollTop\n});\n\nconst getIsFixed = el => {\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n if (style.position === 'fixed') {\n return true;\n }\n return getIsFixed(el.parentElement);\n};\nvar getEnv = start => {\n const closestScrollable = getClosestScrollable(start);\n const isFixedOnPage = getIsFixed(start);\n return {\n closestScrollable,\n isFixedOnPage\n };\n};\n\nvar getDroppableDimension = ({\n descriptor,\n isEnabled,\n isCombineEnabled,\n isFixedOnPage,\n direction,\n client,\n page,\n closest\n}) => {\n const frame = (() => {\n if (!closest) {\n return null;\n }\n const {\n scrollSize,\n client: frameClient\n } = closest;\n const maxScroll = getMaxScroll({\n scrollHeight: scrollSize.scrollHeight,\n scrollWidth: scrollSize.scrollWidth,\n height: frameClient.paddingBox.height,\n width: frameClient.paddingBox.width\n });\n return {\n pageMarginBox: closest.page.marginBox,\n frameClient,\n scrollSize,\n shouldClipSubject: closest.shouldClipSubject,\n scroll: {\n initial: closest.scroll,\n current: closest.scroll,\n max: maxScroll,\n diff: {\n value: origin,\n displacement: origin\n }\n }\n };\n })();\n const axis = direction === 'vertical' ? vertical : horizontal;\n const subject = getSubject({\n page,\n withPlaceholder: null,\n axis,\n frame\n });\n const dimension = {\n descriptor,\n isCombineEnabled,\n isFixedOnPage,\n axis,\n isEnabled,\n client,\n page,\n frame,\n subject\n };\n return dimension;\n};\n\nconst getClient = (targetRef, closestScrollable) => {\n const base = getBox(targetRef);\n if (!closestScrollable) {\n return base;\n }\n if (targetRef !== closestScrollable) {\n return base;\n }\n const top = base.paddingBox.top - closestScrollable.scrollTop;\n const left = base.paddingBox.left - closestScrollable.scrollLeft;\n const bottom = top + closestScrollable.scrollHeight;\n const right = left + closestScrollable.scrollWidth;\n const paddingBox = {\n top,\n right,\n bottom,\n left\n };\n const borderBox = expand(paddingBox, base.border);\n const client = createBox({\n borderBox,\n margin: base.margin,\n border: base.border,\n padding: base.padding\n });\n return client;\n};\nvar getDimension = ({\n ref,\n descriptor,\n env,\n windowScroll,\n direction,\n isDropDisabled,\n isCombineEnabled,\n shouldClipSubject\n}) => {\n const closestScrollable = env.closestScrollable;\n const client = getClient(ref, closestScrollable);\n const page = withScroll(client, windowScroll);\n const closest = (() => {\n if (!closestScrollable) {\n return null;\n }\n const frameClient = getBox(closestScrollable);\n const scrollSize = {\n scrollHeight: closestScrollable.scrollHeight,\n scrollWidth: closestScrollable.scrollWidth\n };\n return {\n client: frameClient,\n page: withScroll(frameClient, windowScroll),\n scroll: getScroll(closestScrollable),\n scrollSize,\n shouldClipSubject\n };\n })();\n const dimension = getDroppableDimension({\n descriptor,\n isEnabled: !isDropDisabled,\n isCombineEnabled,\n isFixedOnPage: env.isFixedOnPage,\n direction,\n client,\n page,\n closest\n });\n return dimension;\n};\n\nconst immediate = {\n passive: false\n};\nconst delayed = {\n passive: true\n};\nvar getListenerOptions = options => options.shouldPublishImmediately ? immediate : delayed;\n\nconst getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null;\nfunction useDroppablePublisher(args) {\n const whileDraggingRef = useRef(null);\n const appContext = useRequiredContext(AppContext);\n const uniqueId = useUniqueId('droppable');\n const {\n registry,\n marshal\n } = appContext;\n const previousRef = usePrevious(args);\n const descriptor = useMemo(() => ({\n id: args.droppableId,\n type: args.type,\n mode: args.mode\n }), [args.droppableId, args.mode, args.type]);\n const publishedDescriptorRef = useRef(descriptor);\n const memoizedUpdateScroll = useMemo(() => memoizeOne((x, y) => {\n !whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only update scroll when dragging') : invariant() : void 0;\n const scroll = {\n x,\n y\n };\n marshal.updateDroppableScroll(descriptor.id, scroll);\n }), [descriptor.id, marshal]);\n const getClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n if (!dragging || !dragging.env.closestScrollable) {\n return origin;\n }\n return getScroll(dragging.env.closestScrollable);\n }, []);\n const updateScroll = useCallback(() => {\n const scroll = getClosestScroll();\n memoizedUpdateScroll(scroll.x, scroll.y);\n }, [getClosestScroll, memoizedUpdateScroll]);\n const scheduleScrollUpdate = useMemo(() => rafSchd(updateScroll), [updateScroll]);\n const onClosestScroll = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find scroll options while scrolling') : invariant() : void 0;\n const options = dragging.scrollOptions;\n if (options.shouldPublishImmediately) {\n updateScroll();\n return;\n }\n scheduleScrollUpdate();\n }, [scheduleScrollUpdate, updateScroll]);\n const getDimensionAndWatchScroll = useCallback((windowScroll, options) => {\n !!whileDraggingRef.current ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : invariant() : void 0;\n const previous = previousRef.current;\n const ref = previous.getDroppableRef();\n !ref ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot collect without a droppable ref') : invariant() : void 0;\n const env = getEnv(ref);\n const dragging = {\n ref,\n descriptor,\n env,\n scrollOptions: options\n };\n whileDraggingRef.current = dragging;\n const dimension = getDimension({\n ref,\n descriptor,\n env,\n windowScroll,\n direction: previous.direction,\n isDropDisabled: previous.isDropDisabled,\n isCombineEnabled: previous.isCombineEnabled,\n shouldClipSubject: !previous.ignoreContainerClipping\n });\n const scrollable = env.closestScrollable;\n if (scrollable) {\n scrollable.setAttribute(scrollContainer.contextId, appContext.contextId);\n scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n if (process.env.NODE_ENV !== 'production') {\n checkForNestedScrollContainers(scrollable);\n }\n }\n return dimension;\n }, [appContext.contextId, descriptor, onClosestScroll, previousRef]);\n const getScrollWhileDragging = useCallback(() => {\n const dragging = whileDraggingRef.current;\n const closest = getClosestScrollableFromDrag(dragging);\n !(dragging && closest) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : invariant() : void 0;\n return getScroll(closest);\n }, []);\n const dragStopped = useCallback(() => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot stop drag when no active drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n whileDraggingRef.current = null;\n if (!closest) {\n return;\n }\n scheduleScrollUpdate.cancel();\n closest.removeAttribute(scrollContainer.contextId);\n closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions));\n }, [onClosestScroll, scheduleScrollUpdate]);\n const scroll = useCallback(change => {\n const dragging = whileDraggingRef.current;\n !dragging ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll when there is no drag') : invariant() : void 0;\n const closest = getClosestScrollableFromDrag(dragging);\n !closest ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : invariant() : void 0;\n closest.scrollTop += change.y;\n closest.scrollLeft += change.x;\n }, []);\n const callbacks = useMemo(() => {\n return {\n getDimensionAndWatchScroll,\n getScrollWhileDragging,\n dragStopped,\n scroll\n };\n }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]);\n const entry = useMemo(() => ({\n uniqueId,\n descriptor,\n callbacks\n }), [callbacks, descriptor, uniqueId]);\n useIsomorphicLayoutEffect(() => {\n publishedDescriptorRef.current = entry.descriptor;\n registry.droppable.register(entry);\n return () => {\n if (whileDraggingRef.current) {\n process.env.NODE_ENV !== \"production\" ? warning('Unsupported: changing the droppableId or type of a Droppable during a drag') : void 0;\n dragStopped();\n }\n registry.droppable.unregister(entry);\n };\n }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled);\n }, [args.isDropDisabled, marshal]);\n useIsomorphicLayoutEffect(() => {\n if (!whileDraggingRef.current) {\n return;\n }\n marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled);\n }, [args.isCombineEnabled, marshal]);\n}\n\nfunction noop() {}\nconst empty = {\n width: 0,\n height: 0,\n margin: noSpacing\n};\nconst getSize = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n if (isAnimatingOpenOnMount) {\n return empty;\n }\n if (animate === 'close') {\n return empty;\n }\n return {\n height: placeholder.client.borderBox.height,\n width: placeholder.client.borderBox.width,\n margin: placeholder.client.margin\n };\n};\nconst getStyle = ({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n}) => {\n const size = getSize({\n isAnimatingOpenOnMount,\n placeholder,\n animate\n });\n return {\n display: placeholder.display,\n boxSizing: 'border-box',\n width: size.width,\n height: size.height,\n marginTop: size.margin.top,\n marginRight: size.margin.right,\n marginBottom: size.margin.bottom,\n marginLeft: size.margin.left,\n flexShrink: '0',\n flexGrow: '0',\n pointerEvents: 'none',\n transition: animate !== 'none' ? transitions.placeholder : null\n };\n};\nconst Placeholder = props => {\n const animateOpenTimerRef = useRef(null);\n const tryClearAnimateOpenTimer = useCallback(() => {\n if (!animateOpenTimerRef.current) {\n return;\n }\n clearTimeout(animateOpenTimerRef.current);\n animateOpenTimerRef.current = null;\n }, []);\n const {\n animate,\n onTransitionEnd,\n onClose,\n contextId\n } = props;\n const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = useState(props.animate === 'open');\n useEffect(() => {\n if (!isAnimatingOpenOnMount) {\n return noop;\n }\n if (animate !== 'open') {\n tryClearAnimateOpenTimer();\n setIsAnimatingOpenOnMount(false);\n return noop;\n }\n if (animateOpenTimerRef.current) {\n return noop;\n }\n animateOpenTimerRef.current = setTimeout(() => {\n animateOpenTimerRef.current = null;\n setIsAnimatingOpenOnMount(false);\n });\n return tryClearAnimateOpenTimer;\n }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]);\n const onSizeChangeEnd = useCallback(event => {\n if (event.propertyName !== 'height') {\n return;\n }\n onTransitionEnd();\n if (animate === 'close') {\n onClose();\n }\n }, [animate, onClose, onTransitionEnd]);\n const style = getStyle({\n isAnimatingOpenOnMount,\n animate: props.animate,\n placeholder: props.placeholder\n });\n return React.createElement(props.placeholder.tagName, {\n style,\n 'data-rfd-placeholder-context-id': contextId,\n onTransitionEnd: onSizeChangeEnd,\n ref: props.innerRef\n });\n};\nvar Placeholder$1 = React.memo(Placeholder);\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\nfunction runChecks(args, checks) {\n checks.forEach(check => check(args));\n}\nconst shared = [function required({\n props\n}) {\n !props.droppableId ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'A Droppable requires a droppableId prop') : invariant() : void 0;\n !(typeof props.droppableId === 'string') ? process.env.NODE_ENV !== \"production\" ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : invariant() : void 0;\n}, function boolean({\n props\n}) {\n !isBoolean(props.isDropDisabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isDropDisabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.isCombineEnabled) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isCombineEnabled must be a boolean') : invariant() : void 0;\n !isBoolean(props.ignoreContainerClipping) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'ignoreContainerClipping must be a boolean') : invariant() : void 0;\n}, function ref({\n getDroppableRef\n}) {\n checkIsValidInnerRef(getDroppableRef());\n}];\nconst standard = [function placeholder({\n props,\n getPlaceholderRef\n}) {\n if (!props.placeholder) {\n return;\n }\n const ref = getPlaceholderRef();\n if (ref) {\n return;\n }\n process.env.NODE_ENV !== \"production\" ? warning(`\n Droppable setup issue [droppableId: \"${props.droppableId}\"]:\n DroppableProvided > placeholder could not be found.\n\n Please be sure to add the {provided.placeholder} React Node as a child of your Droppable.\n More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md\n `) : void 0;\n}];\nconst virtual = [function hasClone({\n props\n}) {\n !props.renderClone ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : invariant() : void 0;\n}, function hasNoPlaceholder({\n getPlaceholderRef\n}) {\n !!getPlaceholderRef() ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Expected virtual list to not have a placeholder') : invariant() : void 0;\n}];\nfunction useValidation(args) {\n useDevSetupWarning(() => {\n runChecks(args, shared);\n if (args.props.mode === 'standard') {\n runChecks(args, standard);\n }\n if (args.props.mode === 'virtual') {\n runChecks(args, virtual);\n }\n });\n}\n\nclass AnimateInOut extends React.PureComponent {\n constructor(...args) {\n super(...args);\n this.state = {\n isVisible: Boolean(this.props.on),\n data: this.props.on,\n animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none'\n };\n this.onClose = () => {\n if (this.state.animate !== 'close') {\n return;\n }\n this.setState({\n isVisible: false\n });\n };\n }\n static getDerivedStateFromProps(props, state) {\n if (!props.shouldAnimate) {\n return {\n isVisible: Boolean(props.on),\n data: props.on,\n animate: 'none'\n };\n }\n if (props.on) {\n return {\n isVisible: true,\n data: props.on,\n animate: 'open'\n };\n }\n if (state.isVisible) {\n return {\n isVisible: true,\n data: state.data,\n animate: 'close'\n };\n }\n return {\n isVisible: false,\n animate: 'close',\n data: null\n };\n }\n render() {\n if (!this.state.isVisible) {\n return null;\n }\n const provided = {\n onClose: this.onClose,\n data: this.state.data,\n animate: this.state.animate\n };\n return this.props.children(provided);\n }\n}\n\nconst Droppable = props => {\n const appContext = useContext(AppContext);\n !appContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Could not find app context') : invariant() : void 0;\n const {\n contextId,\n isMovementAllowed\n } = appContext;\n const droppableRef = useRef(null);\n const placeholderRef = useRef(null);\n const {\n children,\n droppableId,\n type,\n mode,\n direction,\n ignoreContainerClipping,\n isDropDisabled,\n isCombineEnabled,\n snapshot,\n useClone,\n updateViewportMaxScroll,\n getContainerForClone\n } = props;\n const getDroppableRef = useCallback(() => droppableRef.current, []);\n const setDroppableRef = useCallback((value = null) => {\n droppableRef.current = value;\n }, []);\n const getPlaceholderRef = useCallback(() => placeholderRef.current, []);\n const setPlaceholderRef = useCallback((value = null) => {\n placeholderRef.current = value;\n }, []);\n useValidation({\n props,\n getDroppableRef,\n getPlaceholderRef\n });\n const onPlaceholderTransitionEnd = useCallback(() => {\n if (isMovementAllowed()) {\n updateViewportMaxScroll({\n maxScroll: getMaxWindowScroll()\n });\n }\n }, [isMovementAllowed, updateViewportMaxScroll]);\n useDroppablePublisher({\n droppableId,\n type,\n mode,\n direction,\n isDropDisabled,\n isCombineEnabled,\n ignoreContainerClipping,\n getDroppableRef\n });\n const placeholder = useMemo(() => React.createElement(AnimateInOut, {\n on: props.placeholder,\n shouldAnimate: props.shouldAnimatePlaceholder\n }, ({\n onClose,\n data,\n animate\n }) => React.createElement(Placeholder$1, {\n placeholder: data,\n onClose: onClose,\n innerRef: setPlaceholderRef,\n animate: animate,\n contextId: contextId,\n onTransitionEnd: onPlaceholderTransitionEnd\n })), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]);\n const provided = useMemo(() => ({\n innerRef: setDroppableRef,\n placeholder,\n droppableProps: {\n 'data-rfd-droppable-id': droppableId,\n 'data-rfd-droppable-context-id': contextId\n }\n }), [contextId, droppableId, placeholder, setDroppableRef]);\n const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null;\n const droppableContext = useMemo(() => ({\n droppableId,\n type,\n isUsingCloneFor\n }), [droppableId, isUsingCloneFor, type]);\n function getClone() {\n if (!useClone) {\n return null;\n }\n const {\n dragging,\n render\n } = useClone;\n const node = React.createElement(PrivateDraggable, {\n draggableId: dragging.draggableId,\n index: dragging.source.index,\n isClone: true,\n isEnabled: true,\n shouldRespectForcePress: false,\n canDragInteractiveElements: true\n }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging));\n return ReactDOM.createPortal(node, getContainerForClone());\n }\n return React.createElement(DroppableContext.Provider, {\n value: droppableContext\n }, children(provided, snapshot), getClone());\n};\n\nfunction getBody() {\n !document.body ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'document.body is not ready') : invariant() : void 0;\n return document.body;\n}\nconst defaultProps = {\n mode: 'standard',\n type: 'DEFAULT',\n direction: 'vertical',\n isDropDisabled: false,\n isCombineEnabled: false,\n ignoreContainerClipping: false,\n renderClone: null,\n getContainerForClone: getBody\n};\nconst attachDefaultPropsToOwnProps = ownProps => {\n let mergedProps = {\n ...ownProps\n };\n let defaultPropKey;\n for (defaultPropKey in defaultProps) {\n if (ownProps[defaultPropKey] === undefined) {\n mergedProps = {\n ...mergedProps,\n [defaultPropKey]: defaultProps[defaultPropKey]\n };\n }\n }\n return mergedProps;\n};\nconst isMatchingType = (type, critical) => type === critical.droppable.type;\nconst getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id];\nconst makeMapStateToProps = () => {\n const idleWithAnimation = {\n placeholder: null,\n shouldAnimatePlaceholder: true,\n snapshot: {\n isDraggingOver: false,\n draggingOverWith: null,\n draggingFromThisWith: null,\n isUsingPlaceholder: false\n },\n useClone: null\n };\n const idleWithoutAnimation = {\n ...idleWithAnimation,\n shouldAnimatePlaceholder: false\n };\n const getDraggableRubric = memoizeOne(descriptor => ({\n draggableId: descriptor.id,\n type: descriptor.type,\n source: {\n index: descriptor.index,\n droppableId: descriptor.droppableId\n }\n }));\n const getMapProps = memoizeOne((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => {\n const draggableId = dragging.descriptor.id;\n const isHome = dragging.descriptor.droppableId === id;\n if (isHome) {\n const useClone = renderClone ? {\n render: renderClone,\n dragging: getDraggableRubric(dragging.descriptor)\n } : null;\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: isDraggingOverForConsumer ? draggableId : null,\n draggingFromThisWith: draggableId,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: false,\n snapshot,\n useClone\n };\n }\n if (!isEnabled) {\n return idleWithoutAnimation;\n }\n if (!isDraggingOverForImpact) {\n return idleWithAnimation;\n }\n const snapshot = {\n isDraggingOver: isDraggingOverForConsumer,\n draggingOverWith: draggableId,\n draggingFromThisWith: null,\n isUsingPlaceholder: true\n };\n return {\n placeholder: dragging.placeholder,\n shouldAnimatePlaceholder: true,\n snapshot,\n useClone: null\n };\n });\n const selector = (state, ownProps) => {\n const ownPropsWithDefaultProps = attachDefaultPropsToOwnProps(ownProps);\n const id = ownPropsWithDefaultProps.droppableId;\n const type = ownPropsWithDefaultProps.type;\n const isEnabled = !ownPropsWithDefaultProps.isDropDisabled;\n const renderClone = ownPropsWithDefaultProps.renderClone;\n if (isDragging(state)) {\n const critical = state.critical;\n if (!isMatchingType(type, critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(critical, state.dimensions);\n const isDraggingOver = whatIsDraggedOver(state.impact) === id;\n return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone);\n }\n if (state.phase === 'DROP_ANIMATING') {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const dragging = getDraggable(completed.critical, state.dimensions);\n return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone);\n }\n if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) {\n const completed = state.completed;\n if (!isMatchingType(type, completed.critical)) {\n return idleWithoutAnimation;\n }\n const wasOver = whatIsDraggedOver(completed.impact) === id;\n const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE');\n const isHome = completed.critical.droppable.id === id;\n if (wasOver) {\n return wasCombining ? idleWithAnimation : idleWithoutAnimation;\n }\n if (isHome) {\n return idleWithAnimation;\n }\n return idleWithoutAnimation;\n }\n return idleWithoutAnimation;\n };\n return selector;\n};\nconst mapDispatchToProps = {\n updateViewportMaxScroll: updateViewportMaxScroll\n};\nconst ConnectedDroppable = connect(makeMapStateToProps, mapDispatchToProps, (stateProps, dispatchProps, ownProps) => {\n return {\n ...attachDefaultPropsToOwnProps(ownProps),\n ...stateProps,\n ...dispatchProps\n };\n}, {\n context: StoreContext,\n areStatePropsEqual: isStrictEqual\n})(Droppable);\n\nexport { DragDropContext, PublicDraggable as Draggable, ConnectedDroppable as Droppable, useKeyboardSensor, useMouseSensor, useTouchSensor };\n","import { SxProps, Theme } from '@mui/material/styles';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nconst presenceColors: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'success.main',\n [PresenceStatusEnum.NotPresent]: 'error.main',\n [PresenceStatusEnum.PresentElsewhere]: 'warning.main',\n};\n\nexport const makePresenceIndicatorStyles = (status: PresenceStatusEnum): SxProps<Theme> => ({\n flexShrink: 0,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: presenceColors[status],\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n properties: {\n gap: (theme) => theme.spacing(0.5),\n },\n property: {\n marginLeft: (theme) => theme.spacing(2),\n },\n propertyLabel: {\n marginBottom: (theme) => theme.spacing(0.5),\n fontWeight: 'bold',\n },\n propertyValue: {\n fontSize: (theme) => theme.typography.pxToRem(14),\n color: 'text.primary',\n },\n checkedInValue: {\n fontSize: (theme) => theme.typography.pxToRem(14),\n fontWeight: 600,\n color: 'warning.main',\n },\n unplannedIndicator: {\n flexShrink: 0,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: 'success.main',\n },\n assignButton: {\n marginTop: (theme) => theme.spacing(2),\n },\n separator: {\n width: '100%',\n height: '1px',\n margin: (theme) => theme.spacing(1, 0),\n background: 'linear-gradient(90deg, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.05) 100%)',\n },\n};\n\nexport default styles;\n","import { SxProps, Theme } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nconst presenceColors: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'success.main',\n [PresenceStatusEnum.NotPresent]: 'error.main',\n [PresenceStatusEnum.PresentElsewhere]: 'warning.main',\n};\n\nexport const makeCardStyles = (dragging?: boolean, clickable = true): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n gap: (theme) => theme.spacing(1),\n cursor: clickable ? 'pointer' : 'default',\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid rgba(255, 255, 255, 0.15)',\n boxShadow: 'none',\n '&:last-of-type': {\n borderBottom: 'none',\n },\n ...(clickable && {\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n },\n }),\n ...(dragging && {\n opacity: 0.5,\n }),\n});\n\nexport const makePresenceDotStyles = (status: PresenceStatusEnum): SxProps<Theme> => ({\n flexShrink: 0,\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: presenceColors[status],\n});\n\nexport const unplannedDotStyles: SxProps<Theme> = {\n flexShrink: 0,\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: 'success.main',\n};\n\nconst styles: Record<string, SxProps<Theme>> = {\n name: {\n flexGrow: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n removeButton: {\n flexShrink: 0,\n opacity: 0.6,\n padding: (theme) => theme.spacing(0.25),\n marginLeft: 'auto',\n '&:hover': {\n opacity: 1,\n },\n },\n};\n\nexport default styles;\n","import { DropResult } from '@hello-pangea/dnd';\nimport { ListWorkplaceAssignments_WorkplaceWithAssignment, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { WidgetData } from '@/types';\n\nexport const presenceLabelKeys: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'presenceStatusPresent',\n [PresenceStatusEnum.NotPresent]: 'presenceStatusNotPresent',\n [PresenceStatusEnum.PresentElsewhere]: 'presenceStatusPresentElsewhere',\n};\n\ntype QueryWorkplace = ListWorkplaceAssignments_WorkplaceWithAssignment['workplace'];\n\nexport interface OperatorContext {\n presenceStatus?: PresenceStatusEnum;\n assignedWorkplaceName?: string;\n isUnplanned?: boolean;\n checkedInWorkplace?: QueryWorkplace;\n}\n\nexport const findOperatorContext = (data: WidgetData, userId: string): OperatorContext => {\n for (const wp of data.workplaces) {\n const assigned = wp.assignedOperators.find((op) => op.user.id === userId);\n if (assigned) {\n return {\n presenceStatus: assigned.presenceStatus,\n assignedWorkplaceName: wp.workplace.name,\n };\n }\n }\n\n for (const wp of data.workplaces) {\n const unplanned = wp.unplannedOperators.find((op) => op.user.id === userId && !op.plannedWorkplace);\n if (unplanned) {\n return {\n isUnplanned: true,\n checkedInWorkplace: wp.workplace,\n };\n }\n }\n\n return {};\n};\n\nconst UNPLANNED_PREFIX = 'unplanned:';\n\nexport const isUnplannedDraggableId = (draggableId: string): boolean => draggableId.startsWith(UNPLANNED_PREFIX);\n\nexport const extractUserId = (draggableId: string): string =>\n isUnplannedDraggableId(draggableId) ? draggableId.slice(UNPLANNED_PREFIX.length) : draggableId;\n\nexport const makeUnplannedDraggableId = (userId: string): string => `${UNPLANNED_PREFIX}${userId}`;\n\nexport const getUpdatedData = (\n data: WidgetData,\n result: DropResult,\n): Pick<WidgetData, 'workplaces' | 'unassignedOperators'> | null => {\n const { source, destination, draggableId } = result;\n\n if (!destination) return null;\n if (source.droppableId === destination.droppableId && source.index === destination.index) return null;\n\n const isUnplanned = isUnplannedDraggableId(draggableId);\n const userId = extractUserId(draggableId);\n const fromPool = source.droppableId === 'pool';\n const toPool = destination.droppableId === 'pool';\n\n if (isUnplanned && toPool) return null;\n\n let movedUser: { id: string; name: string } | undefined;\n let movedPresenceStatus = PresenceStatusEnum.NotPresent;\n\n const newUnassignedOperators = [...data.unassignedOperators];\n const newWorkplaces = data.workplaces.map((wp) => ({\n ...wp,\n assignedOperators: [...wp.assignedOperators],\n unplannedOperators: [...wp.unplannedOperators],\n }));\n\n if (isUnplanned) {\n const sourceWp = newWorkplaces.find((wp) => wp.workplace.id === source.droppableId);\n if (sourceWp) {\n const idx = sourceWp.unplannedOperators.findIndex((op) => op.user.id === userId);\n if (idx !== -1) {\n movedUser = sourceWp.unplannedOperators[idx].user;\n movedPresenceStatus = PresenceStatusEnum.PresentElsewhere;\n sourceWp.unplannedOperators.splice(idx, 1);\n }\n }\n const poolIdx = newUnassignedOperators.findIndex((op) => op.id === userId);\n if (poolIdx !== -1) {\n newUnassignedOperators.splice(poolIdx, 1);\n }\n } else if (fromPool) {\n const idx = newUnassignedOperators.findIndex((op) => op.id === userId);\n if (idx !== -1) {\n movedUser = newUnassignedOperators[idx];\n newUnassignedOperators.splice(idx, 1);\n }\n } else {\n const sourceWp = newWorkplaces.find((wp) => wp.workplace.id === source.droppableId);\n if (sourceWp) {\n const idx = sourceWp.assignedOperators.findIndex((op) => op.user.id === userId);\n if (idx !== -1) {\n movedUser = sourceWp.assignedOperators[idx].user;\n movedPresenceStatus = sourceWp.assignedOperators[idx].presenceStatus;\n sourceWp.assignedOperators.splice(idx, 1);\n sourceWp.assignedCount -= 1;\n }\n }\n }\n\n if (!movedUser) return null;\n\n if (toPool) {\n newUnassignedOperators.splice(destination.index, 0, movedUser);\n } else {\n const destWp = newWorkplaces.find((wp) => wp.workplace.id === destination.droppableId);\n if (destWp) {\n destWp.assignedOperators.splice(destination.index, 0, {\n user: movedUser,\n presenceStatus: movedPresenceStatus,\n });\n destWp.assignedCount += 1;\n }\n }\n\n return { workplaces: newWorkplaces, unassignedOperators: newUnassignedOperators };\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Button, CircularProgress, Stack, Typography } from '@mui/material';\nimport { GqlClients, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\n\nimport { ViewState, WidgetData } from '@/types';\n\nimport { findOperatorContext, presenceLabelKeys } from '../../helpers';\n\nimport styles, { makePresenceIndicatorStyles } from './styles';\n\ninterface MainContentProps {\n userId: string;\n data: WidgetData;\n gqlClients: GqlClients;\n viewState: ViewState;\n onAssignToWorkplace?: (userId: string, workplaceId: string) => void;\n}\n\nconst getPresenceLabel = (t: (key: string) => string, status?: PresenceStatusEnum): string => {\n if (!status) return t('unassignedOperator');\n return t(presenceLabelKeys[status]);\n};\n\nconst formatDuration = (startedAt: string): string => {\n const start = dayjs(startedAt);\n const now = dayjs();\n const totalMinutes = now.diff(start, 'minute');\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n return `${minutes}m`;\n};\n\nconst MainContent: React.FC<MainContentProps> = ({ userId, data, gqlClients, viewState, onAssignToWorkplace }) => {\n const { t } = useTranslation();\n const [checkedInAt, setCheckedInAt] = useState<string | null>(null);\n const [checkedInWorkplaceName, setCheckedInWorkplaceName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const context = findOperatorContext(data, userId);\n const isPresent =\n context.isUnplanned ||\n context.presenceStatus === PresenceStatusEnum.Present ||\n context.presenceStatus === PresenceStatusEnum.PresentElsewhere;\n\n const handleAssignHere = () => {\n if (!context.checkedInWorkplace || !onAssignToWorkplace) return;\n onAssignToWorkplace(userId, context.checkedInWorkplace.id);\n };\n\n useEffect(() => {\n if (!isPresent || !gqlClients.graphqlSdk) return;\n\n setIsLoading(true);\n void gqlClients.graphqlSdk\n .usersPresences({\n filter: {\n user_id_eq: userId,\n shift_id_eq: viewState.shift.id,\n finished_at_null: 'true',\n },\n })\n .then(({ usersPresences }) => {\n if (usersPresences.length > 0) {\n const latest = usersPresences[usersPresences.length - 1];\n setCheckedInAt(latest.startedAt);\n const wp = data.workplaces.find((w) => w.workplace.id === latest.workplaceId);\n if (wp) {\n setCheckedInWorkplaceName(wp.workplace.name);\n }\n }\n return undefined;\n })\n .catch(() => undefined)\n .finally(() => setIsLoading(false));\n }, [userId, isPresent, gqlClients.graphqlSdk, viewState.shift.id, data.workplaces]);\n\n return (\n <Stack sx={styles.properties}>\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('presenceStatus')}</Typography>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {context.isUnplanned && <Box title={t('checkedInUnassigned')} sx={styles.unplannedIndicator} />}\n {!context.isUnplanned && context.presenceStatus && (\n <Box\n title={t(presenceLabelKeys[context.presenceStatus])}\n sx={makePresenceIndicatorStyles(context.presenceStatus)}\n />\n )}\n <Typography sx={styles.propertyValue}>\n {context.isUnplanned ? t('checkedInUnassigned') : getPresenceLabel(t, context.presenceStatus)}\n </Typography>\n </Stack>\n </Box>\n\n {context.isUnplanned && context.checkedInWorkplace && (\n <React.Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('checkedInLocation')}</Typography>\n <Typography sx={styles.propertyValue}>{context.checkedInWorkplace.name}</Typography>\n </Box>\n </React.Fragment>\n )}\n\n {context.assignedWorkplaceName && (\n <React.Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('assignedWorkplace')}</Typography>\n <Typography sx={styles.propertyValue}>{context.assignedWorkplaceName}</Typography>\n </Box>\n </React.Fragment>\n )}\n\n {isLoading && (\n <React.Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property} display=\"flex\" justifyContent=\"center\" mt={2}>\n <CircularProgress size={16} />\n </Box>\n </React.Fragment>\n )}\n\n {!isLoading && checkedInAt && (\n <React.Fragment>\n {context.presenceStatus === PresenceStatusEnum.PresentElsewhere && checkedInWorkplaceName && (\n <React.Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('checkedInLocation')}</Typography>\n <Typography sx={styles.checkedInValue}>{checkedInWorkplaceName}</Typography>\n </Box>\n </React.Fragment>\n )}\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('checkedInTime')}</Typography>\n <Typography sx={styles.propertyValue}>{dayjs(checkedInAt).format('HH:mm')}</Typography>\n </Box>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('workingFor')}</Typography>\n <Typography sx={styles.propertyValue}>{formatDuration(checkedInAt)}</Typography>\n </Box>\n </React.Fragment>\n )}\n {context.isUnplanned && context.checkedInWorkplace && (\n <React.Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property} display=\"flex\" justifyContent=\"flex-end\">\n <Button variant=\"contained\" size=\"small\" color=\"info\" sx={styles.assignButton} onClick={handleAssignHere}>\n {t('assignHere')}\n </Button>\n </Box>\n </React.Fragment>\n )}\n </Stack>\n );\n};\n\nexport default MainContent;\n","import React from 'react';\n\nimport { Droppable, DroppableProps, DroppableProvided } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\n\nimport { makeDropZoneStyles } from './styles';\n\ninterface DropZoneProps {\n droppableId: string;\n children: (provided: DroppableProvided) => React.ReactNode;\n renderClone?: DroppableProps['renderClone'];\n}\n\nconst DropZone: React.FC<DropZoneProps> = ({ droppableId, children, renderClone }) => (\n <Droppable droppableId={droppableId} renderClone={renderClone}>\n {(provided, snapshot) => (\n <Box ref={provided.innerRef} {...provided.droppableProps} sx={makeDropZoneStyles(snapshot.isDraggingOver)}>\n {children(provided)}\n {provided.placeholder}\n </Box>\n )}\n </Droppable>\n);\n\nexport default DropZone;\n","import { SxProps, Theme } from '@mui/material';\n\nexport const makeDropZoneStyles = (isDraggingOver: boolean): SxProps<Theme> => ({\n height: '100%',\n transition: 'background-color 0.2s ease',\n backgroundColor: isDraggingOver ? 'rgba(0,0,0,0.1)' : 'transparent',\n});\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Draggable, DraggableProvided } from '@hello-pangea/dnd';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { Box, Card, IconButton, Typography } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { OperatorUser } from '@/types';\n\nimport { presenceLabelKeys } from '../helpers';\n\nimport styles, { makeCardStyles, makePresenceDotStyles, unplannedDotStyles } from './styles';\n\ninterface OperatorCardProps {\n user: OperatorUser;\n index: number;\n draggableId: string;\n showPresence?: boolean;\n presenceStatus?: PresenceStatusEnum;\n isUnplanned?: boolean;\n onClick?: () => void;\n onRemove?: () => void;\n}\n\ninterface DraggingOperatorCardProps {\n provided: DraggableProvided;\n user: OperatorUser;\n}\n\nexport const DraggingOperatorCard: React.FC<DraggingOperatorCardProps> = ({ provided, user }) => (\n <Card ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} sx={makeCardStyles(true)}>\n <Typography sx={styles.name}>{user.name}</Typography>\n </Card>\n);\n\nconst OperatorCard: React.FC<OperatorCardProps> = ({\n user,\n index,\n draggableId,\n showPresence,\n presenceStatus,\n isUnplanned,\n onClick,\n onRemove,\n}) => {\n const { t } = useTranslation();\n\n return (\n <Draggable draggableId={draggableId} index={index}>\n {(provided, snapshot) => (\n <Card\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n sx={makeCardStyles(snapshot.isDragging, !!onClick)}\n onClick={() => {\n if (!snapshot.isDragging && onClick) {\n onClick();\n }\n }}\n >\n {isUnplanned && <Box title={t('checkedInUnassigned')} sx={unplannedDotStyles} />}\n {!isUnplanned && showPresence && presenceStatus && (\n <Box title={t(presenceLabelKeys[presenceStatus])} sx={makePresenceDotStyles(presenceStatus)} />\n )}\n <Typography title={user.name} sx={styles.name}>\n {user.name}\n </Typography>\n {onRemove && (\n <IconButton\n title={t('removeOperator')}\n size=\"small\"\n color=\"error\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n sx={styles.removeButton}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Card>\n )}\n </Draggable>\n );\n};\n\nexport default OperatorCard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: 250,\n height: '100%',\n },\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n search: {\n margin: (theme) => theme.spacing(0, 1, 1, 1),\n '&.MuiFormControl-root': {\n margin: 0,\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n '& .MuiInputAdornment-root': {\n color: 'text.primary',\n },\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n overflow: 'auto',\n },\n};\n\nexport default styles;\n","import React, { useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Card, CardContent, CardHeader, InputAdornment, TextField } from '@mui/material';\n\nimport { OperatorUser } from '@/types';\n\nimport DropZone from '../DropZone';\nimport OperatorCard, { DraggingOperatorCard } from '../OperatorCard';\n\nimport styles from './styles';\n\ninterface PoolColumnProps {\n operators: OperatorUser[];\n unplannedUserIds?: Set<string>;\n onOperatorClick?: (userId: string, userName: string) => void;\n}\n\nconst PoolColumn: React.FC<PoolColumnProps> = ({ operators, unplannedUserIds, onOperatorClick }) => {\n const [searchQuery, setSearchQuery] = useState('');\n const { t } = useTranslation();\n\n const poolOperators = useMemo(\n () => (unplannedUserIds ? operators.filter((user) => !unplannedUserIds.has(user.id)) : operators),\n [operators, unplannedUserIds],\n );\n\n const filteredOperators = useMemo(() => {\n if (!searchQuery.trim()) return poolOperators;\n const query = searchQuery.toLowerCase();\n return poolOperators.filter((user) =>\n user.name\n .toLowerCase()\n .split(' ')\n .some((part) => part.startsWith(query)),\n );\n }, [poolOperators, searchQuery]);\n\n return (\n <Card sx={styles.root}>\n <CardHeader\n title={t('unassignedPool')}\n action={poolOperators.length}\n slotProps={{ title: { variant: 'subtitle1' }, action: { sx: styles.action } }}\n sx={styles.header}\n />\n <TextField\n size=\"small\"\n label={t('searchOperators')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n sx={styles.search}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n />\n <CardContent sx={styles.content}>\n <DropZone\n droppableId=\"pool\"\n renderClone={(provided, _, rubric) => (\n <DraggingOperatorCard provided={provided} user={filteredOperators[rubric.source.index]} />\n )}\n >\n {() => (\n <React.Fragment>\n {filteredOperators.map((user, index) => (\n <OperatorCard\n key={user.id}\n user={user}\n index={index}\n draggableId={user.id}\n onClick={onOperatorClick ? () => onOperatorClick(user.id, user.name) : undefined}\n />\n ))}\n </React.Fragment>\n )}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default PoolColumn;\n","import { SxProps, Theme } from '@mui/material';\n\ntype BorderStatus = 'normal' | 'overcapacity' | 'unplanned';\n\nconst borderConfig: Record<\n Exclude<BorderStatus, 'normal'>,\n { borderColor: string; labelColor: string; labelBg: string }\n> = {\n overcapacity: { borderColor: 'error.main', labelColor: 'error.contrastText', labelBg: 'error.main' },\n unplanned: { borderColor: 'warning.main', labelColor: 'warning.contrastText', labelBg: 'warning.main' },\n};\n\nexport const makeRootStyles = (\n borderStatus: BorderStatus,\n frozenHeight?: number,\n borderLabel?: string,\n): SxProps<Theme> => ({\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n position: 'relative',\n width: 250,\n minHeight: 200,\n border: borderStatus !== 'normal' ? 2 : 1,\n borderColor: borderStatus !== 'normal' ? borderConfig[borderStatus].borderColor : 'divider',\n ...(borderStatus !== 'normal' && {\n '&::after': {\n content: `\"${borderLabel}\"`,\n position: 'absolute',\n bottom: -2,\n left: -2,\n padding: (theme: Theme) => theme.spacing(0.25, 0.75),\n fontSize: (theme: Theme) => theme.typography.pxToRem(10),\n color: borderConfig[borderStatus].labelColor,\n backgroundColor: borderConfig[borderStatus].labelBg,\n borderRadius: '0 4px 0 0',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.3)',\n pointerEvents: 'none',\n },\n }),\n ...(frozenHeight !== undefined && {\n overflow: 'hidden',\n maxHeight: frozenHeight,\n }),\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n '& .MuiCardHeader-content': {\n overflowX: 'hidden',\n },\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n gap: (theme) => theme.spacing(1),\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n },\n unplannedLabel: {\n display: 'block',\n margin: (theme) => theme.spacing(1, 0),\n padding: (theme) => theme.spacing(0, 0.5),\n color: 'text.primary',\n opacity: 0.7,\n textAlign: 'center',\n },\n unplannedSeparator: {\n height: '1px',\n backgroundColor: 'text.primary',\n opacity: 0.3,\n },\n};\n\nconst badgeColors: Record<string, { color: string; backgroundColor: string }> = {\n ok: { color: 'success.contrastText', backgroundColor: 'success.main' },\n missing: { color: 'error.contrastText', backgroundColor: 'error.main' },\n overcapacity: { color: 'error.contrastText', backgroundColor: 'error.main' },\n warning: { color: 'warning.contrastText', backgroundColor: 'warning.main' },\n};\n\nexport const makeStatusBadgeStyles = (status: 'missing' | 'overcapacity' | 'ok' | 'warning'): SxProps<Theme> => ({\n padding: (theme) => `${theme.spacing(0.25)} ${theme.spacing(1)}`,\n borderRadius: 1,\n ...badgeColors[status],\n});\n\nexport default styles;\n","import React, { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Card, CardContent, CardHeader, Typography } from '@mui/material';\nimport { ListWorkplaceAssignments_WorkplaceWithAssignment, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { ViewState } from '@/types';\n\nimport DropZone from '../DropZone';\nimport { makeUnplannedDraggableId } from '../helpers';\nimport OperatorCard, { DraggingOperatorCard } from '../OperatorCard';\n\nimport styles, { makeRootStyles, makeStatusBadgeStyles } from './styles';\n\nconst getStatusBadge = (assignment: ListWorkplaceAssignments_WorkplaceWithAssignment, unplannedCount: number) => {\n const presentCount = assignment.assignedOperators.filter(\n (op) => op.presenceStatus === PresenceStatusEnum.Present,\n ).length;\n const checkedInHereCount = presentCount + unplannedCount;\n\n if (checkedInHereCount > assignment.recommendedOperators) {\n const diff = checkedInHereCount - assignment.recommendedOperators;\n return { text: `+${diff}`, status: 'overcapacity' as const, titleKey: 'statusOvercapacity', checkedInHereCount };\n }\n if (checkedInHereCount < assignment.recommendedOperators) {\n const diff = checkedInHereCount - assignment.recommendedOperators;\n return { text: `${diff}`, status: 'missing' as const, titleKey: 'statusMissing', checkedInHereCount };\n }\n if (unplannedCount === 0) {\n return { text: 'OK', status: 'ok' as const, titleKey: 'statusOk', checkedInHereCount };\n }\n return { text: 'OK', status: 'warning' as const, titleKey: 'statusUnplanned', checkedInHereCount };\n};\n\nconst getPlanningBadge = (assignment: ListWorkplaceAssignments_WorkplaceWithAssignment) => {\n const diff = assignment.assignedCount - assignment.recommendedOperators;\n if (diff > 0) {\n return { text: `+${diff}`, status: 'overcapacity' as const, titleKey: 'statusOvercapacity' };\n }\n if (diff < 0) {\n return { text: `${diff}`, status: 'missing' as const, titleKey: 'statusMissing' };\n }\n return { text: 'OK', status: 'ok' as const, titleKey: 'statusOk' };\n};\n\ninterface WorkplaceColumnProps {\n assignment: ListWorkplaceAssignments_WorkplaceWithAssignment;\n viewState: ViewState;\n registerRef?: (el: HTMLDivElement | null) => void;\n frozenHeight?: number;\n onOperatorClick?: (userId: string, userName: string) => void;\n onRemoveOperator?: (userId: string) => void;\n}\n\nconst WorkplaceColumn: React.FC<WorkplaceColumnProps> = ({\n assignment,\n viewState,\n registerRef,\n frozenHeight,\n onOperatorClick,\n onRemoveOperator,\n}) => {\n const { t } = useTranslation();\n const { isCurrentShift } = viewState;\n\n const sortedOperators = useMemo(\n () => [...assignment.assignedOperators].sort((a, b) => a.user.name.localeCompare(b.user.name, undefined, { numeric: true })),\n [assignment.assignedOperators],\n );\n\n const sortedUnplanned = useMemo(\n () =>\n isCurrentShift\n ? assignment.unplannedOperators\n .filter((op) => !op.plannedWorkplace)\n .sort((a, b) => a.user.name.localeCompare(b.user.name, undefined, { numeric: true }))\n : [],\n [assignment.unplannedOperators, isCurrentShift],\n );\n\n const { localOperators, elsewhereOperators } = useMemo(() => {\n if (!isCurrentShift) {\n return { localOperators: sortedOperators, elsewhereOperators: [] };\n }\n return {\n localOperators: sortedOperators.filter((op) => op.presenceStatus !== PresenceStatusEnum.PresentElsewhere),\n elsewhereOperators: sortedOperators.filter((op) => op.presenceStatus === PresenceStatusEnum.PresentElsewhere),\n };\n }, [sortedOperators, isCurrentShift]);\n\n const badge = isCurrentShift ? getStatusBadge(assignment, sortedUnplanned.length) : null;\n const planningBadge = !isCurrentShift ? getPlanningBadge(assignment) : null;\n const activeBadge = badge || planningBadge!;\n\n const isOvercapacity = isCurrentShift\n ? assignment.assignedCount > assignment.recommendedOperators ||\n (badge?.checkedInHereCount ?? 0) > assignment.recommendedOperators\n : assignment.assignedCount > assignment.recommendedOperators;\n\n const getBorderStatus = () => {\n if (isOvercapacity) return { status: 'overcapacity' as const, label: t('overcapacity') };\n if (isCurrentShift && sortedUnplanned.length > 0)\n return { status: 'unplanned' as const, label: t('unplannedStaffing') };\n return { status: 'normal' as const, label: '' };\n };\n const border = getBorderStatus();\n\n const displayCount = badge ? badge.checkedInHereCount : assignment.assignedCount;\n\n return (\n <Card ref={registerRef} sx={makeRootStyles(border.status, frozenHeight, border.label)}>\n <CardHeader\n title={assignment.workplace.name}\n action={\n <React.Fragment>\n <Typography>{`${displayCount}/${assignment.recommendedOperators}`}</Typography>\n <Typography\n title={t(activeBadge.titleKey)}\n variant=\"caption\"\n sx={makeStatusBadgeStyles(activeBadge.status)}\n >\n {activeBadge.text}\n </Typography>\n </React.Fragment>\n }\n slotProps={{\n title: { variant: 'subtitle1', title: assignment.workplace.name, sx: styles.title },\n action: { sx: styles.action },\n }}\n sx={styles.header}\n />\n <CardContent sx={styles.content}>\n <DropZone\n droppableId={assignment.workplace.id}\n renderClone={(provided, _, rubric) => {\n const idx = rubric.source.index;\n const assignedCount = localOperators.length + elsewhereOperators.length;\n let user;\n if (idx < localOperators.length) {\n user = localOperators[idx]?.user;\n } else if (idx < assignedCount) {\n user = elsewhereOperators[idx - localOperators.length]?.user;\n } else {\n user = sortedUnplanned[idx - assignedCount]?.user;\n }\n if (!user) return <Card ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} />;\n return <DraggingOperatorCard provided={provided} user={user} />;\n }}\n >\n {() => {\n const elsewhereOffset = localOperators.length;\n const unplannedOffset = elsewhereOffset + elsewhereOperators.length;\n return (\n <React.Fragment>\n {localOperators.map((operator, index) => (\n <OperatorCard\n key={operator.user.id}\n user={operator.user}\n index={index}\n draggableId={operator.user.id}\n showPresence={isCurrentShift}\n presenceStatus={operator.presenceStatus}\n onClick={onOperatorClick ? () => onOperatorClick(operator.user.id, operator.user.name) : undefined}\n onRemove={onRemoveOperator ? () => onRemoveOperator(operator.user.id) : undefined}\n />\n ))}\n {elsewhereOperators.length > 0 && (\n <React.Fragment>\n <Typography variant=\"caption\" sx={styles.unplannedLabel}>\n {t('presentElsewhereLabel')}\n </Typography>\n <Box sx={styles.unplannedSeparator} />\n </React.Fragment>\n )}\n {elsewhereOperators.map((operator, index) => (\n <OperatorCard\n key={operator.user.id}\n user={operator.user}\n index={elsewhereOffset + index}\n draggableId={operator.user.id}\n showPresence\n presenceStatus={operator.presenceStatus}\n onClick={onOperatorClick ? () => onOperatorClick(operator.user.id, operator.user.name) : undefined}\n onRemove={onRemoveOperator ? () => onRemoveOperator(operator.user.id) : undefined}\n />\n ))}\n {sortedUnplanned.length > 0 && (\n <React.Fragment>\n <Typography variant=\"caption\" sx={styles.unplannedLabel}>\n {t('unplannedSectionLabel')}\n </Typography>\n <Box sx={styles.unplannedSeparator} />\n </React.Fragment>\n )}\n {sortedUnplanned.map((unplanned, index) => (\n <OperatorCard\n key={unplanned.user.id}\n user={unplanned.user}\n index={unplannedOffset + index}\n draggableId={makeUnplannedDraggableId(unplanned.user.id)}\n isUnplanned\n onClick={\n onOperatorClick ? () => onOperatorClick(unplanned.user.id, unplanned.user.name) : undefined\n }\n />\n ))}\n </React.Fragment>\n );\n }}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default WorkplaceColumn;\n","import { Theme } from '@mui/material';\n\nconst styles = {\n grid: (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignContent: 'flex-start',\n gap: theme.spacing(1),\n height: '100%',\n overflowX: 'auto',\n }),\n};\n\nexport default styles;\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { DragDropContext, DragStart, DropResult } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\nimport { GqlClients, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\nimport { SidePanelProps } from 'andoncloud-sdk';\n\nimport { ViewState, WidgetData } from '@/types';\nimport { extractDate } from '@/utils/state';\n\nimport MainContent from './OperatorCard/SidePanel/MainContent';\nimport { extractUserId, getUpdatedData } from './helpers';\nimport PoolColumn from './PoolColumn';\nimport WorkplaceColumn from './WorkplaceColumn';\n\nimport styles from './styles';\n\ninterface AssignmentBoardProps {\n data: WidgetData;\n viewState: ViewState;\n gqlClients: GqlClients;\n updateData: (data: Partial<WidgetData>) => void;\n updateSidePanelProps: (props: Partial<SidePanelProps>) => void;\n refetchAssignments: () => void;\n}\n\nconst AssignmentBoard: React.FC<AssignmentBoardProps> = ({\n data,\n viewState,\n gqlClients,\n updateData,\n updateSidePanelProps,\n refetchAssignments,\n}) => {\n const { graphqlSdk } = gqlClients;\n const [frozenHeights, setFrozenHeights] = useState<Record<string, number>>({});\n\n // Refs to workplace column DOM elements for freezing heights during drag\n const columnRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n // Ref to access latest data in async callbacks (avoids stale closures)\n const dataRef = useRef(data);\n dataRef.current = data;\n\n const unplannedUserIds = useMemo(() => {\n const ids = new Set<string>();\n for (const wp of data.workplaces) {\n for (const op of wp.unplannedOperators) {\n ids.add(op.user.id);\n }\n }\n return ids;\n }, [data.workplaces]);\n\n const registerColumnRef = useCallback((id: string, el: HTMLDivElement | null) => {\n columnRefs.current[id] = el;\n }, []);\n\n const handleDragStart = useCallback((_: DragStart) => {\n const heights: Record<string, number> = {};\n Object.entries(columnRefs.current).forEach(([id, el]) => {\n if (el) {\n heights[id] = el.getBoundingClientRect().height;\n }\n });\n setFrozenHeights(heights);\n }, []);\n\n const handleRemoveOperator = useCallback(\n (userId: string, workplaceId: string) => {\n if (!graphqlSdk) return;\n\n const workplace = data.workplaces.find((w) => w.workplace.id === workplaceId);\n const operator = workplace?.assignedOperators.find((o) => o.user.id === userId);\n if (!workplace || !operator) return;\n\n updateData({\n workplaces: data.workplaces.map((w) =>\n w.workplace.id === workplaceId\n ? {\n ...w,\n assignedOperators: w.assignedOperators.filter((o) => o.user.id !== userId),\n assignedCount: w.assignedCount - 1,\n }\n : w,\n ),\n unassignedOperators: [operator.user, ...data.unassignedOperators],\n });\n\n graphqlSdk\n .unassignOperator({\n input: {\n userId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .catch(() => {});\n },\n [graphqlSdk, data, viewState, updateData],\n );\n\n const handleAssignUnplanned = useCallback(\n (userId: string, workplaceId: string) => {\n if (!graphqlSdk) return;\n\n updateData({\n workplaces: data.workplaces.map((w) => {\n const isTarget = w.workplace.id === workplaceId;\n const unplanned = w.unplannedOperators.find((op) => op.user.id === userId);\n return {\n ...w,\n unplannedOperators: w.unplannedOperators.filter((op) => op.user.id !== userId),\n ...(isTarget && unplanned\n ? {\n assignedOperators: [\n ...w.assignedOperators,\n { user: unplanned.user, presenceStatus: PresenceStatusEnum.Present },\n ].sort((a, b) => a.user.name.localeCompare(b.user.name, undefined, { numeric: true })),\n assignedCount: w.assignedCount + 1,\n }\n : {}),\n };\n }),\n unassignedOperators: data.unassignedOperators.filter((op) => op.id !== userId),\n });\n\n updateSidePanelProps({ open: false });\n\n graphqlSdk\n .assignOperator({\n input: {\n userId,\n workplaceId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .then(refetchAssignments)\n .catch(() => {});\n },\n [graphqlSdk, data, viewState, updateData, updateSidePanelProps, refetchAssignments],\n );\n\n const handleOperatorClick = useCallback(\n (userId: string, userName: string) => {\n updateSidePanelProps({\n open: true,\n title: userName,\n width: '25%',\n mainContent: (\n <MainContent\n userId={userId}\n data={data}\n gqlClients={gqlClients}\n viewState={viewState}\n onAssignToWorkplace={handleAssignUnplanned}\n />\n ),\n });\n },\n [data, gqlClients, viewState, updateSidePanelProps, handleAssignUnplanned],\n );\n\n const handleDragEnd = (result: DropResult) => {\n setFrozenHeights({});\n if (!graphqlSdk) return;\n\n const updatedData = getUpdatedData(data, result);\n if (!updatedData) return;\n\n updateData(updatedData);\n\n const { destination, draggableId } = result;\n const userId = extractUserId(draggableId);\n const toPool = destination!.droppableId === 'pool';\n\n if (toPool) {\n graphqlSdk\n .unassignOperator({\n input: {\n userId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .catch(() => {});\n } else {\n const workplaceId = destination!.droppableId;\n const assignPromise = graphqlSdk.assignOperator({\n input: {\n userId,\n workplaceId,\n shiftId: viewState.shift.id,\n validFrom: viewState.date,\n },\n });\n\n if (viewState.isCurrentShift) {\n assignPromise\n .then(() =>\n graphqlSdk.usersPresences({\n filter: {\n user_id_eq: userId,\n shift_id_eq: viewState.shift.id,\n finished_at_null: 'true',\n },\n }),\n )\n .then(({ usersPresences }) => {\n if (usersPresences.length === 0) return undefined;\n const latest = usersPresences[usersPresences.length - 1];\n const presenceStatus =\n latest.workplaceId === workplaceId ? PresenceStatusEnum.Present : PresenceStatusEnum.PresentElsewhere;\n return updateData({\n workplaces: dataRef.current.workplaces.map((w) =>\n w.workplace.id === workplaceId\n ? {\n ...w,\n assignedOperators: w.assignedOperators.map((op) =>\n op.user.id === userId ? { ...op, presenceStatus } : op,\n ),\n }\n : w,\n ),\n });\n })\n .catch(() => {});\n } else {\n assignPromise.catch(() => {});\n }\n }\n };\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <Box sx={styles.grid}>\n <PoolColumn\n operators={data.unassignedOperators}\n unplannedUserIds={viewState.isCurrentShift ? unplannedUserIds : undefined}\n onOperatorClick={viewState.isCurrentShift ? handleOperatorClick : undefined}\n />\n {data.workplaces.map((assignment) => (\n <WorkplaceColumn\n key={assignment.workplace.id}\n assignment={assignment}\n viewState={viewState}\n registerRef={(el) => registerColumnRef(assignment.workplace.id, el)}\n frozenHeight={frozenHeights[assignment.workplace.id]}\n onOperatorClick={viewState.isCurrentShift ? handleOperatorClick : undefined}\n onRemoveOperator={(userId) => handleRemoveOperator(userId, assignment.workplace.id)}\n />\n ))}\n </Box>\n </DragDropContext>\n );\n};\n\nexport default AssignmentBoard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: (theme) => theme.spacing(2),\n marginBottom: (theme) => theme.spacing(1),\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid #717171',\n background: '#525860',\n },\n label: {\n minWidth: 200,\n textAlign: 'center',\n color: 'rgba(255, 255, 255, 0.65)',\n },\n};\n\nexport default styles;\n","import React from 'react';\n\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { Box, IconButton, Typography } from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { ViewState } from '@/types';\n\nimport styles from './styles';\n\ninterface NavigationProps {\n viewState: ViewState;\n departmentName?: string;\n canPrev?: boolean;\n canNext?: boolean;\n onNavigate: (direction: 'prev' | 'next') => void;\n}\n\nconst isOvernightShift = (shift: ViewState['shift']): boolean => {\n const start = dayjs(shift.startedAt);\n const end = dayjs(shift.finishedAt);\n return start.hour() * 60 + start.minute() > end.hour() * 60 + end.minute();\n};\n\nconst formatLabel = (viewState: ViewState): string => {\n const { shift } = viewState;\n const startDate = dayjs(viewState.date);\n\n if (isOvernightShift(shift)) {\n const endDate = startDate.add(1, 'day');\n const shiftStart = dayjs(shift.startedAt);\n const shiftEnd = dayjs(shift.finishedAt);\n return `${startDate.format('DD.MM')} / ${endDate.format('DD.MM')} (${shiftStart.format(\n 'HH:mm',\n )} - ${shiftEnd.format('HH:mm')})`;\n }\n\n return `${startDate.format('DD.MM')} - ${shift.name}`;\n};\n\nconst Navigation: React.FC<NavigationProps> = ({\n viewState,\n departmentName,\n canPrev = true,\n canNext = true,\n onNavigate,\n}) => (\n <Box sx={styles.root}>\n <IconButton color=\"secondary\" disabled={!canPrev} onClick={() => onNavigate('prev')}>\n <ChevronLeftIcon />\n </IconButton>\n <Typography sx={styles.label}>\n {formatLabel(viewState)}\n {departmentName && ` - ${departmentName}`}\n </Typography>\n <IconButton color=\"secondary\" disabled={!canNext} onClick={() => onNavigate('next')}>\n <ChevronRightIcon />\n </IconButton>\n </Box>\n);\n\nexport default Navigation;\n","import { SxProps, Theme } from '@mui/material/styles';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n loader: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexGrow: 1,\n },\n};\n\nexport default styles;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport {\n getCurrentShift,\n normalizeShifts,\n Shift,\n WorkplaceEvent,\n WorkplaceEventDocument,\n WorkplaceEventSubscriptionPayload,\n} from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\nimport { print } from 'graphql';\n\nimport { ViewState, WidgetViewProps } from '@/types';\nimport { canNavigate, getInitialState, makeShiftDateTime, navigateState } from '@/utils/state';\n\nimport AssignmentBoard from '../AssignmentBoard';\nimport Navigation from '../Navigation';\n\nimport styles from './styles';\n\nconst WidgetView: React.FC<WidgetViewProps> = ({ data, updateData, gqlClients, settings, updateSidePanelProps }) => {\n const { t } = useTranslation();\n const [viewState, setViewState] = useState<ViewState | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [gqlWsSubscribed, setGqlWsSubscribed] = useState(false);\n\n const departmentName = useMemo(() => {\n if (!settings?.departmentId) return undefined;\n const department = data.departments.find((d) => d.id === settings.departmentId);\n return department?.name;\n }, [settings?.departmentId, data.departments]);\n\n const { graphqlSdk, gqlWsClient } = gqlClients;\n const shiftsRef = useRef(data.shifts);\n shiftsRef.current = data.shifts;\n\n useEffect(() => {\n if (data.shifts.length > 0 && !viewState) {\n const initialState = getInitialState(data.shifts);\n\n if (initialState) {\n setViewState(initialState);\n }\n }\n }, [data.shifts, viewState]);\n\n useEffect(() => {\n if (!gqlWsClient || !data?.workplaces?.length || gqlWsSubscribed) return;\n\n data.workplaces.forEach(({ workplace }) =>\n gqlWsClient.subscribe<WorkplaceEventSubscriptionPayload>(\n print(WorkplaceEventDocument),\n { id: workplace.id },\n ({ event, subject }) => {\n if (event === WorkplaceEvent.CurrentShiftChanged && subject) {\n const newShift = subject as Shift;\n const now = dayjs();\n const sorted = [...shiftsRef.current].sort((a, b) => a.startedAt.localeCompare(b.startedAt));\n const normalized = normalizeShifts(sorted, now);\n const current = getCurrentShift(now, normalized);\n const shiftDateTime = current\n ? current.startedAt.format('YYYY-MM-DDTHH:mm:ssZ')\n : makeShiftDateTime(now.format('YYYY-MM-DD'), newShift);\n\n setViewState((prev) => {\n if (!prev?.isCurrentShift) return prev;\n return { date: shiftDateTime, shift: newShift, isCurrentShift: true };\n });\n }\n },\n ),\n );\n\n setGqlWsSubscribed(true);\n }, [gqlWsClient, data?.workplaces, gqlWsSubscribed]);\n\n const fetchAssignmentsRef = useRef<(showLoading?: boolean) => void>(null!);\n\n fetchAssignmentsRef.current = (showLoading = false) => {\n if (!graphqlSdk || !viewState || !updateData) return;\n\n if (showLoading) setIsLoading(true);\n void graphqlSdk\n .workplaceAssignments({\n input: {\n date: viewState.date,\n shiftId: viewState.shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return updateData(workplaceAssignments);\n })\n .catch(() => {})\n .finally(() => {\n if (showLoading) setIsLoading(false);\n });\n };\n\n useEffect(() => {\n if (!viewState || !graphqlSdk) return;\n\n fetchAssignmentsRef.current?.(true);\n\n const refreshInterval = (settings?.refreshInterval || 60) * 1000;\n const intervalId = setInterval(() => fetchAssignmentsRef.current?.(), refreshInterval);\n\n return () => clearInterval(intervalId);\n }, [viewState, graphqlSdk, settings?.departmentId, settings?.refreshInterval]);\n\n const handleNavigate = useCallback(\n (direction: 'prev' | 'next') => {\n if (!viewState) return;\n const newState = navigateState(viewState, data.shifts, direction);\n setViewState(newState);\n },\n [viewState, data.shifts],\n );\n\n const canPrev = viewState ? canNavigate(viewState, data.shifts, 'prev') : false;\n const canNext = viewState ? canNavigate(viewState, data.shifts, 'next') : false;\n\n return (\n <Box sx={styles.root}>\n {viewState ? (\n <React.Fragment>\n <Navigation\n viewState={viewState}\n departmentName={departmentName}\n canPrev={canPrev}\n canNext={canNext}\n onNavigate={handleNavigate}\n />\n {isLoading ? (\n <Box sx={styles.loader}>\n <CircularProgress />\n </Box>\n ) : (\n <AssignmentBoard\n data={data}\n viewState={viewState}\n gqlClients={gqlClients}\n updateData={updateData!}\n updateSidePanelProps={updateSidePanelProps}\n refetchAssignments={() => fetchAssignmentsRef.current?.()}\n />\n )}\n </React.Fragment>\n ) : (\n <Typography>{t('noShiftsAvailable')}</Typography>\n )}\n </Box>\n );\n};\n\nexport default WidgetView;\n","/**\n * Based on Kendo UI Core expression code <https://github.com/telerik/kendo-ui-core#license-information>\n */\n'use strict'\n\nfunction Cache(maxSize) {\n this._maxSize = maxSize\n this.clear()\n}\nCache.prototype.clear = function () {\n this._size = 0\n this._values = Object.create(null)\n}\nCache.prototype.get = function (key) {\n return this._values[key]\n}\nCache.prototype.set = function (key, value) {\n this._size >= this._maxSize && this.clear()\n if (!(key in this._values)) this._size++\n\n return (this._values[key] = value)\n}\n\nvar SPLIT_REGEX = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g,\n DIGIT_REGEX = /^\\d+$/,\n LEAD_DIGIT_REGEX = /^\\d/,\n SPEC_CHAR_REGEX = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g,\n CLEAN_QUOTES_REGEX = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/,\n MAX_CACHE_SIZE = 512\n\nvar pathCache = new Cache(MAX_CACHE_SIZE),\n setCache = new Cache(MAX_CACHE_SIZE),\n getCache = new Cache(MAX_CACHE_SIZE)\n\nvar config\n\nmodule.exports = {\n Cache: Cache,\n\n split: split,\n\n normalizePath: normalizePath,\n\n setter: function (path) {\n var parts = normalizePath(path)\n\n return (\n setCache.get(path) ||\n setCache.set(path, function setter(obj, value) {\n var index = 0\n var len = parts.length\n var data = obj\n\n while (index < len - 1) {\n var part = parts[index]\n if (\n part === '__proto__' ||\n part === 'constructor' ||\n part === 'prototype'\n ) {\n return obj\n }\n\n data = data[parts[index++]]\n }\n data[parts[index]] = value\n })\n )\n },\n\n getter: function (path, safe) {\n var parts = normalizePath(path)\n return (\n getCache.get(path) ||\n getCache.set(path, function getter(data) {\n var index = 0,\n len = parts.length\n while (index < len) {\n if (data != null || !safe) data = data[parts[index++]]\n else return\n }\n return data\n })\n )\n },\n\n join: function (segments) {\n return segments.reduce(function (path, part) {\n return (\n path +\n (isQuoted(part) || DIGIT_REGEX.test(part)\n ? '[' + part + ']'\n : (path ? '.' : '') + part)\n )\n }, '')\n },\n\n forEach: function (path, cb, thisArg) {\n forEach(Array.isArray(path) ? path : split(path), cb, thisArg)\n },\n}\n\nfunction normalizePath(path) {\n return (\n pathCache.get(path) ||\n pathCache.set(\n path,\n split(path).map(function (part) {\n return part.replace(CLEAN_QUOTES_REGEX, '$2')\n })\n )\n )\n}\n\nfunction split(path) {\n return path.match(SPLIT_REGEX) || ['']\n}\n\nfunction forEach(parts, iter, thisArg) {\n var len = parts.length,\n part,\n idx,\n isArray,\n isBracket\n\n for (idx = 0; idx < len; idx++) {\n part = parts[idx]\n\n if (part) {\n if (shouldBeQuoted(part)) {\n part = '\"' + part + '\"'\n }\n\n isBracket = isQuoted(part)\n isArray = !isBracket && /^\\d+$/.test(part)\n\n iter.call(thisArg, part, isBracket, isArray, idx, parts)\n }\n }\n}\n\nfunction isQuoted(str) {\n return (\n typeof str === 'string' && str && [\"'\", '\"'].indexOf(str.charAt(0)) !== -1\n )\n}\n\nfunction hasLeadingNumber(part) {\n return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX)\n}\n\nfunction hasSpecialChars(part) {\n return SPEC_CHAR_REGEX.test(part)\n}\n\nfunction shouldBeQuoted(part) {\n return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part))\n}\n","const reWords = /[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['’](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['’](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+|(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*/g\n\nconst words = (str) => str.match(reWords) || []\n\nconst upperFirst = (str) => str[0].toUpperCase() + str.slice(1)\n\nconst join = (str, d) => words(str).join(d).toLowerCase()\n\nconst camelCase = (str) =>\n words(str).reduce(\n (acc, next) =>\n `${acc}${\n !acc\n ? next.toLowerCase()\n : next[0].toUpperCase() + next.slice(1).toLowerCase()\n }`,\n '',\n )\n\nconst pascalCase = (str) => upperFirst(camelCase(str))\n\nconst snakeCase = (str) => join(str, '_')\n\nconst kebabCase = (str) => join(str, '-')\n\nconst sentenceCase = (str) => upperFirst(join(str, ' '))\n\nconst titleCase = (str) => words(str).map(upperFirst).join(' ')\n\nmodule.exports = {\n words,\n upperFirst,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n sentenceCase,\n titleCase,\n}\n","\n/**\n * Topological sorting function\n *\n * @param {Array} edges\n * @returns {Array}\n */\n\nmodule.exports = function(edges) {\n return toposort(uniqueNodes(edges), edges)\n}\n\nmodule.exports.array = toposort\n\nfunction toposort(nodes, edges) {\n var cursor = nodes.length\n , sorted = new Array(cursor)\n , visited = {}\n , i = cursor\n // Better data structures make algorithm much faster.\n , outgoingEdges = makeOutgoingEdges(edges)\n , nodesHash = makeNodesHash(nodes)\n\n // check for unknown nodes\n edges.forEach(function(edge) {\n if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) {\n throw new Error('Unknown node. There is an unknown node in the supplied edges.')\n }\n })\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, new Set())\n }\n\n return sorted\n\n function visit(node, i, predecessors) {\n if(predecessors.has(node)) {\n var nodeRep\n try {\n nodeRep = \", node was:\" + JSON.stringify(node)\n } catch(e) {\n nodeRep = \"\"\n }\n throw new Error('Cyclic dependency' + nodeRep)\n }\n\n if (!nodesHash.has(node)) {\n throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node))\n }\n\n if (visited[i]) return;\n visited[i] = true\n\n var outgoing = outgoingEdges.get(node) || new Set()\n outgoing = Array.from(outgoing)\n\n if (i = outgoing.length) {\n predecessors.add(node)\n do {\n var child = outgoing[--i]\n visit(child, nodesHash.get(child), predecessors)\n } while (i)\n predecessors.delete(node)\n }\n\n sorted[--cursor] = node\n }\n}\n\nfunction uniqueNodes(arr){\n var res = new Set()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n res.add(edge[0])\n res.add(edge[1])\n }\n return Array.from(res)\n}\n\nfunction makeOutgoingEdges(arr){\n var edges = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n var edge = arr[i]\n if (!edges.has(edge[0])) edges.set(edge[0], new Set())\n if (!edges.has(edge[1])) edges.set(edge[1], new Set())\n edges.get(edge[0]).add(edge[1])\n }\n return edges\n}\n\nfunction makeNodesHash(arr){\n var res = new Map()\n for (var i = 0, len = arr.length; i < len; i++) {\n res.set(arr[i], i)\n }\n return res\n}\n","import { getter, forEach, split, normalizePath, join } from 'property-expr';\nimport { camelCase, snakeCase } from 'tiny-case';\nimport toposort from 'toposort';\n\nconst toString = Object.prototype.toString;\nconst errorToString = Error.prototype.toString;\nconst regExpToString = RegExp.prototype.toString;\nconst symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : () => '';\nconst SYMBOL_REGEXP = /^Symbol\\((.*)\\)(.*)$/;\nfunction printNumber(val) {\n if (val != +val) return 'NaN';\n const isNegativeZero = val === 0 && 1 / val < 0;\n return isNegativeZero ? '-0' : '' + val;\n}\nfunction printSimpleValue(val, quoteStrings = false) {\n if (val == null || val === true || val === false) return '' + val;\n const typeOf = typeof val;\n if (typeOf === 'number') return printNumber(val);\n if (typeOf === 'string') return quoteStrings ? `\"${val}\"` : val;\n if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']';\n if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)');\n const tag = toString.call(val).slice(8, -1);\n if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val);\n if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']';\n if (tag === 'RegExp') return regExpToString.call(val);\n return null;\n}\nfunction printValue(value, quoteStrings) {\n let result = printSimpleValue(value, quoteStrings);\n if (result !== null) return result;\n return JSON.stringify(value, function (key, value) {\n let result = printSimpleValue(this[key], quoteStrings);\n if (result !== null) return result;\n return value;\n }, 2);\n}\n\nfunction toArray(value) {\n return value == null ? [] : [].concat(value);\n}\n\nlet _Symbol$toStringTag, _Symbol$hasInstance, _Symbol$toStringTag2;\nlet strReg = /\\$\\{\\s*(\\w+)\\s*\\}/g;\n_Symbol$toStringTag = Symbol.toStringTag;\nclass ValidationErrorNoStack {\n constructor(errorOrErrors, value, field, type) {\n this.name = void 0;\n this.message = void 0;\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = void 0;\n this.inner = void 0;\n this[_Symbol$toStringTag] = 'Error';\n this.name = 'ValidationError';\n this.value = value;\n this.path = field;\n this.type = type;\n this.errors = [];\n this.inner = [];\n toArray(errorOrErrors).forEach(err => {\n if (ValidationError.isError(err)) {\n this.errors.push(...err.errors);\n const innerErrors = err.inner.length ? err.inner : [err];\n this.inner.push(...innerErrors);\n } else {\n this.errors.push(err);\n }\n });\n this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0];\n }\n}\n_Symbol$hasInstance = Symbol.hasInstance;\n_Symbol$toStringTag2 = Symbol.toStringTag;\nclass ValidationError extends Error {\n static formatError(message, params) {\n // Attempt to make the path more friendly for error message interpolation.\n const path = params.label || params.path || 'this';\n // Store the original path under `originalPath` so it isn't lost to custom\n // message functions; e.g., ones provided in `setLocale()` calls.\n params = Object.assign({}, params, {\n path,\n originalPath: params.path\n });\n if (typeof message === 'string') return message.replace(strReg, (_, key) => printValue(params[key]));\n if (typeof message === 'function') return message(params);\n return message;\n }\n static isError(err) {\n return err && err.name === 'ValidationError';\n }\n constructor(errorOrErrors, value, field, type, disableStack) {\n const errorNoStack = new ValidationErrorNoStack(errorOrErrors, value, field, type);\n if (disableStack) {\n return errorNoStack;\n }\n super();\n this.value = void 0;\n this.path = void 0;\n this.type = void 0;\n this.params = void 0;\n this.errors = [];\n this.inner = [];\n this[_Symbol$toStringTag2] = 'Error';\n this.name = errorNoStack.name;\n this.message = errorNoStack.message;\n this.type = errorNoStack.type;\n this.value = errorNoStack.value;\n this.path = errorNoStack.path;\n this.errors = errorNoStack.errors;\n this.inner = errorNoStack.inner;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ValidationError);\n }\n }\n static [_Symbol$hasInstance](inst) {\n return ValidationErrorNoStack[Symbol.hasInstance](inst) || super[Symbol.hasInstance](inst);\n }\n}\n\nlet mixed = {\n default: '${path} is invalid',\n required: '${path} is a required field',\n defined: '${path} must be defined',\n notNull: '${path} cannot be null',\n oneOf: '${path} must be one of the following values: ${values}',\n notOneOf: '${path} must not be one of the following values: ${values}',\n notType: ({\n path,\n type,\n value,\n originalValue\n }) => {\n const castMsg = originalValue != null && originalValue !== value ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.';\n return type !== 'mixed' ? `${path} must be a \\`${type}\\` type, ` + `but the final value was: \\`${printValue(value, true)}\\`` + castMsg : `${path} must match the configured type. ` + `The validated value was: \\`${printValue(value, true)}\\`` + castMsg;\n }\n};\nlet string = {\n length: '${path} must be exactly ${length} characters',\n min: '${path} must be at least ${min} characters',\n max: '${path} must be at most ${max} characters',\n matches: '${path} must match the following: \"${regex}\"',\n email: '${path} must be a valid email',\n url: '${path} must be a valid URL',\n uuid: '${path} must be a valid UUID',\n datetime: '${path} must be a valid ISO date-time',\n datetime_precision: '${path} must be a valid ISO date-time with a sub-second precision of exactly ${precision} digits',\n datetime_offset: '${path} must be a valid ISO date-time with UTC \"Z\" timezone',\n trim: '${path} must be a trimmed string',\n lowercase: '${path} must be a lowercase string',\n uppercase: '${path} must be a upper case string'\n};\nlet number = {\n min: '${path} must be greater than or equal to ${min}',\n max: '${path} must be less than or equal to ${max}',\n lessThan: '${path} must be less than ${less}',\n moreThan: '${path} must be greater than ${more}',\n positive: '${path} must be a positive number',\n negative: '${path} must be a negative number',\n integer: '${path} must be an integer'\n};\nlet date = {\n min: '${path} field must be later than ${min}',\n max: '${path} field must be at earlier than ${max}'\n};\nlet boolean = {\n isValue: '${path} field must be ${value}'\n};\nlet object = {\n noUnknown: '${path} field has unspecified keys: ${unknown}',\n exact: '${path} object contains unknown properties: ${properties}'\n};\nlet array = {\n min: '${path} field must have at least ${min} items',\n max: '${path} field must have less than or equal to ${max} items',\n length: '${path} must have ${length} items'\n};\nlet tuple = {\n notType: params => {\n const {\n path,\n value,\n spec\n } = params;\n const typeLen = spec.types.length;\n if (Array.isArray(value)) {\n if (value.length < typeLen) return `${path} tuple value has too few items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n if (value.length > typeLen) return `${path} tuple value has too many items, expected a length of ${typeLen} but got ${value.length} for value: \\`${printValue(value, true)}\\``;\n }\n return ValidationError.formatError(mixed.notType, params);\n }\n};\nvar locale = Object.assign(Object.create(null), {\n mixed,\n string,\n number,\n date,\n object,\n array,\n boolean,\n tuple\n});\n\nconst isSchema = obj => obj && obj.__isYupSchema__;\n\nclass Condition {\n static fromOptions(refs, config) {\n if (!config.then && !config.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions');\n let {\n is,\n then,\n otherwise\n } = config;\n let check = typeof is === 'function' ? is : (...values) => values.every(value => value === is);\n return new Condition(refs, (values, schema) => {\n var _branch;\n let branch = check(...values) ? then : otherwise;\n return (_branch = branch == null ? void 0 : branch(schema)) != null ? _branch : schema;\n });\n }\n constructor(refs, builder) {\n this.fn = void 0;\n this.refs = refs;\n this.refs = refs;\n this.fn = builder;\n }\n resolve(base, options) {\n let values = this.refs.map(ref =>\n // TODO: ? operator here?\n ref.getValue(options == null ? void 0 : options.value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context));\n let schema = this.fn(values, base, options);\n if (schema === undefined ||\n // @ts-ignore this can be base\n schema === base) {\n return base;\n }\n if (!isSchema(schema)) throw new TypeError('conditions must return a schema object');\n return schema.resolve(options);\n }\n}\n\nconst prefixes = {\n context: '$',\n value: '.'\n};\nfunction create$9(key, options) {\n return new Reference(key, options);\n}\nclass Reference {\n constructor(key, options = {}) {\n this.key = void 0;\n this.isContext = void 0;\n this.isValue = void 0;\n this.isSibling = void 0;\n this.path = void 0;\n this.getter = void 0;\n this.map = void 0;\n if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key);\n this.key = key.trim();\n if (key === '') throw new TypeError('ref must be a non-empty string');\n this.isContext = this.key[0] === prefixes.context;\n this.isValue = this.key[0] === prefixes.value;\n this.isSibling = !this.isContext && !this.isValue;\n let prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : '';\n this.path = this.key.slice(prefix.length);\n this.getter = this.path && getter(this.path, true);\n this.map = options.map;\n }\n getValue(value, parent, context) {\n let result = this.isContext ? context : this.isValue ? value : parent;\n if (this.getter) result = this.getter(result || {});\n if (this.map) result = this.map(result);\n return result;\n }\n\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n cast(value, options) {\n return this.getValue(value, options == null ? void 0 : options.parent, options == null ? void 0 : options.context);\n }\n resolve() {\n return this;\n }\n describe() {\n return {\n type: 'ref',\n key: this.key\n };\n }\n toString() {\n return `Ref(${this.key})`;\n }\n static isRef(value) {\n return value && value.__isYupRef;\n }\n}\n\n// @ts-ignore\nReference.prototype.__isYupRef = true;\n\nconst isAbsent = value => value == null;\n\nfunction createValidation(config) {\n function validate({\n value,\n path = '',\n options,\n originalValue,\n schema\n }, panic, next) {\n const {\n name,\n test,\n params,\n message,\n skipAbsent\n } = config;\n let {\n parent,\n context,\n abortEarly = schema.spec.abortEarly,\n disableStackTrace = schema.spec.disableStackTrace\n } = options;\n const resolveOptions = {\n value,\n parent,\n context\n };\n function createError(overrides = {}) {\n const nextParams = resolveParams(Object.assign({\n value,\n originalValue,\n label: schema.spec.label,\n path: overrides.path || path,\n spec: schema.spec,\n disableStackTrace: overrides.disableStackTrace || disableStackTrace\n }, params, overrides.params), resolveOptions);\n const error = new ValidationError(ValidationError.formatError(overrides.message || message, nextParams), value, nextParams.path, overrides.type || name, nextParams.disableStackTrace);\n error.params = nextParams;\n return error;\n }\n const invalid = abortEarly ? panic : next;\n let ctx = {\n path,\n parent,\n type: name,\n from: options.from,\n createError,\n resolve(item) {\n return resolveMaybeRef(item, resolveOptions);\n },\n options,\n originalValue,\n schema\n };\n const handleResult = validOrError => {\n if (ValidationError.isError(validOrError)) invalid(validOrError);else if (!validOrError) invalid(createError());else next(null);\n };\n const handleError = err => {\n if (ValidationError.isError(err)) invalid(err);else panic(err);\n };\n const shouldSkip = skipAbsent && isAbsent(value);\n if (shouldSkip) {\n return handleResult(true);\n }\n let result;\n try {\n var _result;\n result = test.call(ctx, value, ctx);\n if (typeof ((_result = result) == null ? void 0 : _result.then) === 'function') {\n if (options.sync) {\n throw new Error(`Validation test of type: \"${ctx.type}\" returned a Promise during a synchronous validate. ` + `This test will finish after the validate call has returned`);\n }\n return Promise.resolve(result).then(handleResult, handleError);\n }\n } catch (err) {\n handleError(err);\n return;\n }\n handleResult(result);\n }\n validate.OPTIONS = config;\n return validate;\n}\n\n// Warning: mutates the input\nfunction resolveParams(params, options) {\n if (!params) return params;\n for (const key of Object.keys(params)) {\n params[key] = resolveMaybeRef(params[key], options);\n }\n return params;\n}\nfunction resolveMaybeRef(item, options) {\n return Reference.isRef(item) ? item.getValue(options.value, options.parent, options.context) : item;\n}\n\nfunction getIn(schema, path, value, context = value) {\n let parent, lastPart, lastPartDebug;\n\n // root path: ''\n if (!path) return {\n parent,\n parentPath: path,\n schema\n };\n forEach(path, (_part, isBracket, isArray) => {\n let part = isBracket ? _part.slice(1, _part.length - 1) : _part;\n schema = schema.resolve({\n context,\n parent,\n value\n });\n let isTuple = schema.type === 'tuple';\n let idx = isArray ? parseInt(part, 10) : 0;\n if (schema.innerType || isTuple) {\n if (isTuple && !isArray) throw new Error(`Yup.reach cannot implicitly index into a tuple type. the path part \"${lastPartDebug}\" must contain an index to the tuple element, e.g. \"${lastPartDebug}[0]\"`);\n if (value && idx >= value.length) {\n throw new Error(`Yup.reach cannot resolve an array item at index: ${_part}, in the path: ${path}. ` + `because there is no value at that index. `);\n }\n parent = value;\n value = value && value[idx];\n schema = isTuple ? schema.spec.types[idx] : schema.innerType;\n }\n\n // sometimes the array index part of a path doesn't exist: \"nested.arr.child\"\n // in these cases the current part is the next schema and should be processed\n // in this iteration. For cases where the index signature is included this\n // check will fail and we'll handle the `child` part on the next iteration like normal\n if (!isArray) {\n if (!schema.fields || !schema.fields[part]) throw new Error(`The schema does not contain the path: ${path}. ` + `(failed at: ${lastPartDebug} which is a type: \"${schema.type}\")`);\n parent = value;\n value = value && value[part];\n schema = schema.fields[part];\n }\n lastPart = part;\n lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part;\n });\n return {\n schema,\n parent,\n parentPath: lastPart\n };\n}\nfunction reach(obj, path, value, context) {\n return getIn(obj, path, value, context).schema;\n}\n\nclass ReferenceSet extends Set {\n describe() {\n const description = [];\n for (const item of this.values()) {\n description.push(Reference.isRef(item) ? item.describe() : item);\n }\n return description;\n }\n resolveAll(resolve) {\n let result = [];\n for (const item of this.values()) {\n result.push(resolve(item));\n }\n return result;\n }\n clone() {\n return new ReferenceSet(this.values());\n }\n merge(newItems, removeItems) {\n const next = this.clone();\n newItems.forEach(value => next.add(value));\n removeItems.forEach(value => next.delete(value));\n return next;\n }\n}\n\n// tweaked from https://github.com/Kelin2025/nanoclone/blob/0abeb7635bda9b68ef2277093f76dbe3bf3948e1/src/index.js\nfunction clone(src, seen = new Map()) {\n if (isSchema(src) || !src || typeof src !== 'object') return src;\n if (seen.has(src)) return seen.get(src);\n let copy;\n if (src instanceof Date) {\n // Date\n copy = new Date(src.getTime());\n seen.set(src, copy);\n } else if (src instanceof RegExp) {\n // RegExp\n copy = new RegExp(src);\n seen.set(src, copy);\n } else if (Array.isArray(src)) {\n // Array\n copy = new Array(src.length);\n seen.set(src, copy);\n for (let i = 0; i < src.length; i++) copy[i] = clone(src[i], seen);\n } else if (src instanceof Map) {\n // Map\n copy = new Map();\n seen.set(src, copy);\n for (const [k, v] of src.entries()) copy.set(k, clone(v, seen));\n } else if (src instanceof Set) {\n // Set\n copy = new Set();\n seen.set(src, copy);\n for (const v of src) copy.add(clone(v, seen));\n } else if (src instanceof Object) {\n // Object\n copy = {};\n seen.set(src, copy);\n for (const [k, v] of Object.entries(src)) copy[k] = clone(v, seen);\n } else {\n throw Error(`Unable to clone ${src}`);\n }\n return copy;\n}\n\n/**\n * Copied from @standard-schema/spec to avoid having a dependency on it.\n * https://github.com/standard-schema/standard-schema/blob/main/packages/spec/src/index.ts\n */\n\nfunction createStandardPath(path) {\n if (!(path != null && path.length)) {\n return undefined;\n }\n\n // Array to store the final path segments\n const segments = [];\n // Buffer for building the current segment\n let currentSegment = '';\n // Track if we're inside square brackets (array/property access)\n let inBrackets = false;\n // Track if we're inside quotes (for property names with special chars)\n let inQuotes = false;\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '[' && !inQuotes) {\n // When entering brackets, push any accumulated segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n currentSegment = '';\n }\n inBrackets = true;\n continue;\n }\n if (char === ']' && !inQuotes) {\n if (currentSegment) {\n // Handle numeric indices (e.g. arr[0])\n if (/^\\d+$/.test(currentSegment)) {\n segments.push(currentSegment);\n } else {\n // Handle quoted property names (e.g. obj[\"foo.bar\"])\n segments.push(currentSegment.replace(/^\"|\"$/g, ''));\n }\n currentSegment = '';\n }\n inBrackets = false;\n continue;\n }\n if (char === '\"') {\n // Toggle quote state for handling quoted property names\n inQuotes = !inQuotes;\n continue;\n }\n if (char === '.' && !inBrackets && !inQuotes) {\n // On dots outside brackets/quotes, push current segment\n if (currentSegment) {\n segments.push(currentSegment);\n currentSegment = '';\n }\n continue;\n }\n currentSegment += char;\n }\n\n // Push any remaining segment after splitting on dots\n if (currentSegment) {\n segments.push(...currentSegment.split('.').filter(Boolean));\n }\n return segments;\n}\nfunction createStandardIssues(error, parentPath) {\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.errors.map(err => ({\n message: err,\n path: createStandardPath(path)\n }));\n}\nfunction issuesFromValidationError(error, parentPath) {\n var _error$inner;\n if (!((_error$inner = error.inner) != null && _error$inner.length) && error.errors.length) {\n return createStandardIssues(error, parentPath);\n }\n const path = parentPath ? `${parentPath}.${error.path}` : error.path;\n return error.inner.flatMap(err => issuesFromValidationError(err, path));\n}\n\n// If `CustomSchemaMeta` isn't extended with any keys, we'll fall back to a\n// loose Record definition allowing free form usage.\nclass Schema {\n constructor(options) {\n this.type = void 0;\n this.deps = [];\n this.tests = void 0;\n this.transforms = void 0;\n this.conditions = [];\n this._mutate = void 0;\n this.internalTests = {};\n this._whitelist = new ReferenceSet();\n this._blacklist = new ReferenceSet();\n this.exclusiveTests = Object.create(null);\n this._typeCheck = void 0;\n this.spec = void 0;\n this.tests = [];\n this.transforms = [];\n this.withMutation(() => {\n this.typeError(mixed.notType);\n });\n this.type = options.type;\n this._typeCheck = options.check;\n this.spec = Object.assign({\n strip: false,\n strict: false,\n abortEarly: true,\n recursive: true,\n disableStackTrace: false,\n nullable: false,\n optional: true,\n coerce: true\n }, options == null ? void 0 : options.spec);\n this.withMutation(s => {\n s.nonNullable();\n });\n }\n\n // TODO: remove\n get _type() {\n return this.type;\n }\n clone(spec) {\n if (this._mutate) {\n if (spec) Object.assign(this.spec, spec);\n return this;\n }\n\n // if the nested value is a schema we can skip cloning, since\n // they are already immutable\n const next = Object.create(Object.getPrototypeOf(this));\n\n // @ts-expect-error this is readonly\n next.type = this.type;\n next._typeCheck = this._typeCheck;\n next._whitelist = this._whitelist.clone();\n next._blacklist = this._blacklist.clone();\n next.internalTests = Object.assign({}, this.internalTests);\n next.exclusiveTests = Object.assign({}, this.exclusiveTests);\n\n // @ts-expect-error this is readonly\n next.deps = [...this.deps];\n next.conditions = [...this.conditions];\n next.tests = [...this.tests];\n next.transforms = [...this.transforms];\n next.spec = clone(Object.assign({}, this.spec, spec));\n return next;\n }\n label(label) {\n let next = this.clone();\n next.spec.label = label;\n return next;\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n withMutation(fn) {\n let before = this._mutate;\n this._mutate = true;\n let result = fn(this);\n this._mutate = before;\n return result;\n }\n concat(schema) {\n if (!schema || schema === this) return this;\n if (schema.type !== this.type && this.type !== 'mixed') throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${schema.type}`);\n let base = this;\n let combined = schema.clone();\n const mergedSpec = Object.assign({}, base.spec, combined.spec);\n combined.spec = mergedSpec;\n combined.internalTests = Object.assign({}, base.internalTests, combined.internalTests);\n\n // manually merge the blacklist/whitelist (the other `schema` takes\n // precedence in case of conflicts)\n combined._whitelist = base._whitelist.merge(schema._whitelist, schema._blacklist);\n combined._blacklist = base._blacklist.merge(schema._blacklist, schema._whitelist);\n\n // start with the current tests\n combined.tests = base.tests;\n combined.exclusiveTests = base.exclusiveTests;\n\n // manually add the new tests to ensure\n // the deduping logic is consistent\n combined.withMutation(next => {\n schema.tests.forEach(fn => {\n next.test(fn.OPTIONS);\n });\n });\n combined.transforms = [...base.transforms, ...combined.transforms];\n return combined;\n }\n isType(v) {\n if (v == null) {\n if (this.spec.nullable && v === null) return true;\n if (this.spec.optional && v === undefined) return true;\n return false;\n }\n return this._typeCheck(v);\n }\n resolve(options) {\n let schema = this;\n if (schema.conditions.length) {\n let conditions = schema.conditions;\n schema = schema.clone();\n schema.conditions = [];\n schema = conditions.reduce((prevSchema, condition) => condition.resolve(prevSchema, options), schema);\n schema = schema.resolve(options);\n }\n return schema;\n }\n resolveOptions(options) {\n var _options$strict, _options$abortEarly, _options$recursive, _options$disableStack;\n return Object.assign({}, options, {\n from: options.from || [],\n strict: (_options$strict = options.strict) != null ? _options$strict : this.spec.strict,\n abortEarly: (_options$abortEarly = options.abortEarly) != null ? _options$abortEarly : this.spec.abortEarly,\n recursive: (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive,\n disableStackTrace: (_options$disableStack = options.disableStackTrace) != null ? _options$disableStack : this.spec.disableStackTrace\n });\n }\n\n /**\n * Run the configured transform pipeline over an input value.\n */\n\n cast(value, options = {}) {\n let resolvedSchema = this.resolve(Object.assign({}, options, {\n value\n // parent: options.parent,\n // context: options.context,\n }));\n\n let allowOptionality = options.assert === 'ignore-optionality';\n let result = resolvedSchema._cast(value, options);\n if (options.assert !== false && !resolvedSchema.isType(result)) {\n if (allowOptionality && isAbsent(result)) {\n return result;\n }\n let formattedValue = printValue(value);\n let formattedResult = printValue(result);\n throw new TypeError(`The value of ${options.path || 'field'} could not be cast to a value ` + `that satisfies the schema type: \"${resolvedSchema.type}\". \\n\\n` + `attempted value: ${formattedValue} \\n` + (formattedResult !== formattedValue ? `result of cast: ${formattedResult}` : ''));\n }\n return result;\n }\n _cast(rawValue, options) {\n let value = rawValue === undefined ? rawValue : this.transforms.reduce((prevValue, fn) => fn.call(this, prevValue, rawValue, this, options), rawValue);\n if (value === undefined) {\n value = this.getDefault(options);\n }\n return value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n path,\n originalValue = _value,\n strict = this.spec.strict\n } = options;\n let value = _value;\n if (!strict) {\n value = this._cast(value, Object.assign({\n assert: false\n }, options));\n }\n let initialTests = [];\n for (let test of Object.values(this.internalTests)) {\n if (test) initialTests.push(test);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: initialTests\n }, panic, initialErrors => {\n // even if we aren't ending early we can't proceed further if the types aren't correct\n if (initialErrors.length) {\n return next(initialErrors, value);\n }\n this.runTests({\n path,\n value,\n originalValue,\n options,\n tests: this.tests\n }, panic, next);\n });\n }\n\n /**\n * Executes a set of validations, either schema, produced Tests or a nested\n * schema validate result.\n */\n runTests(runOptions, panic, next) {\n let fired = false;\n let {\n tests,\n value,\n originalValue,\n path,\n options\n } = runOptions;\n let panicOnce = arg => {\n if (fired) return;\n fired = true;\n panic(arg, value);\n };\n let nextOnce = arg => {\n if (fired) return;\n fired = true;\n next(arg, value);\n };\n let count = tests.length;\n let nestedErrors = [];\n if (!count) return nextOnce([]);\n let args = {\n value,\n originalValue,\n path,\n options,\n schema: this\n };\n for (let i = 0; i < tests.length; i++) {\n const test = tests[i];\n test(args, panicOnce, function finishTestRun(err) {\n if (err) {\n Array.isArray(err) ? nestedErrors.push(...err) : nestedErrors.push(err);\n }\n if (--count <= 0) {\n nextOnce(nestedErrors);\n }\n });\n }\n }\n asNestedTest({\n key,\n index,\n parent,\n parentPath,\n originalParent,\n options\n }) {\n const k = key != null ? key : index;\n if (k == null) {\n throw TypeError('Must include `key` or `index` for nested validations');\n }\n const isIndex = typeof k === 'number';\n let value = parent[k];\n const testOptions = Object.assign({}, options, {\n // Nested validations fields are always strict:\n // 1. parent isn't strict so the casting will also have cast inner values\n // 2. parent is strict in which case the nested values weren't cast either\n strict: true,\n parent,\n value,\n originalValue: originalParent[k],\n // FIXME: tests depend on `index` being passed around deeply,\n // we should not let the options.key/index bleed through\n key: undefined,\n // index: undefined,\n [isIndex ? 'index' : 'key']: k,\n path: isIndex || k.includes('.') ? `${parentPath || ''}[${isIndex ? k : `\"${k}\"`}]` : (parentPath ? `${parentPath}.` : '') + key\n });\n return (_, panic, next) => this.resolve(testOptions)._validate(value, testOptions, panic, next);\n }\n validate(value, options) {\n var _options$disableStack2;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let disableStackTrace = (_options$disableStack2 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack2 : schema.spec.disableStackTrace;\n return new Promise((resolve, reject) => schema._validate(value, options, (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n reject(error);\n }, (errors, validated) => {\n if (errors.length) reject(new ValidationError(errors, validated, undefined, undefined, disableStackTrace));else resolve(validated);\n }));\n }\n validateSync(value, options) {\n var _options$disableStack3;\n let schema = this.resolve(Object.assign({}, options, {\n value\n }));\n let result;\n let disableStackTrace = (_options$disableStack3 = options == null ? void 0 : options.disableStackTrace) != null ? _options$disableStack3 : schema.spec.disableStackTrace;\n schema._validate(value, Object.assign({}, options, {\n sync: true\n }), (error, parsed) => {\n if (ValidationError.isError(error)) error.value = parsed;\n throw error;\n }, (errors, validated) => {\n if (errors.length) throw new ValidationError(errors, value, undefined, undefined, disableStackTrace);\n result = validated;\n });\n return result;\n }\n isValid(value, options) {\n return this.validate(value, options).then(() => true, err => {\n if (ValidationError.isError(err)) return false;\n throw err;\n });\n }\n isValidSync(value, options) {\n try {\n this.validateSync(value, options);\n return true;\n } catch (err) {\n if (ValidationError.isError(err)) return false;\n throw err;\n }\n }\n _getDefault(options) {\n let defaultValue = this.spec.default;\n if (defaultValue == null) {\n return defaultValue;\n }\n return typeof defaultValue === 'function' ? defaultValue.call(this, options) : clone(defaultValue);\n }\n getDefault(options\n // If schema is defaulted we know it's at least not undefined\n ) {\n let schema = this.resolve(options || {});\n return schema._getDefault(options);\n }\n default(def) {\n if (arguments.length === 0) {\n return this._getDefault();\n }\n let next = this.clone({\n default: def\n });\n return next;\n }\n strict(isStrict = true) {\n return this.clone({\n strict: isStrict\n });\n }\n nullability(nullable, message) {\n const next = this.clone({\n nullable\n });\n next.internalTests.nullable = createValidation({\n message,\n name: 'nullable',\n test(value) {\n return value === null ? this.schema.spec.nullable : true;\n }\n });\n return next;\n }\n optionality(optional, message) {\n const next = this.clone({\n optional\n });\n next.internalTests.optionality = createValidation({\n message,\n name: 'optionality',\n test(value) {\n return value === undefined ? this.schema.spec.optional : true;\n }\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n defined(message = mixed.defined) {\n return this.optionality(false, message);\n }\n nullable() {\n return this.nullability(true);\n }\n nonNullable(message = mixed.notNull) {\n return this.nullability(false, message);\n }\n required(message = mixed.required) {\n return this.clone().withMutation(next => next.nonNullable(message).defined(message));\n }\n notRequired() {\n return this.clone().withMutation(next => next.nullable().optional());\n }\n transform(fn) {\n let next = this.clone();\n next.transforms.push(fn);\n return next;\n }\n\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n\n test(...args) {\n let opts;\n if (args.length === 1) {\n if (typeof args[0] === 'function') {\n opts = {\n test: args[0]\n };\n } else {\n opts = args[0];\n }\n } else if (args.length === 2) {\n opts = {\n name: args[0],\n test: args[1]\n };\n } else {\n opts = {\n name: args[0],\n message: args[1],\n test: args[2]\n };\n }\n if (opts.message === undefined) opts.message = mixed.default;\n if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters');\n let next = this.clone();\n let validate = createValidation(opts);\n let isExclusive = opts.exclusive || opts.name && next.exclusiveTests[opts.name] === true;\n if (opts.exclusive) {\n if (!opts.name) throw new TypeError('Exclusive tests must provide a unique `name` identifying the test');\n }\n if (opts.name) next.exclusiveTests[opts.name] = !!opts.exclusive;\n next.tests = next.tests.filter(fn => {\n if (fn.OPTIONS.name === opts.name) {\n if (isExclusive) return false;\n if (fn.OPTIONS.test === validate.OPTIONS.test) return false;\n }\n return true;\n });\n next.tests.push(validate);\n return next;\n }\n when(keys, options) {\n if (!Array.isArray(keys) && typeof keys !== 'string') {\n options = keys;\n keys = '.';\n }\n let next = this.clone();\n let deps = toArray(keys).map(key => new Reference(key));\n deps.forEach(dep => {\n // @ts-ignore readonly array\n if (dep.isSibling) next.deps.push(dep.key);\n });\n next.conditions.push(typeof options === 'function' ? new Condition(deps, options) : Condition.fromOptions(deps, options));\n return next;\n }\n typeError(message) {\n let next = this.clone();\n next.internalTests.typeError = createValidation({\n message,\n name: 'typeError',\n skipAbsent: true,\n test(value) {\n if (!this.schema._typeCheck(value)) return this.createError({\n params: {\n type: this.schema.type\n }\n });\n return true;\n }\n });\n return next;\n }\n oneOf(enums, message = mixed.oneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._whitelist.add(val);\n next._blacklist.delete(val);\n });\n next.internalTests.whiteList = createValidation({\n message,\n name: 'oneOf',\n skipAbsent: true,\n test(value) {\n let valids = this.schema._whitelist;\n let resolved = valids.resolveAll(this.resolve);\n return resolved.includes(value) ? true : this.createError({\n params: {\n values: Array.from(valids).join(', '),\n resolved\n }\n });\n }\n });\n return next;\n }\n notOneOf(enums, message = mixed.notOneOf) {\n let next = this.clone();\n enums.forEach(val => {\n next._blacklist.add(val);\n next._whitelist.delete(val);\n });\n next.internalTests.blacklist = createValidation({\n message,\n name: 'notOneOf',\n test(value) {\n let invalids = this.schema._blacklist;\n let resolved = invalids.resolveAll(this.resolve);\n if (resolved.includes(value)) return this.createError({\n params: {\n values: Array.from(invalids).join(', '),\n resolved\n }\n });\n return true;\n }\n });\n return next;\n }\n strip(strip = true) {\n let next = this.clone();\n next.spec.strip = strip;\n return next;\n }\n\n /**\n * Return a serialized description of the schema including validations, flags, types etc.\n *\n * @param options Provide any needed context for resolving runtime schema alterations (lazy, when conditions, etc).\n */\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const {\n label,\n meta,\n optional,\n nullable\n } = next.spec;\n const description = {\n meta,\n label,\n optional,\n nullable,\n default: next.getDefault(options),\n type: next.type,\n oneOf: next._whitelist.describe(),\n notOneOf: next._blacklist.describe(),\n tests: next.tests.filter((n, idx, list) => list.findIndex(c => c.OPTIONS.name === n.OPTIONS.name) === idx).map(fn => {\n const params = fn.OPTIONS.params && options ? resolveParams(Object.assign({}, fn.OPTIONS.params), options) : fn.OPTIONS.params;\n return {\n name: fn.OPTIONS.name,\n params\n };\n })\n };\n return description;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (err instanceof ValidationError) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n// @ts-expect-error\nSchema.prototype.__isYupSchema__ = true;\nfor (const method of ['validate', 'validateSync']) Schema.prototype[`${method}At`] = function (path, value, options = {}) {\n const {\n parent,\n parentPath,\n schema\n } = getIn(this, path, value, options.context);\n return schema[method](parent && parent[parentPath], Object.assign({}, options, {\n parent,\n path\n }));\n};\nfor (const alias of ['equals', 'is']) Schema.prototype[alias] = Schema.prototype.oneOf;\nfor (const alias of ['not', 'nope']) Schema.prototype[alias] = Schema.prototype.notOneOf;\n\nconst returnsTrue = () => true;\nfunction create$8(spec) {\n return new MixedSchema(spec);\n}\nclass MixedSchema extends Schema {\n constructor(spec) {\n super(typeof spec === 'function' ? {\n type: 'mixed',\n check: spec\n } : Object.assign({\n type: 'mixed',\n check: returnsTrue\n }, spec));\n }\n}\ncreate$8.prototype = MixedSchema.prototype;\n\nfunction create$7() {\n return new BooleanSchema();\n}\nclass BooleanSchema extends Schema {\n constructor() {\n super({\n type: 'boolean',\n check(v) {\n if (v instanceof Boolean) v = v.valueOf();\n return typeof v === 'boolean';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (this.spec.coerce && !this.isType(value)) {\n if (/^(true|1)$/i.test(String(value))) return true;\n if (/^(false|0)$/i.test(String(value))) return false;\n }\n return value;\n });\n });\n }\n isTrue(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'true'\n },\n test(value) {\n return isAbsent(value) || value === true;\n }\n });\n }\n isFalse(message = boolean.isValue) {\n return this.test({\n message,\n name: 'is-value',\n exclusive: true,\n params: {\n value: 'false'\n },\n test(value) {\n return isAbsent(value) || value === false;\n }\n });\n }\n default(def) {\n return super.default(def);\n }\n defined(msg) {\n return super.defined(msg);\n }\n optional() {\n return super.optional();\n }\n required(msg) {\n return super.required(msg);\n }\n notRequired() {\n return super.notRequired();\n }\n nullable() {\n return super.nullable();\n }\n nonNullable(msg) {\n return super.nonNullable(msg);\n }\n strip(v) {\n return super.strip(v);\n }\n}\ncreate$7.prototype = BooleanSchema.prototype;\n\n/**\n * This file is a modified version of the file from the following repository:\n * Date.parse with progressive enhancement for ISO 8601 <https://github.com/csnover/js-iso8601>\n * NON-CONFORMANT EDITION.\n * © 2011 Colin Snover <http://zetafleet.com>\n * Released under MIT license.\n */\n\n// prettier-ignore\n// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm\nconst isoReg = /^(\\d{4}|[+-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,.](\\d{1,}))?)?(?:(Z)|([+-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction parseIsoDate(date) {\n const struct = parseDateStruct(date);\n if (!struct) return Date.parse ? Date.parse(date) : Number.NaN;\n\n // timestamps without timezone identifiers should be considered local time\n if (struct.z === undefined && struct.plusMinus === undefined) {\n return new Date(struct.year, struct.month, struct.day, struct.hour, struct.minute, struct.second, struct.millisecond).valueOf();\n }\n let totalMinutesOffset = 0;\n if (struct.z !== 'Z' && struct.plusMinus !== undefined) {\n totalMinutesOffset = struct.hourOffset * 60 + struct.minuteOffset;\n if (struct.plusMinus === '+') totalMinutesOffset = 0 - totalMinutesOffset;\n }\n return Date.UTC(struct.year, struct.month, struct.day, struct.hour, struct.minute + totalMinutesOffset, struct.second, struct.millisecond);\n}\nfunction parseDateStruct(date) {\n var _regexResult$7$length, _regexResult$;\n const regexResult = isoReg.exec(date);\n if (!regexResult) return null;\n\n // use of toNumber() avoids NaN timestamps caused by “undefined”\n // values being passed to Date constructor\n return {\n year: toNumber(regexResult[1]),\n month: toNumber(regexResult[2], 1) - 1,\n day: toNumber(regexResult[3], 1),\n hour: toNumber(regexResult[4]),\n minute: toNumber(regexResult[5]),\n second: toNumber(regexResult[6]),\n millisecond: regexResult[7] ?\n // allow arbitrary sub-second precision beyond milliseconds\n toNumber(regexResult[7].substring(0, 3)) : 0,\n precision: (_regexResult$7$length = (_regexResult$ = regexResult[7]) == null ? void 0 : _regexResult$.length) != null ? _regexResult$7$length : undefined,\n z: regexResult[8] || undefined,\n plusMinus: regexResult[9] || undefined,\n hourOffset: toNumber(regexResult[10]),\n minuteOffset: toNumber(regexResult[11])\n };\n}\nfunction toNumber(str, defaultValue = 0) {\n return Number(str) || defaultValue;\n}\n\n// Taken from HTML spec: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address\nlet rEmail =\n// eslint-disable-next-line\n/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nlet rUrl =\n// eslint-disable-next-line\n/^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\n\n// eslint-disable-next-line\nlet rUUID = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\nlet yearMonthDay = '^\\\\d{4}-\\\\d{2}-\\\\d{2}';\nlet hourMinuteSecond = '\\\\d{2}:\\\\d{2}:\\\\d{2}';\nlet zOrOffset = '(([+-]\\\\d{2}(:?\\\\d{2})?)|Z)';\nlet rIsoDateTime = new RegExp(`${yearMonthDay}T${hourMinuteSecond}(\\\\.\\\\d+)?${zOrOffset}$`);\nlet isTrimmed = value => isAbsent(value) || value === value.trim();\nlet objStringTag = {}.toString();\nfunction create$6() {\n return new StringSchema();\n}\nclass StringSchema extends Schema {\n constructor() {\n super({\n type: 'string',\n check(value) {\n if (value instanceof String) value = value.valueOf();\n return typeof value === 'string';\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce || this.isType(value)) return value;\n\n // don't ever convert arrays\n if (Array.isArray(value)) return value;\n const strValue = value != null && value.toString ? value.toString() : value;\n\n // no one wants plain objects converted to [Object object]\n if (strValue === objStringTag) return value;\n return strValue;\n });\n });\n }\n required(message) {\n return super.required(message).withMutation(schema => schema.test({\n message: message || mixed.required,\n name: 'required',\n skipAbsent: true,\n test: value => !!value.length\n }));\n }\n notRequired() {\n return super.notRequired().withMutation(schema => {\n schema.tests = schema.tests.filter(t => t.OPTIONS.name !== 'required');\n return schema;\n });\n }\n length(length, message = string.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message = string.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message = string.max) {\n return this.test({\n name: 'max',\n exclusive: true,\n message,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n matches(regex, options) {\n let excludeEmptyString = false;\n let message;\n let name;\n if (options) {\n if (typeof options === 'object') {\n ({\n excludeEmptyString = false,\n message,\n name\n } = options);\n } else {\n message = options;\n }\n }\n return this.test({\n name: name || 'matches',\n message: message || string.matches,\n params: {\n regex\n },\n skipAbsent: true,\n test: value => value === '' && excludeEmptyString || value.search(regex) !== -1\n });\n }\n email(message = string.email) {\n return this.matches(rEmail, {\n name: 'email',\n message,\n excludeEmptyString: true\n });\n }\n url(message = string.url) {\n return this.matches(rUrl, {\n name: 'url',\n message,\n excludeEmptyString: true\n });\n }\n uuid(message = string.uuid) {\n return this.matches(rUUID, {\n name: 'uuid',\n message,\n excludeEmptyString: false\n });\n }\n datetime(options) {\n let message = '';\n let allowOffset;\n let precision;\n if (options) {\n if (typeof options === 'object') {\n ({\n message = '',\n allowOffset = false,\n precision = undefined\n } = options);\n } else {\n message = options;\n }\n }\n return this.matches(rIsoDateTime, {\n name: 'datetime',\n message: message || string.datetime,\n excludeEmptyString: true\n }).test({\n name: 'datetime_offset',\n message: message || string.datetime_offset,\n params: {\n allowOffset\n },\n skipAbsent: true,\n test: value => {\n if (!value || allowOffset) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return !!struct.z;\n }\n }).test({\n name: 'datetime_precision',\n message: message || string.datetime_precision,\n params: {\n precision\n },\n skipAbsent: true,\n test: value => {\n if (!value || precision == undefined) return true;\n const struct = parseDateStruct(value);\n if (!struct) return false;\n return struct.precision === precision;\n }\n });\n }\n\n //-- transforms --\n ensure() {\n return this.default('').transform(val => val === null ? '' : val);\n }\n trim(message = string.trim) {\n return this.transform(val => val != null ? val.trim() : val).test({\n message,\n name: 'trim',\n test: isTrimmed\n });\n }\n lowercase(message = string.lowercase) {\n return this.transform(value => !isAbsent(value) ? value.toLowerCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toLowerCase()\n });\n }\n uppercase(message = string.uppercase) {\n return this.transform(value => !isAbsent(value) ? value.toUpperCase() : value).test({\n message,\n name: 'string_case',\n exclusive: true,\n skipAbsent: true,\n test: value => isAbsent(value) || value === value.toUpperCase()\n });\n }\n}\ncreate$6.prototype = StringSchema.prototype;\n\n//\n// String Interfaces\n//\n\nlet isNaN$1 = value => value != +value;\nfunction create$5() {\n return new NumberSchema();\n}\nclass NumberSchema extends Schema {\n constructor() {\n super({\n type: 'number',\n check(value) {\n if (value instanceof Number) value = value.valueOf();\n return typeof value === 'number' && !isNaN$1(value);\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n if (!this.spec.coerce) return value;\n let parsed = value;\n if (typeof parsed === 'string') {\n parsed = parsed.replace(/\\s/g, '');\n if (parsed === '') return NaN;\n // don't use parseFloat to avoid positives on alpha-numeric strings\n parsed = +parsed;\n }\n\n // null -> NaN isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (this.isType(parsed) || parsed === null) return parsed;\n return parseFloat(parsed);\n });\n });\n }\n min(min, message = number.min) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(min);\n }\n });\n }\n max(max, message = number.max) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(max);\n }\n });\n }\n lessThan(less, message = number.lessThan) {\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n less\n },\n skipAbsent: true,\n test(value) {\n return value < this.resolve(less);\n }\n });\n }\n moreThan(more, message = number.moreThan) {\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n more\n },\n skipAbsent: true,\n test(value) {\n return value > this.resolve(more);\n }\n });\n }\n positive(msg = number.positive) {\n return this.moreThan(0, msg);\n }\n negative(msg = number.negative) {\n return this.lessThan(0, msg);\n }\n integer(message = number.integer) {\n return this.test({\n name: 'integer',\n message,\n skipAbsent: true,\n test: val => Number.isInteger(val)\n });\n }\n truncate() {\n return this.transform(value => !isAbsent(value) ? value | 0 : value);\n }\n round(method) {\n var _method;\n let avail = ['ceil', 'floor', 'round', 'trunc'];\n method = ((_method = method) == null ? void 0 : _method.toLowerCase()) || 'round';\n\n // this exists for symemtry with the new Math.trunc\n if (method === 'trunc') return this.truncate();\n if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', '));\n return this.transform(value => !isAbsent(value) ? Math[method](value) : value);\n }\n}\ncreate$5.prototype = NumberSchema.prototype;\n\n//\n// Number Interfaces\n//\n\nlet invalidDate = new Date('');\nlet isDate = obj => Object.prototype.toString.call(obj) === '[object Date]';\nfunction create$4() {\n return new DateSchema();\n}\nclass DateSchema extends Schema {\n constructor() {\n super({\n type: 'date',\n check(v) {\n return isDate(v) && !isNaN(v.getTime());\n }\n });\n this.withMutation(() => {\n this.transform((value, _raw) => {\n // null -> InvalidDate isn't useful; treat all nulls as null and let it fail on\n // nullability check vs TypeErrors\n if (!this.spec.coerce || this.isType(value) || value === null) return value;\n value = parseIsoDate(value);\n\n // 0 is a valid timestamp equivalent to 1970-01-01T00:00:00Z(unix epoch) or before.\n return !isNaN(value) ? new Date(value) : DateSchema.INVALID_DATE;\n });\n });\n }\n prepareParam(ref, name) {\n let param;\n if (!Reference.isRef(ref)) {\n let cast = this.cast(ref);\n if (!this._typeCheck(cast)) throw new TypeError(`\\`${name}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n param = cast;\n } else {\n param = ref;\n }\n return param;\n }\n min(min, message = date.min) {\n let limit = this.prepareParam(min, 'min');\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n test(value) {\n return value >= this.resolve(limit);\n }\n });\n }\n max(max, message = date.max) {\n let limit = this.prepareParam(max, 'max');\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value <= this.resolve(limit);\n }\n });\n }\n}\nDateSchema.INVALID_DATE = invalidDate;\ncreate$4.prototype = DateSchema.prototype;\ncreate$4.INVALID_DATE = invalidDate;\n\n// @ts-expect-error\nfunction sortFields(fields, excludedEdges = []) {\n let edges = [];\n let nodes = new Set();\n let excludes = new Set(excludedEdges.map(([a, b]) => `${a}-${b}`));\n function addNode(depPath, key) {\n let node = split(depPath)[0];\n nodes.add(node);\n if (!excludes.has(`${key}-${node}`)) edges.push([key, node]);\n }\n for (const key of Object.keys(fields)) {\n let value = fields[key];\n nodes.add(key);\n if (Reference.isRef(value) && value.isSibling) addNode(value.path, key);else if (isSchema(value) && 'deps' in value) value.deps.forEach(path => addNode(path, key));\n }\n return toposort.array(Array.from(nodes), edges).reverse();\n}\n\nfunction findIndex(arr, err) {\n let idx = Infinity;\n arr.some((key, ii) => {\n var _err$path;\n if ((_err$path = err.path) != null && _err$path.includes(key)) {\n idx = ii;\n return true;\n }\n });\n return idx;\n}\nfunction sortByKeyOrder(keys) {\n return (a, b) => {\n return findIndex(keys, a) - findIndex(keys, b);\n };\n}\n\nconst parseJson = (value, _, schema) => {\n if (typeof value !== 'string') {\n return value;\n }\n let parsed = value;\n try {\n parsed = JSON.parse(value);\n } catch (err) {\n /* */\n }\n return schema.isType(parsed) ? parsed : value;\n};\n\n// @ts-ignore\nfunction deepPartial(schema) {\n if ('fields' in schema) {\n const partial = {};\n for (const [key, fieldSchema] of Object.entries(schema.fields)) {\n partial[key] = deepPartial(fieldSchema);\n }\n return schema.setFields(partial);\n }\n if (schema.type === 'array') {\n const nextArray = schema.optional();\n if (nextArray.innerType) nextArray.innerType = deepPartial(nextArray.innerType);\n return nextArray;\n }\n if (schema.type === 'tuple') {\n return schema.optional().clone({\n types: schema.spec.types.map(deepPartial)\n });\n }\n if ('optional' in schema) {\n return schema.optional();\n }\n return schema;\n}\nconst deepHas = (obj, p) => {\n const path = [...normalizePath(p)];\n if (path.length === 1) return path[0] in obj;\n let last = path.pop();\n let parent = getter(join(path), true)(obj);\n return !!(parent && last in parent);\n};\nlet isObject = obj => Object.prototype.toString.call(obj) === '[object Object]';\nfunction unknown(ctx, value) {\n let known = Object.keys(ctx.fields);\n return Object.keys(value).filter(key => known.indexOf(key) === -1);\n}\nconst defaultSort = sortByKeyOrder([]);\nfunction create$3(spec) {\n return new ObjectSchema(spec);\n}\nclass ObjectSchema extends Schema {\n constructor(spec) {\n super({\n type: 'object',\n check(value) {\n return isObject(value) || typeof value === 'function';\n }\n });\n this.fields = Object.create(null);\n this._sortErrors = defaultSort;\n this._nodes = [];\n this._excludedEdges = [];\n this.withMutation(() => {\n if (spec) {\n this.shape(spec);\n }\n });\n }\n _cast(_value, options = {}) {\n var _options$stripUnknown;\n let value = super._cast(_value, options);\n\n //should ignore nulls here\n if (value === undefined) return this.getDefault(options);\n if (!this._typeCheck(value)) return value;\n let fields = this.fields;\n let strip = (_options$stripUnknown = options.stripUnknown) != null ? _options$stripUnknown : this.spec.noUnknown;\n let props = [].concat(this._nodes, Object.keys(value).filter(v => !this._nodes.includes(v)));\n let intermediateValue = {}; // is filled during the transform below\n let innerOptions = Object.assign({}, options, {\n parent: intermediateValue,\n __validating: options.__validating || false\n });\n let isChanged = false;\n for (const prop of props) {\n let field = fields[prop];\n let exists = (prop in value);\n let inputValue = value[prop];\n if (field) {\n let fieldValue;\n\n // safe to mutate since this is fired in sequence\n innerOptions.path = (options.path ? `${options.path}.` : '') + prop;\n field = field.resolve({\n value: inputValue,\n context: options.context,\n parent: intermediateValue\n });\n let fieldSpec = field instanceof Schema ? field.spec : undefined;\n let strict = fieldSpec == null ? void 0 : fieldSpec.strict;\n if (fieldSpec != null && fieldSpec.strip) {\n isChanged = isChanged || prop in value;\n continue;\n }\n fieldValue = !options.__validating || !strict ? field.cast(inputValue, innerOptions) : inputValue;\n if (fieldValue !== undefined) {\n intermediateValue[prop] = fieldValue;\n }\n } else if (exists && !strip) {\n intermediateValue[prop] = inputValue;\n }\n if (exists !== prop in intermediateValue || intermediateValue[prop] !== inputValue) {\n isChanged = true;\n }\n }\n return isChanged ? intermediateValue : value;\n }\n _validate(_value, options = {}, panic, next) {\n let {\n from = [],\n originalValue = _value,\n recursive = this.spec.recursive\n } = options;\n options.from = [{\n schema: this,\n value: originalValue\n }, ...from];\n // this flag is needed for handling `strict` correctly in the context of\n // validation vs just casting. e.g strict() on a field is only used when validating\n options.__validating = true;\n options.originalValue = originalValue;\n super._validate(_value, options, panic, (objectErrors, value) => {\n if (!recursive || !isObject(value)) {\n next(objectErrors, value);\n return;\n }\n originalValue = originalValue || value;\n let tests = [];\n for (let key of this._nodes) {\n let field = this.fields[key];\n if (!field || Reference.isRef(field)) {\n continue;\n }\n tests.push(field.asNestedTest({\n options,\n key,\n parent: value,\n parentPath: options.path,\n originalParent: originalValue\n }));\n }\n this.runTests({\n tests,\n value,\n originalValue,\n options\n }, panic, fieldErrors => {\n next(fieldErrors.sort(this._sortErrors).concat(objectErrors), value);\n });\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n next.fields = Object.assign({}, this.fields);\n next._nodes = this._nodes;\n next._excludedEdges = this._excludedEdges;\n next._sortErrors = this._sortErrors;\n return next;\n }\n concat(schema) {\n let next = super.concat(schema);\n let nextFields = next.fields;\n for (let [field, schemaOrRef] of Object.entries(this.fields)) {\n const target = nextFields[field];\n nextFields[field] = target === undefined ? schemaOrRef : target;\n }\n return next.withMutation(s =>\n // XXX: excludes here is wrong\n s.setFields(nextFields, [...this._excludedEdges, ...schema._excludedEdges]));\n }\n _getDefault(options) {\n if ('default' in this.spec) {\n return super._getDefault(options);\n }\n\n // if there is no default set invent one\n if (!this._nodes.length) {\n return undefined;\n }\n let dft = {};\n this._nodes.forEach(key => {\n var _innerOptions;\n const field = this.fields[key];\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n dft[key] = field && 'getDefault' in field ? field.getDefault(innerOptions) : undefined;\n });\n return dft;\n }\n setFields(shape, excludedEdges) {\n let next = this.clone();\n next.fields = shape;\n next._nodes = sortFields(shape, excludedEdges);\n next._sortErrors = sortByKeyOrder(Object.keys(shape));\n // XXX: this carries over edges which may not be what you want\n if (excludedEdges) next._excludedEdges = excludedEdges;\n return next;\n }\n shape(additions, excludes = []) {\n return this.clone().withMutation(next => {\n let edges = next._excludedEdges;\n if (excludes.length) {\n if (!Array.isArray(excludes[0])) excludes = [excludes];\n edges = [...next._excludedEdges, ...excludes];\n }\n\n // XXX: excludes here is wrong\n return next.setFields(Object.assign(next.fields, additions), edges);\n });\n }\n partial() {\n const partial = {};\n for (const [key, schema] of Object.entries(this.fields)) {\n partial[key] = 'optional' in schema && schema.optional instanceof Function ? schema.optional() : schema;\n }\n return this.setFields(partial);\n }\n deepPartial() {\n const next = deepPartial(this);\n return next;\n }\n pick(keys) {\n const picked = {};\n for (const key of keys) {\n if (this.fields[key]) picked[key] = this.fields[key];\n }\n return this.setFields(picked, this._excludedEdges.filter(([a, b]) => keys.includes(a) && keys.includes(b)));\n }\n omit(keys) {\n const remaining = [];\n for (const key of Object.keys(this.fields)) {\n if (keys.includes(key)) continue;\n remaining.push(key);\n }\n return this.pick(remaining);\n }\n from(from, to, alias) {\n let fromGetter = getter(from, true);\n return this.transform(obj => {\n if (!obj) return obj;\n let newObj = obj;\n if (deepHas(obj, from)) {\n newObj = Object.assign({}, obj);\n if (!alias) delete newObj[from];\n newObj[to] = fromGetter(obj);\n }\n return newObj;\n });\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n\n /**\n * Similar to `noUnknown` but only validates that an object is the right shape without stripping the unknown keys\n */\n exact(message) {\n return this.test({\n name: 'exact',\n exclusive: true,\n message: message || object.exact,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return unknownKeys.length === 0 || this.createError({\n params: {\n properties: unknownKeys.join(', ')\n }\n });\n }\n });\n }\n stripUnknown() {\n return this.clone({\n noUnknown: true\n });\n }\n noUnknown(noAllow = true, message = object.noUnknown) {\n if (typeof noAllow !== 'boolean') {\n message = noAllow;\n noAllow = true;\n }\n let next = this.test({\n name: 'noUnknown',\n exclusive: true,\n message: message,\n test(value) {\n if (value == null) return true;\n const unknownKeys = unknown(this.schema, value);\n return !noAllow || unknownKeys.length === 0 || this.createError({\n params: {\n unknown: unknownKeys.join(', ')\n }\n });\n }\n });\n next.spec.noUnknown = noAllow;\n return next;\n }\n unknown(allow = true, message = object.noUnknown) {\n return this.noUnknown(!allow, message);\n }\n transformKeys(fn) {\n return this.transform(obj => {\n if (!obj) return obj;\n const result = {};\n for (const key of Object.keys(obj)) result[fn(key)] = obj[key];\n return result;\n });\n }\n camelCase() {\n return this.transformKeys(camelCase);\n }\n snakeCase() {\n return this.transformKeys(snakeCase);\n }\n constantCase() {\n return this.transformKeys(key => snakeCase(key).toUpperCase());\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.fields = {};\n for (const [key, value] of Object.entries(next.fields)) {\n var _innerOptions2;\n let innerOptions = options;\n if ((_innerOptions2 = innerOptions) != null && _innerOptions2.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[key]\n });\n }\n base.fields[key] = value.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$3.prototype = ObjectSchema.prototype;\n\nfunction create$2(type) {\n return new ArraySchema(type);\n}\nclass ArraySchema extends Schema {\n constructor(type) {\n super({\n type: 'array',\n spec: {\n types: type\n },\n check(v) {\n return Array.isArray(v);\n }\n });\n\n // `undefined` specifically means uninitialized, as opposed to \"no subtype\"\n this.innerType = void 0;\n this.innerType = type;\n }\n _cast(_value, _opts) {\n const value = super._cast(_value, _opts);\n\n // should ignore nulls here\n if (!this._typeCheck(value) || !this.innerType) {\n return value;\n }\n let isChanged = false;\n const castArray = value.map((v, idx) => {\n const castElement = this.innerType.cast(v, Object.assign({}, _opts, {\n path: `${_opts.path || ''}[${idx}]`,\n parent: value,\n originalValue: v,\n value: v,\n index: idx\n }));\n if (castElement !== v) {\n isChanged = true;\n }\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n var _options$recursive;\n // let sync = options.sync;\n // let path = options.path;\n let innerType = this.innerType;\n // let endEarly = options.abortEarly ?? this.spec.abortEarly;\n let recursive = (_options$recursive = options.recursive) != null ? _options$recursive : this.spec.recursive;\n options.originalValue != null ? options.originalValue : _value;\n super._validate(_value, options, panic, (arrayErrors, value) => {\n var _options$originalValu2;\n if (!recursive || !innerType || !this._typeCheck(value)) {\n next(arrayErrors, value);\n return;\n }\n\n // #950 Ensure that sparse array empty slots are validated\n let tests = new Array(value.length);\n for (let index = 0; index < value.length; index++) {\n var _options$originalValu;\n tests[index] = innerType.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(arrayErrors), value));\n });\n }\n clone(spec) {\n const next = super.clone(spec);\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n return next;\n }\n\n /** Parse an input JSON string to an object */\n json() {\n return this.transform(parseJson);\n }\n concat(schema) {\n let next = super.concat(schema);\n\n // @ts-expect-error readonly\n next.innerType = this.innerType;\n if (schema.innerType)\n // @ts-expect-error readonly\n next.innerType = next.innerType ?\n // @ts-expect-error Lazy doesn't have concat and will break\n next.innerType.concat(schema.innerType) : schema.innerType;\n return next;\n }\n of(schema) {\n // FIXME: this should return a new instance of array without the default to be\n let next = this.clone();\n if (!isSchema(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema not: ' + printValue(schema));\n\n // @ts-expect-error readonly\n next.innerType = schema;\n next.spec = Object.assign({}, next.spec, {\n types: schema\n });\n return next;\n }\n length(length, message = array.length) {\n return this.test({\n message,\n name: 'length',\n exclusive: true,\n params: {\n length\n },\n skipAbsent: true,\n test(value) {\n return value.length === this.resolve(length);\n }\n });\n }\n min(min, message) {\n message = message || array.min;\n return this.test({\n message,\n name: 'min',\n exclusive: true,\n params: {\n min\n },\n skipAbsent: true,\n // FIXME(ts): Array<typeof T>\n test(value) {\n return value.length >= this.resolve(min);\n }\n });\n }\n max(max, message) {\n message = message || array.max;\n return this.test({\n message,\n name: 'max',\n exclusive: true,\n params: {\n max\n },\n skipAbsent: true,\n test(value) {\n return value.length <= this.resolve(max);\n }\n });\n }\n ensure() {\n return this.default(() => []).transform((val, original) => {\n // We don't want to return `null` for nullable schema\n if (this._typeCheck(val)) return val;\n return original == null ? [] : [].concat(original);\n });\n }\n compact(rejector) {\n let reject = !rejector ? v => !!v : (v, i, a) => !rejector(v, i, a);\n return this.transform(values => values != null ? values.filter(reject) : values);\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n if (next.innerType) {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[0]\n });\n }\n base.innerType = next.innerType.describe(innerOptions);\n }\n return base;\n }\n}\ncreate$2.prototype = ArraySchema.prototype;\n\n// @ts-ignore\nfunction create$1(schemas) {\n return new TupleSchema(schemas);\n}\nclass TupleSchema extends Schema {\n constructor(schemas) {\n super({\n type: 'tuple',\n spec: {\n types: schemas\n },\n check(v) {\n const types = this.spec.types;\n return Array.isArray(v) && v.length === types.length;\n }\n });\n this.withMutation(() => {\n this.typeError(tuple.notType);\n });\n }\n _cast(inputValue, options) {\n const {\n types\n } = this.spec;\n const value = super._cast(inputValue, options);\n if (!this._typeCheck(value)) {\n return value;\n }\n let isChanged = false;\n const castArray = types.map((type, idx) => {\n const castElement = type.cast(value[idx], Object.assign({}, options, {\n path: `${options.path || ''}[${idx}]`,\n parent: value,\n originalValue: value[idx],\n value: value[idx],\n index: idx\n }));\n if (castElement !== value[idx]) isChanged = true;\n return castElement;\n });\n return isChanged ? castArray : value;\n }\n _validate(_value, options = {}, panic, next) {\n let itemTypes = this.spec.types;\n super._validate(_value, options, panic, (tupleErrors, value) => {\n var _options$originalValu2;\n // intentionally not respecting recursive\n if (!this._typeCheck(value)) {\n next(tupleErrors, value);\n return;\n }\n let tests = [];\n for (let [index, itemSchema] of itemTypes.entries()) {\n var _options$originalValu;\n tests[index] = itemSchema.asNestedTest({\n options,\n index,\n parent: value,\n parentPath: options.path,\n originalParent: (_options$originalValu = options.originalValue) != null ? _options$originalValu : _value\n });\n }\n this.runTests({\n value,\n tests,\n originalValue: (_options$originalValu2 = options.originalValue) != null ? _options$originalValu2 : _value,\n options\n }, panic, innerTypeErrors => next(innerTypeErrors.concat(tupleErrors), value));\n });\n }\n describe(options) {\n const next = (options ? this.resolve(options) : this).clone();\n const base = super.describe(options);\n base.innerType = next.spec.types.map((schema, index) => {\n var _innerOptions;\n let innerOptions = options;\n if ((_innerOptions = innerOptions) != null && _innerOptions.value) {\n innerOptions = Object.assign({}, innerOptions, {\n parent: innerOptions.value,\n value: innerOptions.value[index]\n });\n }\n return schema.describe(innerOptions);\n });\n return base;\n }\n}\ncreate$1.prototype = TupleSchema.prototype;\n\nfunction create(builder) {\n return new Lazy(builder);\n}\nfunction catchValidationError(fn) {\n try {\n return fn();\n } catch (err) {\n if (ValidationError.isError(err)) return Promise.reject(err);\n throw err;\n }\n}\nclass Lazy {\n constructor(builder) {\n this.type = 'lazy';\n this.__isYupSchema__ = true;\n this.spec = void 0;\n this._resolve = (value, options = {}) => {\n let schema = this.builder(value, options);\n if (!isSchema(schema)) throw new TypeError('lazy() functions must return a valid schema');\n if (this.spec.optional) schema = schema.optional();\n return schema.resolve(options);\n };\n this.builder = builder;\n this.spec = {\n meta: undefined,\n optional: false\n };\n }\n clone(spec) {\n const next = new Lazy(this.builder);\n next.spec = Object.assign({}, this.spec, spec);\n return next;\n }\n optionality(optional) {\n const next = this.clone({\n optional\n });\n return next;\n }\n optional() {\n return this.optionality(true);\n }\n resolve(options) {\n return this._resolve(options.value, options);\n }\n cast(value, options) {\n return this._resolve(value, options).cast(value, options);\n }\n asNestedTest(config) {\n let {\n key,\n index,\n parent,\n options\n } = config;\n let value = parent[index != null ? index : key];\n return this._resolve(value, Object.assign({}, options, {\n value,\n parent\n })).asNestedTest(config);\n }\n validate(value, options) {\n return catchValidationError(() => this._resolve(value, options).validate(value, options));\n }\n validateSync(value, options) {\n return this._resolve(value, options).validateSync(value, options);\n }\n validateAt(path, value, options) {\n return catchValidationError(() => this._resolve(value, options).validateAt(path, value, options));\n }\n validateSyncAt(path, value, options) {\n return this._resolve(value, options).validateSyncAt(path, value, options);\n }\n isValid(value, options) {\n try {\n return this._resolve(value, options).isValid(value, options);\n } catch (err) {\n if (ValidationError.isError(err)) {\n return Promise.resolve(false);\n }\n throw err;\n }\n }\n isValidSync(value, options) {\n return this._resolve(value, options).isValidSync(value, options);\n }\n describe(options) {\n return options ? this.resolve(options).describe(options) : {\n type: 'lazy',\n meta: this.spec.meta,\n label: undefined\n };\n }\n meta(...args) {\n if (args.length === 0) return this.spec.meta;\n let next = this.clone();\n next.spec.meta = Object.assign(next.spec.meta || {}, args[0]);\n return next;\n }\n get ['~standard']() {\n const schema = this;\n const standard = {\n version: 1,\n vendor: 'yup',\n async validate(value) {\n try {\n const result = await schema.validate(value, {\n abortEarly: false\n });\n return {\n value: result\n };\n } catch (err) {\n if (ValidationError.isError(err)) {\n return {\n issues: issuesFromValidationError(err)\n };\n }\n throw err;\n }\n }\n };\n return standard;\n }\n}\n\nfunction setLocale(custom) {\n Object.keys(custom).forEach(type => {\n // @ts-ignore\n Object.keys(custom[type]).forEach(method => {\n // @ts-ignore\n locale[type][method] = custom[type][method];\n });\n });\n}\n\nfunction addMethod(schemaType, name, fn) {\n if (!schemaType || !isSchema(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function');\n if (typeof name !== 'string') throw new TypeError('A Method name must be provided');\n if (typeof fn !== 'function') throw new TypeError('Method function must be provided');\n schemaType.prototype[name] = fn;\n}\n\nexport { ArraySchema, BooleanSchema, DateSchema, Lazy as LazySchema, MixedSchema, NumberSchema, ObjectSchema, Schema, StringSchema, TupleSchema, ValidationError, addMethod, create$2 as array, create$7 as bool, create$7 as boolean, create$4 as date, locale as defaultLocale, getIn, isSchema, create as lazy, create$8 as mixed, create$5 as number, create$3 as object, printValue, reach, create$9 as ref, setLocale, create$6 as string, create$1 as tuple };\n","import { TFunction } from 'i18next';\nimport * as yup from 'yup';\n\nexport const getSettingsFormProps = (t: TFunction) => {\n yup.setLocale({\n mixed: {\n required: t('This field is required'),\n },\n });\n return {\n initialValues: {\n departmentId: undefined,\n refreshInterval: 60,\n },\n validationSchema: yup.object({\n departmentId: yup.string(),\n refreshInterval: yup.number().oneOf([15, 30, 60]).required(),\n }),\n };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { useGqlClients, WidgetProps } from 'andoncloud-dashboard-toolkit';\nimport { BaseWidget } from 'andoncloud-widget-base';\n\nimport locales from '@/locales';\nimport { WidgetData, WidgetSettings } from '@/types';\nimport { getInitialState } from '@/utils/state';\nimport { LIBRARY_VERSION } from '@/version';\n\nimport SettingsFormContent from '../SettingsFormContent';\nimport WidgetView from '../WidgetView';\n\nimport { getSettingsFormProps } from './utils';\n\nconst Widget: React.FC<WidgetProps<WidgetData, WidgetSettings>> = ({\n url,\n wsUrl,\n lang,\n data,\n settings,\n ...widgetProps\n}) => {\n const { graphqlSdk, gqlWsClient } = useGqlClients({ url, wsUrl, lang });\n const [widgetData, setWidgetData] = useState<WidgetData | undefined>(data);\n\n useEffect(() => {\n if (!data && graphqlSdk) {\n Promise.all([graphqlSdk.departments(), graphqlSdk.shifts()])\n .then(([{ departments }, { shifts }]) => {\n const initialState = getInitialState(shifts);\n\n if (!initialState) {\n return;\n }\n const { date, shift } = initialState;\n\n return graphqlSdk\n .workplaceAssignments({\n input: {\n date,\n shiftId: shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return setWidgetData({\n ...workplaceAssignments,\n departments,\n shifts,\n });\n });\n })\n .catch(() => {});\n }\n }, [data, graphqlSdk, settings?.departmentId]);\n\n return (\n <BaseWidget\n lang={lang}\n locales={locales}\n data={widgetData}\n gqlClients={{ graphqlSdk, gqlWsClient }}\n WidgetView={WidgetView}\n getSettingsFormProps={getSettingsFormProps}\n SettingsFormContent={SettingsFormContent}\n version={LIBRARY_VERSION}\n data-testid=\"station-assignment-widget\"\n {...widgetProps}\n />\n );\n};\n\nexport default Widget;\n","export { default as Widget } from './components/Widget';\n\nexport const getDisplayName = (lang: 'en' | 'pl') => {\n switch (lang) {\n case 'en':\n return 'Operator assignment';\n case 'pl':\n return 'Przypisanie operatorów';\n default:\n return 'station-assignment-widget';\n }\n};\n\nexport const requiredFeatures = ['feature.station-assignment-widget'];\nexport const extraPermissions: string[] = [];\n\nexport { LIBRARY_VERSION as version } from './version';\n"],"names":["resources","en","translation","pl","DATETIME_FORMAT","sortShifts","shifts","concat","sort","a","b","startedAt","localeCompare","findShiftByName","name","find","s","makeShiftDateTime","date","shift","shiftStart","dayjs","hour","minute","second","format","extractDate","dateTime","getInitialState","sortedShifts","now","today","normalizedShifts","normalizeShifts","currentNormalizedShift","getCurrentShift","isCurrentShift","nextNormalizedShift","isAfter","tomorrow","add","startOf","tomorrowNormalizedShifts","length","canNavigate","currentState","direction","currentDate","minDate","currentShift","getMinDate","maxDate","currentIndex","findIndex","id","subtract","LIBRARY_VERSION","SettingsFormContent","_ref","_formProps$values$dep","data","formProps","_useState","useState","tabValue","setTabValue","t","useTranslation","React","createElement","TabContext","value","Box","sx","borderBottom","borderColor","TabList","onChange","_","newValue","Tab","label","TabPanel","FormControl","fullWidth","InputLabel","Select","labelId","variant","values","departmentId","handleChange","MenuItem","departments","map","department","key","refreshInterval","nodejsCustomInspectSymbol$1","Symbol","for","undefined","defineInspect","classObject","fn","prototype","toJSON","Boolean","Error","invariant","inspect","nodejsCustomInspectSymbol","Location","startToken","endToken","source","this","start","end","Token","kind","line","column","prev","next","isNode","maybeNode","_typeof","obj","iterator","constructor","formatValue","seenValues","JSON","stringify","previouslySeenValues","indexOf","customInspectFn","object","String","getCustomFn","customValue","call","Array","isArray","array","len","Math","min","remaining","items","i","push","join","formatArray","keys","Object","tag","toString","replace","getObjectTag","formatObject","formatObjectValue","QueryDocumentKeys","Name","Document","OperationDefinition","VariableDefinition","Variable","SelectionSet","Field","Argument","FragmentSpread","InlineFragment","FragmentDefinition","IntValue","FloatValue","StringValue","BooleanValue","NullValue","EnumValue","ListValue","ObjectValue","ObjectField","Directive","NamedType","ListType","NonNullType","SchemaDefinition","OperationTypeDefinition","ScalarTypeDefinition","ObjectTypeDefinition","FieldDefinition","InputValueDefinition","InterfaceTypeDefinition","UnionTypeDefinition","EnumTypeDefinition","EnumValueDefinition","InputObjectTypeDefinition","DirectiveDefinition","SchemaExtension","ScalarTypeExtension","ObjectTypeExtension","InterfaceTypeExtension","UnionTypeExtension","EnumTypeExtension","InputObjectTypeExtension","BREAK","freeze","getVisitFn","visitor","isLeaving","kindVisitor","kindSpecificVisitor","leave","enter","specificVisitor","specificKindVisitor","printDocASTReducer","node","definitions","op","operation","varDefs","wrap","variableDefinitions","directives","selectionSet","variable","type","defaultValue","_ref2","block","selections","_ref3","args","arguments","prefix","alias","argsLine","indent","_ref4","_ref5","_ref6","typeCondition","_ref7","_ref8","_ref9","_ref10","indentation","preferMultipleLines","isSingleLine","printAsMultipleLines","result","printBlockString","_ref11","_ref12","_ref13","_ref14","fields","_ref15","_ref16","_ref17","_ref18","_ref19","addDescription","_ref20","operationTypes","_ref21","_ref22","_ref23","interfaces","_ref24","hasMultilineItems","_ref25","_ref26","_ref27","types","_ref28","_ref29","_ref30","_ref31","repeatable","locations","_ref32","_ref33","_ref34","_ref35","_ref36","_ref37","_ref38","cb","description","maybeArray","_maybeArray$filter$jo","separator","filter","x","maybeString","str","isMultiline","some","formatProdErrorMessage","code","objectIs","is","y","useSyncExternalStore","useRef","useEffect","useMemo","useDebugValue","subscribe","getSnapshot","getServerSnapshot","selector","isEqual","instRef","current","inst","hasValue","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","NODE_ENV","__REACT_DEVTOOLS_GLOBAL_HOOK__","registerInternalModuleStart","require$$0","exports","useSyncExternalStoreWithSelector","registerInternalModuleStop","module","require$$1","isProduction","condition","message","provided","getRect","top","right","bottom","left","width","height","center","expand","target","expandBy","shrink","shrinkBy","noSpacing","createBox","borderBox","_ref2$margin","margin","_ref2$border","border","_ref2$padding","padding","marginBox","paddingBox","contentBox","parse","raw","slice","Number","isNaN","offset","original","change","shiftBy","shifted","withScroll","scroll","window","pageXOffset","pageYOffset","calculateBox","styles","marginTop","marginRight","marginBottom","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","getBox","el","getBoundingClientRect","getComputedStyle","rafSchd$1","lastArgs","frameId","wrapperFn","_len","_key","requestAnimationFrame","apply","cancel","cancelAnimationFrame","_extends","assign","bind","n","e","r","hasOwnProperty","isProduction$1","spacesAndTabs","lineStartWithSpaces","clean$2","trim","getDevMessage","log","console","getFormattedMessage","warning","error","noop$2","bindEvents","bindings","sharedOptions","unbindings","binding","options","shared","fromBinding","getOptions","addEventListener","eventName","removeEventListener","forEach","unbind","prefix$1","RbdInvariant","ErrorBoundary","Component","super","callbacks","onWindowError","event","getCallbacks","isDragging","tryAbort","err","preventDefault","setCallbacks","componentDidMount","componentDidCatch","setState","componentWillUnmount","render","props","children","position","index","withLocation","destination","isInHomeList","droppableId","startPosition","endPosition","withCombine","combine","draggableId","returnedToStart","preset","update","location","reason","isEqual$2","first","areInputsEqual","newInputs","lastInputs","getResult","inputs","initial","isFirstRun","committed","cache","useCallback","callback","origin","point1","point2","isEqual$1","negate","point","patch","otherValue","distance","sqrt","closest$1","points","offsetByPosition","spacing","getCorners","clip","frame","shouldClipSubject","executeClip","subject","max","pageMarginBox","getSubject","page","withPlaceholder","axis","scrolled","scroll$1","diff","displacement","increased","increase","increasedBy","active","scrollDroppable","droppable","newScroll","scrollable","scrollDiff","scrollDisplacement","memoizeOne","resultFn","memoized","newArgs","lastThis","lastResult","clear","toDroppableMap","droppables","reduce","previous","descriptor","toDraggableMap","draggables","toDroppableList","toDraggableList","getDraggablesInsideDroppable","draggable","tryGetDestination","impact","at","tryGetCombine","removeDraggableFromList","remove","list","item","isHomeOf","noDisplacedBy","emptyGroups","invisible","visible","all","noImpact","displaced","displacedBy","isWithin","lowerBound","upperBound","isPartiallyVisibleThroughFrame","isWithinVertical","isWithinHorizontal","isPartiallyVisibleVertically","isPartiallyVisibleHorizontally","isBiggerVertically","isBiggerHorizontally","isTotallyVisibleThroughFrame","vertical","crossAxisLine","size","crossAxisStart","crossAxisEnd","crossAxisSize","horizontal","isVisible$1","toBeDisplaced","viewport","withDroppableDisplacement","isVisibleThroughFrameFn","displacedTarget","getDroppableDisplaced","isVisibleInDroppable","isVisibleInViewport","isTotallyVisible","getDisplacementGroups","afterDragging","forceShouldAnimate","last","groups","getTarget","shouldAnimate","getShouldAnimate","goAtEnd","insideDestination","inHomeList","newIndex","indexOfLastItem","getIndexOfLastItem","calculateReorderImpact","match","withoutDragging","sliceFrom","didStartAfterCritical","afterCritical","effected","distanceFromStartToBorderBoxCenter","box","getCrossAxisBorderBoxCenter","isMoving","goAfter","moveRelativeTo","goBefore","distanceFromEndToBorderBoxCenter","getPageBorderBoxCenterFromImpact","withoutDisplacement","getResultWithoutDroppableDisplacement","whenReordering","draggablePage","goIntoStart","moveInto","closestAfter","closest","withDisplacement","whenCombining","combineWith","displaceBy","getCombinedItemDisplacement","isDisplaced","scrollViewport","getDraggables$1","ids","getClientFromPageBorderBoxCenter","pageBorderBoxCenter","withoutPageScrollChange","withViewportDisplacement","client","isTotallyVisibleInNewLocation","newPageBorderBoxCenter","onlyOnMainAxis","changeNeeded","isTotallyVisibleOnAxis","getKnownActive","rect","getCurrentPageBorderBoxCenter","getCurrentPageBorderBox","getDisplacedBy","withMaxScroll","addPlaceholder","placeholderSize","requiredGrowth","getRequiredGrowthForPlaceholder","mode","availableSpace","needsToGrowBy","sum","dimension","added","oldFrameMaxScroll","maxScroll","newFrame","whatIsDraggedOver","isMovementAllowed","state","phase","isPositionInFrame","offsetRectByPosition","getIsDisplaced","getDragImpact","pageOffset","previousImpact","pageBorderBox","destinationId","candidates","isEnabled","childCenter","isContained","isStartContained","isEndContained","startCenter","sorted","candidate","getFurthestAway","getDroppableOver","pageBorderBoxWithDroppableScroll","withDroppableScroll","area","getCombineImpact","targetRect","isCombineEnabled","targetStart","targetEnd","child","childRect","threshold","didStartAfterCritical$1","getReorderImpact","atIndex","patchDroppableMap","updated","clientSelection","forcedClientSelection","dimensions","forcedDimensions","forcedViewport","forcedImpact","scrollJumpRequest","selection","borderBoxCenter","critical","newImpact","withUpdatedPlaceholders","recomputePlaceholders","cleaned","clearUnusedPlaceholder","lastDroppable","oldMaxScroll","removePlaceholder","isOver","patched","recompute","getDraggables","getClientBorderBoxCenter","refreshSnap","movementMode","needsVisibilityCheck","getLiftEffect","home","insideHome","rawIndex","inVirtualList","isSnapping","postDroppableChange","isEnabledChanging","patchDimensionMap","removeScrollJumpRequest","idle$2","completed","shouldFlush","reducer","action","payload","isWindowScrollAllowed","every","isFixedOnPage","onLiftImpact","publishWhileDraggingInVirtual","published","withScrollChange","modified","updatedAdditions","adjustAdditionsForScrollChanges","additions","updatedDroppables","windowScrollChange","getFrame","moved","offsetDraggable","offset$1","initialWindowScroll","placeholder","removals","wasOverId","wasOver","draggingState","isWaiting","moveInDirection","isActuallyOver","getDroppableOver$1","isMainAxisMovementAllowed","isMovingOnMainAxis","isMovingForward","previousPageBorderBoxCenter","moveToNextPlace","previousClientSelection","moveToNextCombine","getImpact","closestId","withoutDraggable","indexOfClosest","d","proposedIndex","moveToNextIndex","wasAt","fromReorder","lastIndex","fromCombine","combineId","combineWithIndex","cautious","speculativelyIncrease","maxScrollChange","scrolledViewport","scrolledDroppable","withViewportScroll","tryGetVisible","moveCrossAxis","getBestCrossAxisDroppable","isBetweenSourceClipped","activeOfTarget","isBetweenDestinationClipped","contains","isWithinDroppable","getClosestDraggable","distanceToA","distanceToB","moveToNewDroppable","proposed","proposedPageBorderBoxCenter","isGoingBeforeTarget","relativeTo","dropDuration","newHomeClientOffset","guard","predicate","publishWhileDragging","collectionStarting","updateDroppableScroll","updateDroppableIsEnabled","updateDroppableIsCombineEnabled","move","moveUp","moveDown","moveRight","moveLeft","completeDrop","drop","curves","timings","outOfTheWay","minDropTime","maxDropTime","outOfTheWayTiming","transitions","fluid","snap","duration","timing","moveTo","transforms","dropTimeRange","dropMiddleware","getState","dispatch","didDropInsideDroppable","getDropImpact","lastImpact","getNewHomeClientOffset","newClientCenter","getDropDuration","distance$1","toFixed","animateDrop","getWindowScroll","scrollListener","store","listener","onWindowScroll","scheduled","rafSchd","passive","capture","document","getWindowScrollBinding","isActive","stop","getScrollListener","shouldStop$1","withTimings","getDragStart","execute","responder","announce","getDefaultMessage","willExpire","wasCalled","isExpired","timeoutId","setTimeout","clearTimeout","getExpiringAnnounce","dropAnimationFinishMiddleware","dropAnimationFlushOnScrollMiddleware","once","pendingDrop","postActionState","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","getMaxScroll","scrollHeight","scrollWidth","getDocumentElement","doc","documentElement","getMaxWindowScroll","clientWidth","clientHeight","shouldPublishUpdate","registry","dragging","entry","getById","canStartDrag","scrollWindow","scrollBy","getScrollableDroppables","defaultAutoScrollerOptions","startFromPercentage","maxScrollAtPercentage","maxPixelScroll","ease","percentage","durationDampening","stopDampeningAt","accelerateAt","disabled","getPercentage","startOfRange","endOfRange","range","getValue","distanceToEdge","thresholds","dragStartTime","shouldUseTimeDampening","getAutoScrollerOptions","getValueFromDistance","autoScrollerOptions","startScrollingFrom","maxScrollValueAt","percentageFromMaxScrollValueAt","ceil","dampenValueByTime","proposedScroll","stopAt","runTime","Date","betweenAccelerateAtAndStopAtPercentage","getScrollOnAxis","container","distanceToEdges","getDistanceThresholds","clean","getScroll$1","required","limited","adjustForSizeLimits","isTooBigVertically","isTooBigHorizontally","smallestSigned","getOverlap","getRemainder","targetScroll","overlap","canPartiallyScroll","rawMax","smallestChange","canScrollWindow","canScrollDroppable","getWindowScrollChange","getBestScrollableDroppable","getScrollableDroppableOver","maybe","getDroppableScrollChange","dragHandle","base","contextId","scrollContainer","getStyles","rules","property","rule","useIsomorphicLayoutEffect","useLayoutEffect","getHead","head","querySelector","createStyleEl","nonce","setAttribute","querySelectorAll","parentNode","from","getWindowFromEl","ownerDocument","defaultView","isHtmlElement","HTMLElement","findDragHandle","possible","handle","getAttribute","createRegistry","entries","subscribers","notify","findDraggableById","findDroppableById","register","uniqueId","unregister","findById","exists","getAllByType","splice","StoreContext","createContext","getBodyElement","body","visuallyHidden","overflow","defaults","useUniqueId","useId","AppContext","semver","getVersion","exec","major","minor","suffix","useDev","useHook","useDevSetupWarning","usePrevious","ref","tab","pageUp","pageDown","preventedKeys","preventStandardKeyEvents","keyCode","supportedEventName","idle$1","noop$1","scrollJumpKeys","idle","interactiveTagNames","isAnInteractiveElement","parent","includes","tagName","toLowerCase","attribute","parentElement","isEventInInteractiveElement","getBorderBoxCenterPosition","supportedMatchesName","Element","closestPonyfill","expected","isLockActive","shouldWarn","canStart","lockAPI","isClaimed","defaultSensors","api","phaseRef","unbindEventsRef","startCaptureBinding","defaultPrevented","button","ctrlKey","metaKey","shiftKey","altKey","findClosestDraggableId","actions","tryGetLock","sourceEvent","clientX","clientY","startPendingDrag","preventForcePressBinding","findOptionsForDraggable","shouldRespectForcePress","canGetLock","listenForCapture","shouldBlockNextClick","abort","bindCapturingEvents","getPhase","setPhase","abs","fluidLift","getCaptureBindings","preDrag","isCapturing","snapLift","getDraggingBindings","touch","touches","longPressTimerId","unbindTarget","hasMoved","force","shouldRespect","getHandleBindings","unbindWindow","getWindowBindings","startDragging","useSensorMarshal","customSensors","enableDefaultSensors","useSensors","lock","release","claim","abandon","newLock","tryAbandon","create","tryAbandonLock","forceStop","forceSensorStop","draggable$1","findDraggable","canDragInteractiveElements","getShouldRespectForcePress","tryDispatchWhenDragging","getAction","lift","finish","cleanup","lift$1","liftActionArgs","move$1","tryStart","getSelector","findClosestDragHandleFromEvent","tryGetClosestDraggableIdFromEvent","tryReleaseLock","isLockClaimed","sensorHooks","previousRef","getStore","lazyRef","App","sensors","dragHandleUsageInstructions","lazyStoreRef","checkReactVersion","peerDepValue","actualValue","peerDep","actual","isSatisfied","peerDependencies","version","doctype","publicId","checkDoctype","lastPropsRef","getResponders","onBeforeCapture","flushSync","onBeforeCapureCallback","onBeforeDragStart","onDragStart","onDragEnd","onDragUpdate","createResponders","createAutoScrollerOptions","getId","style","appendChild","removeChild","textContent","useAnnouncer","dragHandleUsageInstructionsId","text","getElementId","display","useHiddenTextElement","styleMarshal","context","dragHandle$1","grabCursor","always","resting","dropAnimating","transition","userCancel","getStyles$1","alwaysRef","dynamicRef","setDynamicStyle","setAlwaysStyle","dynamic","dropping","useStyleMarshal","lazyDispatch","marshalCallbacks","bindActionCreators","useRegistry","dimensionMarshal","createDimensionMarshal","collection","publisher","staging","collect","getDimension","getScrollWhileDragging","publish","createPublisher","subscriber","marshal","startPublishing","request","unsubscribe","getInitialPublish","scrollOptions","getViewport","windowScroll","getDimensionAndWatchScroll","stopPublishing","dragStopped","autoScroller","createAutoScroller","fluidScroller","createFluidScroller","scheduleWindowScroll","scheduleDroppableScroll","tryScroll","wasScrollNeeded","fakeScrollCallback","jumpScroll","createJumpScroller","droppableRemainder","scrollDroppableAsMuchAsItCan","getDroppableOverlap","whatTheDroppableCanScroll","windowRemainder","scrollWindowAsMuchAsItCan","getWindowOverlap","whatTheWindowCanScroll","moveByOffset","focusMarshal","entriesRef","recordRef","restoreFocusFrameRef","isMountedRef","focus","tryGiveFocus","tryGiveFocusTo","activeElement","tryShiftRecord","redirectTo","tryRestoreFocusRecorded","record","tryRecordFocus","focused","useFocusMarshal","createStore","createStore$1","applyMiddleware","dimensionMarshalStopper","shouldPublishImmediately","indexes","errors","formatted","checkIndexes","validateDimensions","shouldStop","autoScroll","isWatching","responders","getPublisher","asyncMarshal","getAsyncMarshal","timerId","flush","shallow","beforeCapture","beforeStart","lastCritical","lastLocation","lastCombine","hasCriticalChanged","isCriticalEqual","hasLocationChanged","areLocationsEqual","hasGroupingChanged","isCombineEqual","tryResetStore","getCanLift","getIsMovementAllowed","appContext","canLift","Provider","DragDropContext","getDraggingTransition","shouldAnimateDragMovement","getDraggingOpacity","isCombining","isDropAnimating","DroppableContext","checkIsValidInnerRef","useRequiredContext","Context","useContext","preventHtml5Dnd","isStrictEqual","whatIsDraggedOverFromResult","getSecondarySnapshot","combineTargetFor","isClone","dropAnimation","draggingOver","atRest","mapped","shouldAnimateDisplacement","snapshot","ConnectedDraggable","connect","makeMapStateToProps$1","draggingSelector","memoizedOffset","getMemoizedSnapshot","getMemoizedProps","ownProps","getCombineWithFromResult","curve","opacity","scale","getDraggableSelector","secondarySelector","getFallback","getProps","ownId","draggingId","visualDisplacement","isAfterCriticalInVirtualList","getSecondarySelector","dropAnimationFinished","areStatePropsEqual","setRef","getRef","dropAnimationFinishedAction","isInteger","useValidation$1","initialRef","useClonePropValidation","getDraggableRef","computedStyles","getDimension$1","publishedRef","isFirstPublishRef","useDraggablePublisher","dragHandleProps","tabIndex","role","onMoveEnd","propertyName","getShouldDraggingAnimate","transform","translate","boxSizing","zIndex","pointerEvents","getDraggingStyle","secondary","getStyle$1","innerRef","draggableProps","onTransitionEnd","rubric","Fragment","PrivateDraggable","isUsingCloneFor","PublicDraggable","isDragDisabled","disableInteractiveElementBlocking","isScroll","isAuto","isVisible","isEither","overflowX","overflowY","isElementScrollable","getClosestScrollable","isBodyScrollable","html","htmlStyle","isBoth","getScroll","scrollLeft","scrollTop","getIsFixed","immediate","delayed","getListenerOptions","getClosestScrollableFromDrag","env","closestScrollable","noop","empty","Placeholder$1","memo","animateOpenTimerRef","tryClearAnimateOpenTimer","animate","onClose","isAnimatingOpenOnMount","setIsAnimatingOpenOnMount","onSizeChangeEnd","getStyle","getSize","flexShrink","flexGrow","isBoolean","runChecks","checks","check","isDropDisabled","ignoreContainerClipping","getDroppableRef","standard","getPlaceholderRef","virtual","renderClone","AnimateInOut","PureComponent","on","getDerivedStateFromProps","defaultProps","getContainerForClone","attachDefaultPropsToOwnProps","defaultPropKey","mergedProps","isMatchingType","getDraggable","ConnectedDroppable","makeMapStateToProps","idleWithAnimation","shouldAnimatePlaceholder","isDraggingOver","draggingOverWith","draggingFromThisWith","isUsingPlaceholder","useClone","idleWithoutAnimation","getDraggableRubric","getMapProps","isDraggingOverForConsumer","isDraggingOverForImpact","ownPropsWithDefaultProps","wasCombining","updateViewportMaxScroll","stateProps","dispatchProps","droppableRef","placeholderRef","setDroppableRef","setPlaceholderRef","onPlaceholderTransitionEnd","whileDraggingRef","publishedDescriptorRef","memoizedUpdateScroll","getClosestScroll","updateScroll","scheduleScrollUpdate","onClosestScroll","getClient","targetRef","frameClient","scrollSize","getDroppableDimension","checkForNestedScrollContainers","removeAttribute","useDroppablePublisher","droppableProps","droppableContext","draggableProvided","draggableSnapshot","ReactDOM","createPortal","getClone","_presenceColors","presenceLabelKeys","_presenceLabelKeys","PresenceStatusEnum","Present","NotPresent","PresentElsewhere","UNPLANNED_PREFIX","isUnplannedDraggableId","startsWith","extractUserId","presenceColors","properties","gap","theme","propertyLabel","fontWeight","propertyValue","fontSize","typography","pxToRem","color","checkedInValue","unplannedIndicator","borderRadius","backgroundColor","assignButton","background","MainContent","totalMinutes","hours","minutes","status","userId","gqlClients","viewState","onAssignToWorkplace","checkedInAt","setCheckedInAt","_useState2","checkedInWorkplaceName","setCheckedInWorkplaceName","_useState3","isLoading","setIsLoading","_iterator","_step","_createForOfIteratorHelperLoose","workplaces","done","wp","assigned","assignedOperators","user","presenceStatus","assignedWorkplaceName","workplace","_step2","_iterator2","unplannedOperators","plannedWorkplace","isUnplanned","checkedInWorkplace","findOperatorContext","isPresent","graphqlSdk","usersPresences","user_id_eq","shift_id_eq","finished_at_null","then","latest","w","workplaceId","Stack","Typography","alignItems","title","getPresenceLabel","justifyContent","mt","CircularProgress","floor","Button","onClick","DropZone","Droppable","makeCardStyles","clickable","cursor","boxShadow","unplannedDotStyles","textOverflow","whiteSpace","removeButton","DraggingOperatorCard","Card","OperatorCard","showPresence","onRemove","Draggable","IconButton","stopPropagation","CloseIcon","root","flexDirection","header","alignSelf","search","content","PoolColumn","operators","unplannedUserIds","onOperatorClick","searchQuery","setSearchQuery","poolOperators","has","filteredOperators","query","split","part","CardHeader","slotProps","TextField","input","startAdornment","InputAdornment","SearchIcon","CardContent","borderConfig","overcapacity","labelColor","labelBg","unplanned","makeRootStyles","borderStatus","frozenHeight","borderLabel","minHeight","textShadow","maxHeight","unplannedLabel","textAlign","unplannedSeparator","badgeColors","ok","missing","WorkplaceColumn","_badge$checkedInHereC","assignment","registerRef","onRemoveOperator","sortedOperators","numeric","sortedUnplanned","_useMemo","localOperators","elsewhereOperators","badge","unplannedCount","checkedInHereCount","recommendedOperators","titleKey","getStatusBadge","planningBadge","assignedCount","getPlanningBadge","activeBadge","displayCount","_localOperators$idx","idx","_elsewhereOperators","_sortedUnplanned","elsewhereOffset","unplannedOffset","operator","grid","flexWrap","alignContent","AssignmentBoard","updateData","updateSidePanelProps","refetchAssignments","frozenHeights","setFrozenHeights","columnRefs","dataRef","Set","registerColumnRef","handleDragStart","heights","handleRemoveOperator","o","unassignedOperators","unassignOperator","shiftId","validFrom","handleAssignUnplanned","isTarget","open","assignOperator","handleOperatorClick","userName","mainContent","updatedData","movedUser","fromPool","toPool","movedPresenceStatus","newUnassignedOperators","newWorkplaces","sourceWp","poolIdx","destWp","getUpdatedData","assignPromise","minWidth","Navigation","departmentName","_ref$canPrev","canPrev","_ref$canNext","canNext","onNavigate","ChevronLeftIcon","startDate","finishedAt","isOvernightShift","endDate","shiftEnd","formatLabel","ChevronRightIcon","loader","WidgetView","settings","setViewState","gqlWsSubscribed","setGqlWsSubscribed","gqlWsClient","shiftsRef","initialState","_data$workplaces","visitorKeys","stack","inArray","edits","path","ancestors","newRoot","isEdited","pop","clone","_i2","_Object$keys2","k","editOffset","ii","editKey","editValue","_visitorKeys$node$kin","visitFn","visit","WorkplaceEventDocument","WorkplaceEvent","CurrentShiftChanged","newShift","normalized","shiftDateTime","fetchAssignmentsRef","showLoading","workplaceAssignments","intervalId","setInterval","clearInterval","handleNavigate","newState","checkIsCurrent","currentNormalized","nextDate","prevDate","navigateState","Cache","maxSize","_maxSize","_size","_values","get","set","SPLIT_REGEX","DIGIT_REGEX","LEAD_DIGIT_REGEX","SPEC_CHAR_REGEX","CLEAN_QUOTES_REGEX","pathCache","setCache","getCache","propertyExpr","normalizePath","setter","parts","getter","safe","segments","isQuoted","test","thisArg","iter","isBracket","shouldBeQuoted","charAt","hasLeadingNumber","hasSpecialChars","reWords","words","tinyCase","acc","toUpperCase","toposort_1","edges","toposort","arr","res","edge","uniqueNodes","nodes","visited","outgoingEdges","Map","makeOutgoingEdges","nodesHash","makeNodesHash","predecessors","nodeRep","outgoing","delete","errorToString","regExpToString","RegExp","symbolToString","SYMBOL_REGEXP","printSimpleValue","val","quoteStrings","typeOf","printNumber","getTime","toISOString","printValue","toArray","_Symbol$toStringTag","_Symbol$hasInstance","_Symbol$toStringTag2","strReg","toStringTag","ValidationErrorNoStack","errorOrErrors","field","params","inner","ValidationError","isError","hasInstance","formatError","originalPath","disableStack","errorNoStack","captureStackTrace","mixed","default","defined","notNull","oneOf","notOneOf","notType","originalValue","castMsg","string","matches","email","url","uuid","datetime","datetime_precision","datetime_offset","lowercase","uppercase","number","lessThan","moreThan","positive","negative","integer","noUnknown","exact","tuple","spec","typeLen","locale","boolean","isValue","isSchema","__isYupSchema__","Condition","fromOptions","refs","config","otherwise","TypeError","schema","_branch","branch","builder","resolve","Reference","isContext","isSibling","cast","describe","isRef","__isYupRef","isAbsent","createValidation","validate","panic","skipAbsent","abortEarly","disableStackTrace","resolveOptions","createError","overrides","nextParams","resolveParams","invalid","ctx","resolveMaybeRef","handleResult","validOrError","handleError","_result","sync","Promise","OPTIONS","getIn","lastPart","lastPartDebug","_part","isTuple","parseInt","innerType","parentPath","ReferenceSet","resolveAll","merge","newItems","removeItems","src","seen","copy","v","createStandardPath","currentSegment","inBrackets","inQuotes","char","issuesFromValidationError","_error$inner","createStandardIssues","flatMap","Schema","deps","tests","conditions","_mutate","internalTests","_whitelist","_blacklist","exclusiveTests","_typeCheck","withMutation","typeError","strip","strict","recursive","nullable","optional","coerce","nonNullable","_type","getPrototypeOf","meta","before","combined","mergedSpec","isType","prevSchema","_options$strict","_options$abortEarly","_options$recursive","_options$disableStack","resolvedSchema","allowOptionality","assert","_cast","formattedValue","formattedResult","rawValue","prevValue","getDefault","_validate","_value","initialTests","runTests","initialErrors","runOptions","fired","panicOnce","arg","nextOnce","count","nestedErrors","asNestedTest","originalParent","isIndex","testOptions","_options$disableStack2","reject","parsed","validated","validateSync","_options$disableStack3","isValid","isValidSync","_getDefault","def","isStrict","nullability","optionality","notRequired","opts","isExclusive","exclusive","when","dep","enums","whiteList","valids","resolved","blacklist","invalids","c","vendor","issues","method","isoReg","parseDateStruct","_regexResult$7$length","_regexResult$","regexResult","year","toNumber","month","day","millisecond","substring","precision","z","plusMinus","hourOffset","minuteOffset","rEmail","rUrl","rUUID","rIsoDateTime","isTrimmed","objStringTag","create$6","StringSchema","valueOf","_raw","strValue","regex","excludeEmptyString","allowOffset","struct","ensure","create$5","NumberSchema","isNaN$1","NaN","parseFloat","less","more","msg","truncate","round","_method","avail","invalidDate","DateSchema","totalMinutesOffset","UTC","parseIsoDate","INVALID_DATE","prepareParam","param","limit","Infinity","_err$path","sortByKeyOrder","parseJson","deepPartial","partial","fieldSchema","setFields","nextArray","isObject","unknown","known","defaultSort","create$3","ObjectSchema","_sortErrors","_nodes","_excludedEdges","shape","_options$stripUnknown","stripUnknown","intermediateValue","innerOptions","__validating","isChanged","prop","inputValue","fieldValue","fieldSpec","objectErrors","fieldErrors","nextFields","schemaOrRef","dft","_innerOptions","excludedEdges","excludes","addNode","depPath","reverse","sortFields","Function","pick","picked","omit","to","fromGetter","newObj","deepHas","p","json","unknownKeys","noAllow","allow","transformKeys","camelCase","snakeCase","constantCase","_innerOptions2","getSettingsFormProps","custom","initialValues","validationSchema","yup","wsUrl","lang","widgetProps","_objectWithoutPropertiesLoose","_excluded","_useGqlClients","useGqlClients","widgetData","setWidgetData","BaseWidget","locales"],"mappings":"+3DAGMA,EAAY,CAChBC,GAAI,CACFC,gkCAEFC,GAAI,CACFD,woCCHEE,EAAkB,uBAElBC,EAAa,SAACC,GAAe,MAAc,GAAAC,OAAID,GAAQE,KAAK,SAACC,EAAGC,GAAC,OAAKD,EAAEE,UAAUC,cAAcF,EAAEC,UAAU,EAAC,EAE7GE,EAAkB,SAACP,EAAiBQ,GAAY,OAAKR,EAAOS,KAAK,SAACC,GAAC,OAAKA,EAAEF,OAASA,CAAI,EAAC,EAEjFG,EAAoB,SAACC,EAAcC,GAC9C,IAAMC,EAAaC,EAAK,QAACF,EAAMR,WAC/B,OAAOU,EAAAA,QAAMH,GAAMI,KAAKF,EAAWE,QAAQC,OAAOH,EAAWG,UAAUC,OAAO,GAAGC,OAAOrB,EAC1F,EAEasB,EAAc,SAACC,GAAgB,OAAaN,EAAK,QAACM,GAAUF,OAAO,aAAa,EAShFG,EAAkB,SAACtB,GAC9B,IAAMuB,EAAexB,EAAWC,GAC1BwB,EAAMT,EAAK,UACXU,EAAQD,EAAIL,OAAO,cACnBO,EAAmBC,kBAAgBJ,EAAcC,GAEjDI,EAAyBC,EAAAA,gBAAgBL,EAAKE,GAEpD,GAAIE,EAAwB,CAC1B,IAAMf,EAAQN,EAAgBgB,EAAcK,EAAuBpB,MACnE,GAAIK,EACF,MAAO,CAAED,KAAMgB,EAAuBvB,UAAUc,OAAOrB,GAAkBe,MAAAA,EAAOiB,gBAAgB,EAEpG,CAEA,IAAMC,EAAsBL,EAAiBjB,KAAK,SAACC,GAAC,OAAKA,EAAEL,UAAU2B,QAAQR,EAAI,GAEjF,GAAIO,EAAqB,CACvB,IAAMlB,EAAQN,EAAgBgB,EAAcQ,EAAoBvB,MAChE,GAAIK,EACF,MAAO,CAAED,KAAMD,EAAkBc,EAAOZ,GAAQA,MAAAA,EAAOiB,gBAAgB,EAE3E,CAEA,IAAMG,EAAWlB,EAAAA,QAAMS,GAAKU,IAAI,EAAG,OAAOC,QAAQ,OAC5CC,EAA2BT,EAAeA,gBAACJ,EAAcU,GAE/D,GAAIG,EAAyBC,OAAS,EAAG,CACvC,IAAMxB,EAAQN,EAAgBgB,EAAca,EAAyB,GAAG5B,MACxE,GAAIK,EACF,MAAO,CAAED,KAAMD,EAAkBsB,EAASd,OAAO,cAAeN,GAAQA,MAAAA,EAAOiB,gBAAgB,EAEnG,CAEA,OAAO,IACT,EAIaQ,EAAc,SAACC,EAAyBvC,EAAiBwC,GACpE,IAAMjB,EAAexB,EAAWC,GAC1ByC,EAAcrB,EAAYmB,EAAa3B,MACvC8B,EAjDW,SAAC1C,GAClB,IAAMwB,EAAMT,EAAK,UACXW,EAAmBC,EAAeA,gBAAC3B,EAAQwB,GAC3CmB,EAAed,EAAeA,gBAACL,EAAKE,GAC1C,QAAoB,MAAZiB,OAAY,EAAZA,EAActC,YAAamB,GAAKL,OAAO,aACjD,CA4CkByB,CAAWrB,GACrBsB,EAAU9B,EAAK,UAAGmB,IAND,GAMuB,OAAOf,OAAO,cACtD2B,EAAevB,EAAawB,UAAU,SAACrC,GAAM,OAAAA,EAAEsC,KAAOT,EAAa1B,MAAMmC,EAAE,GAEjF,MAAkB,SAAdR,EACEM,EAAevB,EAAac,OAAS,GAGxBtB,EAAK,QAAC0B,GAAaP,IAAI,EAAG,OAAOf,OAAO,eACtC0B,EAGjBC,EAAe,EACVL,GAAeC,EAEP3B,EAAAA,QAAM0B,GAAaQ,SAAS,EAAG,OAAO9B,OAAO,eAC3CuB,CACrB,ECpFaQ,EAAkB,QCSzBC,EAAsF,SAAnEC,GAA2FC,IAAAA,EAArBC,EAAIF,EAAJE,KAAMC,EAASH,EAATG,UACnGC,EAAgCC,EAAAA,SAAS,KAAlCC,EAAQF,KAAEG,EAAWH,EAAA,GACpBI,EAAMC,EAAcA,iBAApBD,EAMR,OACEE,EAAC,QAAAC,cAAAC,aAAW,CAAAC,MAAOP,GACjBI,EAAA,QAAAC,cAACG,EAAGA,IAAA,CAACC,GAAI,CAAEC,aAAc,EAAGC,YAAa,YACvCP,UAAAC,cAACO,EAAOA,QAAA,CAACC,SAPS,SAACC,EAAyBC,GAChDd,EAAYc,EACd,GAMQX,EAAAA,QAAAC,cAACW,EAAGA,IAAA,CAACC,MAAOf,EAAE,WAAYK,MAAM,MAChCH,EAAA,QAAAC,cAACW,EAAAA,IAAG,CAACC,MAAOf,EAAE,YAAaK,MAAM,QAGrCH,EAAAA,QAAAC,cAACa,EAAQA,SAAA,CAACX,MAAM,KACdH,EAAAA,QAACC,cAAAc,EAAWA,aAACC,WAAS,GACpBhB,EAAAA,QAACC,cAAAgB,EAAAA,WAAW,CAAA/B,GAAG,oBAAoBY,EAAE,eACrCE,EAAAA,QAAAC,cAACiB,EAAMA,OAAA,CACLxE,KAAK,eACLyE,QAAQ,mBACRC,QAAQ,WACRjB,MAAoCZ,OAA/BA,EAAEE,EAAU4B,OAAOC,cAAY/B,EAAI,GACxCkB,SAAUhB,EAAU8B,aACpBP,WAAS,GAEThB,EAAC,QAAAC,cAAAuB,EAAAA,SAAS,CAAArB,MAAM,IAAIL,EAAE,mBACrBN,EAAKiC,YAAYC,IAAI,SAACC,GACrB,OAAA3B,EAAAA,QAAAC,cAACuB,EAAQA,SAAA,CAACI,IAAKD,EAAWzC,GAAIiB,MAAOwB,EAAWzC,IAC7CyC,EAAWjF,KACH,MAKnBsD,EAAA,QAAAC,cAACa,EAAQA,SAAA,CAACX,MAAM,KACdH,EAAAA,QAACC,cAAAc,EAAWA,aAACC,WAAS,GACpBhB,EAAC,QAAAC,cAAAgB,EAAAA,WAAW,CAAA/B,GAAG,0BAA0BY,EAAE,oBAC3CE,EAAAA,QAAAC,cAACiB,EAAAA,OAAM,CACLxE,KAAK,kBACLyE,QAAQ,yBACRC,QAAQ,WACRjB,MAAOV,EAAU4B,OAAOQ,gBACxBpB,SAAUhB,EAAU8B,aACpBP,WAAS,GAEThB,EAAA,QAAAC,cAACuB,EAAAA,SAAQ,CAACrB,MAAO,IAAkB,OACnCH,EAAAA,QAAAC,cAACuB,EAAQA,SAAA,CAACrB,MAAO,IAAkB,OACnCH,UAACC,cAAAuB,EAAAA,SAAS,CAAArB,MAAO,IAAkB,UAM/C,EC9DA2B,EADkD,mBAAXC,QAA+C,mBAAfA,OAAOC,IAAqBD,OAAOC,IAAI,mCAAgCC,ECK/H,SAASC,EAAcC,GACpC,IAAIC,EAAKD,EAAYE,UAAUC,OACjB,mBAAPF,GCRM,WAGb,IAFuBG,QDOe,GCJpC,MAAM,IAAIC,MAAkC,kCAEhD,CDE8BC,GAC5BN,EAAYE,UAAUK,QAAUN,EAE5BO,IACFR,EAAYE,UAAUM,GAA6BP,EAEvD,CEgCAF,eAxCmC,WAoBjC,SAASU,EAASC,EAAYC,EAAUC,GACtCC,KAAKC,MAAQJ,EAAWI,MACxBD,KAAKE,IAAMJ,EAASI,IACpBF,KAAKH,WAAaA,EAClBG,KAAKF,SAAWA,EAChBE,KAAKD,OAASA,CAChB,CAWA,OATaH,EAASP,UAEfC,OAAS,WACd,MAAO,CACLW,MAAOD,KAAKC,MACZC,IAAKF,KAAKE,MAIPN,CACT,CAtCmC,IA8C5B,IAAIO,eAAqB,WA8B9B,SAASA,EAAMC,EAAMH,EAAOC,EAAKG,EAAMC,EAAQC,EAAMpD,GACnD6C,KAAKI,KAAOA,EACZJ,KAAKC,MAAQA,EACbD,KAAKE,IAAMA,EACXF,KAAKK,KAAOA,EACZL,KAAKM,OAASA,EACdN,KAAK7C,MAAQA,EACb6C,KAAKO,KAAOA,EACZP,KAAKQ,KAAO,IACd,CAaA,OAXcL,EAAMd,UAEZC,OAAS,WACf,MAAO,CACLc,KAAMJ,KAAKI,KACXjD,MAAO6C,KAAK7C,MACZkD,KAAML,KAAKK,KACXC,OAAQN,KAAKM,SAIVH,CACT,CArDgC,GA4DzB,SAASM,EAAOC,GACrB,OAAoB,MAAbA,GAA+C,iBAAnBA,EAAUN,IAC/C,CClHA,SAASO,EAAQC,GAAmV,OAAtOD,EAArD,mBAAX5B,QAAoD,iBAApBA,OAAO8B,SAAmC,SAAiBD,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAX7B,QAAyB6B,EAAIE,cAAgB/B,QAAU6B,IAAQ7B,OAAOM,UAAY,gBAAkBuB,GAAiBD,EAAQC,EAAM,CAU1W,SAASlB,EAAQvC,GAC9B,OAAO4D,EAAY5D,EAAO,GAC5B,CAEA,SAAS4D,EAAY5D,EAAO6D,GAC1B,OAAQL,EAAQxD,IACd,IAAK,SACH,OAAO8D,KAAKC,UAAU/D,GAExB,IAAK,WACH,OAAOA,EAAMzD,KAAO,aAAaP,OAAOgE,EAAMzD,KAAM,KAAO,aAE7D,IAAK,SACH,OAAc,OAAVyD,EACK,OAUf,SAA2BA,EAAOgE,GAChC,IAA6C,IAAzCA,EAAqBC,QAAQjE,GAC/B,MAAO,aAGT,IAAI6D,EAAa,GAAG7H,OAAOgI,EAAsB,CAAChE,IAC9CkE,EA2DN,SAAqBC,GACnB,IAAID,EAAkBC,EAAOC,OAAO5B,IAEpC,MAA+B,mBAApB0B,EACFA,EAGqB,mBAAnBC,EAAO5B,QACT4B,EAAO5B,aADhB,CAGF,CArEwB8B,CAAYrE,GAElC,QAAwB8B,IAApBoC,EAA+B,CACjC,IAAII,EAAcJ,EAAgBK,KAAKvE,GAEvC,GAAIsE,IAAgBtE,EAClB,MAA8B,iBAAhBsE,EAA2BA,EAAcV,EAAYU,EAAaT,EAEnF,MAAM,GAAIW,MAAMC,QAAQzE,GACvB,OAwBJ,SAAqB0E,EAAOb,GAC1B,GAAqB,IAAjBa,EAAMtG,OACR,MAAO,KAGT,GAAIyF,EAAWzF,OAzES,EA0EtB,MAAO,UAOT,IAJA,IAAIuG,EAAMC,KAAKC,IA9EM,GA8EgBH,EAAMtG,QACvC0G,EAAYJ,EAAMtG,OAASuG,EAC3BI,EAAQ,GAEHC,EAAI,EAAGA,EAAIL,IAAOK,EACzBD,EAAME,KAAKrB,EAAYc,EAAMM,GAAInB,IASnC,OANkB,IAAdiB,EACFC,EAAME,KAAK,mBACFH,EAAY,GACrBC,EAAME,KAAK,OAAOjJ,OAAO8I,EAAW,gBAG/B,IAAMC,EAAMG,KAAK,MAAQ,GAClC,CAhDWC,CAAYnF,EAAO6D,GAG5B,OAGF,SAAsBM,EAAQN,GAC5B,IAAIuB,EAAOC,OAAOD,KAAKjB,GAEvB,OAAoB,IAAhBiB,EAAKhH,OACA,KAGLyF,EAAWzF,OAzDS,EA0Df,IAgDX,SAAsB+F,GACpB,IAAImB,EAAMD,OAAOnD,UAAUqD,SAAShB,KAAKJ,GAAQqB,QAAQ,aAAc,IAAIA,QAAQ,KAAM,IAEzF,GAAY,WAARF,GAAkD,mBAAvBnB,EAAOR,YAA4B,CAChE,IAAIpH,EAAO4H,EAAOR,YAAYpH,KAE9B,GAAoB,iBAATA,GAA8B,KAATA,EAC9B,OAAOA,CAEX,CAEA,OAAO+I,CACT,CA5DiBG,CAAatB,GAAU,IAO/B,KAJUiB,EAAK7D,IAAI,SAAUE,GAElC,OAAOA,EAAM,KADDmC,EAAYO,EAAO1C,GAAMoC,EAEvC,GACyBqB,KAAK,MAAQ,IACxC,CAnBSQ,CAAa1F,EAAO6D,EAC7B,CA1Ba8B,CAAkB3F,EAAO6D,GAElC,QACE,OAAOO,OAAOpE,GAEpB,CD2EA+B,EAAciB,GEpGP,IAAI4C,EAAoB,CAC7BC,KAAM,GACNC,SAAU,CAAC,eACXC,oBAAqB,CAAC,OAAQ,sBAAuB,aAAc,gBACnEC,mBAAoB,CAAC,WAAY,OAAQ,eAAgB,cACzDC,SAAU,CAAC,QACXC,aAAc,CAAC,cACfC,MAAO,CAAC,QAAS,OAAQ,YAAa,aAAc,gBACpDC,SAAU,CAAC,OAAQ,SACnBC,eAAgB,CAAC,OAAQ,cACzBC,eAAgB,CAAC,gBAAiB,aAAc,gBAChDC,mBAAoB,CAAC,OAErB,sBAAuB,gBAAiB,aAAc,gBACtDC,SAAU,GACVC,WAAY,GACZC,YAAa,GACbC,aAAc,GACdC,UAAW,GACXC,UAAW,GACXC,UAAW,CAAC,UACZC,YAAa,CAAC,UACdC,YAAa,CAAC,OAAQ,SACtBC,UAAW,CAAC,OAAQ,aACpBC,UAAW,CAAC,QACZC,SAAU,CAAC,QACXC,YAAa,CAAC,QACdC,iBAAkB,CAAC,cAAe,aAAc,kBAChDC,wBAAyB,CAAC,QAC1BC,qBAAsB,CAAC,cAAe,OAAQ,cAC9CC,qBAAsB,CAAC,cAAe,OAAQ,aAAc,aAAc,UAC1EC,gBAAiB,CAAC,cAAe,OAAQ,YAAa,OAAQ,cAC9DC,qBAAsB,CAAC,cAAe,OAAQ,OAAQ,eAAgB,cACtEC,wBAAyB,CAAC,cAAe,OAAQ,aAAc,aAAc,UAC7EC,oBAAqB,CAAC,cAAe,OAAQ,aAAc,SAC3DC,mBAAoB,CAAC,cAAe,OAAQ,aAAc,UAC1DC,oBAAqB,CAAC,cAAe,OAAQ,cAC7CC,0BAA2B,CAAC,cAAe,OAAQ,aAAc,UACjEC,oBAAqB,CAAC,cAAe,OAAQ,YAAa,aAC1DC,gBAAiB,CAAC,aAAc,kBAChCC,oBAAqB,CAAC,OAAQ,cAC9BC,oBAAqB,CAAC,OAAQ,aAAc,aAAc,UAC1DC,uBAAwB,CAAC,OAAQ,aAAc,aAAc,UAC7DC,mBAAoB,CAAC,OAAQ,aAAc,SAC3CC,kBAAmB,CAAC,OAAQ,aAAc,UAC1CC,yBAA0B,CAAC,OAAQ,aAAc,WAExCC,EAAQnD,OAAOoD,OAAO,CAAA,GAwS1B,SAASC,EAAWC,EAAS1F,EAAM2F,GACxC,IAAIC,EAAcF,EAAQ1F,GAE1B,GAAI4F,EAAa,CACf,IAAKD,GAAoC,mBAAhBC,EAEvB,OAAOA,EAGT,IAAIC,EAAsBF,EAAYC,EAAYE,MAAQF,EAAYG,MAEtE,GAAmC,mBAAxBF,EAET,OAAOA,CAEX,KAAO,CACL,IAAIG,EAAkBL,EAAYD,EAAQI,MAAQJ,EAAQK,MAE1D,GAAIC,EAAiB,CACnB,GAA+B,mBAApBA,EAET,OAAOA,EAGT,IAAIC,EAAsBD,EAAgBhG,GAE1C,GAAmC,mBAAxBiG,EAET,OAAOA,CAEX,CACF,CACF,CClXA,IAEIC,EAAqB,CACvBtD,KAAM,SAAcuD,GAClB,OAAOA,EAAKpJ,KACb,EACDiG,SAAU,SAAkBmD,GAC1B,MAAO,IAAMA,EAAK7M,IACnB,EAEDuJ,SAAU,SAAkBsD,GAC1B,OAAOlE,EAAKkE,EAAKC,YAAa,QAAU,IACzC,EACDtD,oBAAqB,SAA6BqD,GAChD,IAAIE,EAAKF,EAAKG,UACVhN,EAAO6M,EAAK7M,KACZiN,EAAUC,EAAK,IAAKvE,EAAKkE,EAAKM,oBAAqB,MAAO,KAC1DC,EAAazE,EAAKkE,EAAKO,WAAY,KACnCC,EAAeR,EAAKQ,aAGxB,OAAQrN,GAASoN,GAAeH,GAAkB,UAAPF,EAAgCpE,EAAK,CAACoE,EAAIpE,EAAK,CAAC3I,EAAMiN,IAAWG,EAAYC,GAAe,KAA3EA,CAC7D,EACD5D,mBAAoB,SAA4B7G,GAC9C,IAGIwK,EAAaxK,EAAKwK,WACtB,OAJexK,EAAK0K,SAIF,KAHP1K,EAAK2K,KAGgBL,EAAK,MAFlBtK,EAAK4K,cAEoCN,EAAK,IAAKvE,EAAKyE,EAAY,KACxF,EACDzD,aAAc,SAAsB8D,GAElC,OAAOC,EADUD,EAAME,WAExB,EACD/D,MAAO,SAAegE,GACpB,IACI5N,EAAO4N,EAAM5N,KACb6N,EAAOD,EAAME,UACbV,EAAaQ,EAAMR,WACnBC,EAAeO,EAAMP,aACrBU,EAASb,EAAK,GALNU,EAAMI,MAKW,MAAQhO,EACjCiO,EAAWF,EAASb,EAAK,IAAKvE,EAAKkF,EAAM,MAAO,KAMpD,OAJII,EAASpM,OA3CK,KA4ChBoM,EAAWF,EAASb,EAAK,MAAOgB,EAAOvF,EAAKkF,EAAM,OAAQ,QAGrDlF,EAAK,CAACsF,EAAUtF,EAAKyE,EAAY,KAAMC,GAAe,IAC9D,EACDxD,SAAU,SAAkBsE,GAG1B,OAFWA,EAAMnO,KAEH,KADFmO,EAAM1K,KAEnB,EAEDqG,eAAgB,SAAwBsE,GAGtC,MAAO,MAFIA,EAAMpO,KAEKkN,EAAK,IAAKvE,EADfyF,EAAMhB,WAC0B,KAClD,EACDrD,eAAgB,SAAwBsE,GACtC,IACIjB,EAAaiB,EAAMjB,WACnBC,EAAegB,EAAMhB,aACzB,OAAO1E,EAAK,CAAC,MAAOuE,EAAK,MAHLmB,EAAMC,eAGsB3F,EAAKyE,EAAY,KAAMC,GAAe,IACvF,EACDrD,mBAAoB,SAA4BuE,GAC9C,IACID,EAAgBC,EAAMD,cACtBnB,EAAsBoB,EAAMpB,oBAC5BC,EAAamB,EAAMnB,WACnBC,EAAekB,EAAMlB,aACzB,MAEE,YAAY5N,OAPH8O,EAAMvO,MAOUP,OAAOyN,EAAK,IAAKvE,EAAKwE,EAAqB,MAAO,KAAM,KAAO,MAAM1N,OAAO6O,EAAe,KAAK7O,OAAOyN,EAAK,GAAIvE,EAAKyE,EAAY,KAAM,MAAQC,CAE3K,EAEDpD,SAAU,SAAkBuE,GAE1B,OADYA,EAAM/K,KAEnB,EACDyG,WAAY,SAAoBuE,GAE9B,OADYA,EAAMhL,KAEnB,EACD0G,YAAa,SAAqBuE,EAAQxJ,GACxC,IAAIzB,EAAQiL,EAAOjL,MAEnB,OADoBiL,EAAOhB,MCExB,SAA0BjK,GAC/B,IAAIkL,EAAcb,UAAUjM,OAAS,QAAsB0D,IAAjBuI,UAAU,GAAmBA,UAAU,GAAK,GAClFc,EAAsBd,UAAUjM,OAAS,QAAsB0D,IAAjBuI,UAAU,IAAmBA,UAAU,GACrFe,GAAwC,IAAzBpL,EAAMiE,QAAQ,MAI7BoH,GAAwBD,GAFuB,MAA5BpL,EAAMA,EAAM5B,OAAS,IACO,OAA5B4B,EAAMA,EAAM5B,OAAS,IACwC+M,EAChFG,EAAS,GAYb,OAVID,GAA0BD,IANK,MAAbpL,EAAM,IAA2B,OAAbA,EAAM,MAO9CsL,GAAU,KAAOJ,GAGnBI,GAAUJ,EAAclL,EAAMwF,QAAQ,MAAO,KAAO0F,GAAelL,EAE/DqL,IACFC,GAAU,MAGL,MAAQA,EAAO9F,QAAQ,OAAQ,SAAW,KACnD,CDtB2B+F,CAAiBvL,EAAe,gBAARyB,EAAwB,GAAK,MAAQqC,KAAKC,UAAU/D,EACpG,EACD2G,aAAc,SAAsB6E,GAElC,OADYA,EAAOxL,MACJ,OAAS,OACzB,EACD4G,UAAW,WACT,MAAO,MACR,EACDC,UAAW,SAAmB4E,GAE5B,OADYA,EAAOzL,KAEpB,EACD8G,UAAW,SAAmB4E,GAE5B,MAAO,IAAMxG,EADAwG,EAAOxK,OACM,MAAQ,GACnC,EACD6F,YAAa,SAAqB4E,GAEhC,MAAO,IAAMzG,EADAyG,EAAOC,OACM,MAAQ,GACnC,EACD5E,YAAa,SAAqB6E,GAGhC,OAFWA,EAAOtP,KAEJ,KADFsP,EAAO7L,KAEpB,EAEDiH,UAAW,SAAmB6E,GAG5B,MAAO,IAFIA,EAAOvP,KAEEkN,EAAK,IAAKvE,EADnB4G,EAAOzB,UACuB,MAAO,IACjD,EAEDnD,UAAW,SAAmB6E,GAE5B,OADWA,EAAOxP,IAEnB,EACD4K,SAAU,SAAkB6E,GAE1B,MAAO,IADIA,EAAOlC,KACE,GACrB,EACD1C,YAAa,SAAqB6E,GAEhC,OADWA,EAAOnC,KACJ,GACf,EAEDzC,iBAAkB6E,EAAe,SAAUC,GACzC,IACIC,EAAiBD,EAAOC,eAC5B,OAAOlH,EAAK,CAAC,SAAUA,EAFNiH,EAAOxC,WAEgB,KAAMM,EAAMmC,IAAkB,IACxE,GACA9E,wBAAyB,SAAiC+E,GAGxD,OAFgBA,EAAO9C,UAEJ,KADR8C,EAAOvC,IAEnB,EACDvC,qBAAsB2E,EAAe,SAAUI,GAG7C,OAAOpH,EAAK,CAAC,SAFFoH,EAAO/P,KAEW2I,EADZoH,EAAO3C,WACsB,MAAO,IACvD,GACAnC,qBAAsB0E,EAAe,SAAUK,GAC7C,IAEI5C,EAAa4C,EAAO5C,WACpBiC,EAASW,EAAOX,OACpB,OAAO1G,EAAK,CAAC,OAJFqH,EAAOhQ,KAISkN,EAAK,cAAevE,EAH9BqH,EAAOC,WAGwC,QAAStH,EAAKyE,EAAY,KAAMM,EAAM2B,IAAU,IAClH,GACAnE,gBAAiByE,EAAe,SAAUO,GACxC,IACIrC,EAAOqC,EAAOpC,UACdP,EAAO2C,EAAO3C,KACdH,EAAa8C,EAAO9C,WACxB,OAJW8C,EAAOlQ,MAIHmQ,EAAkBtC,GAAQX,EAAK,MAAOgB,EAAOvF,EAAKkF,EAAM,OAAQ,OAASX,EAAK,IAAKvE,EAAKkF,EAAM,MAAO,MAAQ,KAAON,EAAOL,EAAK,IAAKvE,EAAKyE,EAAY,KACvK,GACAjC,qBAAsBwE,EAAe,SAAUS,GAC7C,IAGIhD,EAAagD,EAAOhD,WACxB,OAAOzE,EAAK,CAJDyH,EAAOpQ,KAIE,KAHToQ,EAAO7C,KAGeL,EAAK,KAFnBkD,EAAO5C,cAEiC7E,EAAKyE,EAAY,MAAO,IACrF,GACAhC,wBAAyBuE,EAAe,SAAUU,GAChD,IAEIjD,EAAaiD,EAAOjD,WACpBiC,EAASgB,EAAOhB,OACpB,OAAO1G,EAAK,CAAC,YAJF0H,EAAOrQ,KAIckN,EAAK,cAAevE,EAHnC0H,EAAOJ,WAG6C,QAAStH,EAAKyE,EAAY,KAAMM,EAAM2B,IAAU,IACvH,GACAhE,oBAAqBsE,EAAe,SAAUW,GAC5C,IAEIC,EAAQD,EAAOC,MACnB,OAAO5H,EAAK,CAAC,QAHF2H,EAAOtQ,KAGU2I,EAFX2H,EAAOlD,WAEqB,KAAMmD,GAA0B,IAAjBA,EAAM1O,OAAe,KAAO8G,EAAK4H,EAAO,OAAS,IAAK,IACpH,GACAjF,mBAAoBqE,EAAe,SAAUa,GAC3C,IAEI7L,EAAS6L,EAAO7L,OACpB,OAAOgE,EAAK,CAAC,OAHF6H,EAAOxQ,KAGS2I,EAFV6H,EAAOpD,WAEoB,KAAMM,EAAM/I,IAAU,IACpE,GACA4G,oBAAqBoE,EAAe,SAAUc,GAG5C,OAAO9H,EAAK,CAFD8H,EAAOzQ,KAEC2I,EADF8H,EAAOrD,WACY,MAAO,IAC7C,GACA5B,0BAA2BmE,EAAe,SAAUe,GAClD,IAEIrB,EAASqB,EAAOrB,OACpB,OAAO1G,EAAK,CAAC,QAHF+H,EAAO1Q,KAGU2I,EAFX+H,EAAOtD,WAEqB,KAAMM,EAAM2B,IAAU,IACrE,GACA5D,oBAAqBkE,EAAe,SAAUgB,GAC5C,IACI9C,EAAO8C,EAAO7C,UACd8C,EAAaD,EAAOC,WACpBC,EAAYF,EAAOE,UACvB,MAAO,cAJIF,EAAO3Q,MAIamQ,EAAkBtC,GAAQX,EAAK,MAAOgB,EAAOvF,EAAKkF,EAAM,OAAQ,OAASX,EAAK,IAAKvE,EAAKkF,EAAM,MAAO,OAAS+C,EAAa,cAAgB,IAAM,OAASjI,EAAKkI,EAAW,MAC3M,GACAnF,gBAAiB,SAAyBoF,GACxC,IACIjB,EAAiBiB,EAAOjB,eAC5B,OAAOlH,EAAK,CAAC,gBAAiBA,EAFbmI,EAAO1D,WAEuB,KAAMM,EAAMmC,IAAkB,IAC9E,EACDlE,oBAAqB,SAA6BoF,GAGhD,OAAOpI,EAAK,CAAC,gBAFFoI,EAAO/Q,KAEkB2I,EADnBoI,EAAO3D,WAC6B,MAAO,IAC7D,EACDxB,oBAAqB,SAA6BoF,GAChD,IAEI5D,EAAa4D,EAAO5D,WACpBiC,EAAS2B,EAAO3B,OACpB,OAAO1G,EAAK,CAAC,cAJFqI,EAAOhR,KAIgBkN,EAAK,cAAevE,EAHrCqI,EAAOf,WAG+C,QAAStH,EAAKyE,EAAY,KAAMM,EAAM2B,IAAU,IACxH,EACDxD,uBAAwB,SAAgCoF,GACtD,IAEI7D,EAAa6D,EAAO7D,WACpBiC,EAAS4B,EAAO5B,OACpB,OAAO1G,EAAK,CAAC,mBAJFsI,EAAOjR,KAIqBkN,EAAK,cAAevE,EAH1CsI,EAAOhB,WAGoD,QAAStH,EAAKyE,EAAY,KAAMM,EAAM2B,IAAU,IAC7H,EACDvD,mBAAoB,SAA4BoF,GAC9C,IAEIX,EAAQW,EAAOX,MACnB,OAAO5H,EAAK,CAAC,eAHFuI,EAAOlR,KAGiB2I,EAFlBuI,EAAO9D,WAE4B,KAAMmD,GAA0B,IAAjBA,EAAM1O,OAAe,KAAO8G,EAAK4H,EAAO,OAAS,IAAK,IAC1H,EACDxE,kBAAmB,SAA2BoF,GAC5C,IAEIxM,EAASwM,EAAOxM,OACpB,OAAOgE,EAAK,CAAC,cAHFwI,EAAOnR,KAGgB2I,EAFjBwI,EAAO/D,WAE2B,KAAMM,EAAM/I,IAAU,IAC1E,EACDqH,yBAA0B,SAAkCoF,GAC1D,IAEI/B,EAAS+B,EAAO/B,OACpB,OAAO1G,EAAK,CAAC,eAHFyI,EAAOpR,KAGiB2I,EAFlByI,EAAOhE,WAE4B,KAAMM,EAAM2B,IAAU,IAC5E,GAGF,SAASM,EAAe0B,GACtB,OAAO,SAAUxE,GACf,OAAOlE,EAAK,CAACkE,EAAKyE,YAAaD,EAAGxE,IAAQ,MAE9C,CAOA,SAASlE,EAAK4I,GACZ,IAAIC,EAEAC,EAAY3D,UAAUjM,OAAS,QAAsB0D,IAAjBuI,UAAU,GAAmBA,UAAU,GAAK,GACpF,OAEwB,QAFhB0D,EAAwBD,aAAoD,EAAIA,EAAWG,OAAO,SAAUC,GAClH,OAAOA,CACT,GAAGhJ,KAAK8I,UAAuD,IAA/BD,EAAmCA,EAAwB,EAC7F,CAOA,SAAS9D,EAAMvF,GACb,OAAO+E,EAAK,MAAOgB,EAAOvF,EAAKR,EAAO,OAAQ,MAChD,CAMA,SAAS+E,EAAK3G,EAAOqL,GAEnB,OAAsB,MAAfA,GAAuC,KAAhBA,EAAqBrL,EAAQqL,GADjD9D,UAAUjM,OAAS,QAAsB0D,IAAjBuI,UAAU,GAAmBA,UAAU,GAAK,IACC,EACjF,CAEA,SAASI,EAAO2D,GACd,OAAO3E,EAAK,KAAM2E,EAAI5I,QAAQ,MAAO,QACvC,CAEA,SAAS6I,EAAYD,GACnB,OAA8B,IAAvBA,EAAInK,QAAQ,KACrB,CAEA,SAASyI,EAAkBoB,GACzB,OAAqB,MAAdA,GAAsBA,EAAWQ,KAAKD,EAC/C,CEjTO,SAASE,EAAuBC,GACrC,MAAO,yBAAyBA,6CAAgDA,kFAClF,8vLCMA,IAAIC,GAAW,mBAAsBpJ,OAAOqJ,GAAKrJ,OAAOqJ,GAHxD,SAAYR,EAAGS,GACb,OAAQT,IAAMS,IAAM,IAAMT,GAAK,EAAIA,GAAM,EAAIS,IAAQT,GAAMA,GAAKS,GAAMA,CACxE,EAEEC,GAAuB/O,EAAK,QAAC+O,qBAC7BC,GAAShP,EAAK,QAACgP,OACfC,GAAYjP,EAAK,QAACiP,UAClBC,GAAUlP,EAAK,QAACkP,QAChBC,GAAgBnP,EAAK,QAACmP,mDACmB,SACzCC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAUT,GAAO,MACrB,GAAI,OAASS,EAAQC,QAAS,CAC5B,IAAIC,EAAO,CAAEC,UAAU,EAAIzP,MAAO,MAClCsP,EAAQC,QAAUC,CACtB,MAASA,EAAOF,EAAQC,QACtBD,EAAUP,GACR,WACE,SAASW,EAAiBC,GACxB,IAAKC,EAAS,CAIZ,GAHAA,GAAU,EACVC,EAAmBF,EACnBA,EAAeP,EAASO,QACf,IAAMN,GAAWG,EAAKC,SAAU,CACvC,IAAIK,EAAmBN,EAAKxP,MAC5B,GAAIqP,EAAQS,EAAkBH,GAC5B,OAAQI,EAAoBD,CAC/B,CACD,OAAQC,EAAoBJ,CAC7B,CAED,GADAG,EAAmBC,EACftB,GAASoB,EAAkBF,GAAe,OAAOG,EACrD,IAAIE,EAAgBZ,EAASO,GAC7B,YAAS,IAAMN,GAAWA,EAAQS,EAAkBE,IAC1CH,EAAmBF,EAAeG,IAC5CD,EAAmBF,EACXI,EAAoBC,EAC7B,CACD,IACEH,EACAE,EAFEH,GAAU,EAGZK,OACO,IAAMd,EAAoB,KAAOA,EAC1C,MAAO,CACL,WACE,OAAOO,EAAiBR,IACzB,EACD,OAASe,OACA,EACL,WACE,OAAOP,EAAiBO,IACzB,EAER,EACD,CAACf,EAAaC,EAAmBC,EAAUC,IAE7C,IAAIrP,EAAQ4O,GAAqBK,EAAWK,EAAQ,GAAIA,EAAQ,IAShE,OARAR,GACE,WACEU,EAAKC,UAAW,EAChBD,EAAKxP,MAAQA,CACd,EACD,CAACA,IAEHgP,GAAchP,GACPA,CACT,uBCxEA,yCAA6BkQ,UAC1B,WAIC,oBAAuBC,gCACrB,mBACSA,+BAA+BC,6BACxCD,+BAA+BC,4BAA4B/N,SAC7D,IAAIxC,EAAQwQ,EAAgB,QAC1B5B,EAAW,mBAAsBpJ,OAAOqJ,GAAKrJ,OAAOqJ,GARtD,SAAYR,EAAGS,GACb,OAAQT,IAAMS,IAAM,IAAMT,GAAK,EAAIA,GAAM,EAAIS,IAAQT,GAAMA,GAAKS,GAAMA,CACvE,EAOCC,EAAuB/O,EAAM+O,qBAC7BC,EAAShP,EAAMgP,OACfC,EAAYjP,EAAMiP,UAClBC,EAAUlP,EAAMkP,QAChBC,EAAgBnP,EAAMmP,cACxBsB,EAA2CC,iCAAA,SACzCtB,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAUT,EAAO,MACrB,GAAI,OAASS,EAAQC,QAAS,CAC5B,IAAIC,EAAO,CAAEC,UAAU,EAAIzP,MAAO,MAClCsP,EAAQC,QAAUC,CAC1B,MAAaA,EAAOF,EAAQC,QACtBD,EAAUP,EACR,WACE,SAASW,EAAiBC,GACxB,IAAKC,EAAS,CAIZ,GAHAA,GAAU,EACVC,EAAmBF,EACnBA,EAAeP,EAASO,QACf,IAAMN,GAAWG,EAAKC,SAAU,CACvC,IAAIK,EAAmBN,EAAKxP,MAC5B,GAAIqP,EAAQS,EAAkBH,GAC5B,OAAQI,EAAoBD,CAC/B,CACD,OAAQC,EAAoBJ,CAC7B,CAED,GADAG,EAAmBC,EACftB,EAASoB,EAAkBF,GAC7B,OAAOG,EACT,IAAIE,EAAgBZ,EAASO,GAC7B,YAAS,IAAMN,GAAWA,EAAQS,EAAkBE,IAC1CH,EAAmBF,EAAeG,IAC5CD,EAAmBF,EACXI,EAAoBC,EAC7B,CACD,IACEH,EACAE,EAFEH,GAAU,EAGZK,OACO,IAAMd,EAAoB,KAAOA,EAC1C,MAAO,CACL,WACE,OAAOO,EAAiBR,IACzB,EACD,OAASe,OACA,EACL,WACE,OAAOP,EAAiBO,IACzB,EAER,EACD,CAACf,EAAaC,EAAmBC,EAAUC,IAE7C,IAAIrP,EAAQ4O,EAAqBK,EAAWK,EAAQ,GAAIA,EAAQ,IAShE,OARAR,EACE,WACEU,EAAKC,UAAW,EAChBD,EAAKxP,MAAQA,CACd,EACD,CAACA,IAEHgP,EAAchP,GACPA,GAET,oBAAuBmQ,gCACrB,mBACSA,+BAA+BK,4BACxCL,+BAA+BK,2BAA2BnO,QAChE,CAnFG,oBCTDoO,EAAAH,QAD2B,yCAAbJ,SACGG,GAEAK;;;;;;6WCLfC,GAAwC,eAA5C,0BAA+BT,SAC3B5F,GAAS,mBACb,SAAShI,GAAUsO,EAAWC,GAC1B,IAAID,EAAJ,CAGA,GAAID,GACA,MAAM,IAAItO,MAAMiI,IAEpB,IAAIwG,EAA8B,mBAAZD,EAAyBA,IAAYA,EACvD7Q,EAAQ8Q,EAAW,GAAG9U,OAAOsO,GAAQ,MAAMtO,OAAO8U,GAAYxG,GAClE,MAAM,IAAIjI,MAAMrC,EANhB,CAOJ,CCVA,IAAI+Q,GAAU,SAAiB5R,GAC7B,IAAI6R,EAAM7R,EAAK6R,IACXC,EAAQ9R,EAAK8R,MACbC,EAAS/R,EAAK+R,OACdC,EAAOhS,EAAKgS,KAiBhB,MAdW,CACTH,IAAKA,EACLC,MAAOA,EACPC,OAAQA,EACRC,KAAMA,EACNC,MAPUH,EAAQE,EAQlBE,OAPWH,EAASF,EAQpB9C,EAAGiD,EACHxC,EAAGqC,EACHM,OAAQ,CACNpD,GAAI+C,EAAQE,GAAQ,EACpBxC,GAAIuC,EAASF,GAAO,GAI1B,EACIO,GAAS,SAAgBC,EAAQC,GACnC,MAAO,CACLT,IAAKQ,EAAOR,IAAMS,EAAST,IAC3BG,KAAMK,EAAOL,KAAOM,EAASN,KAC7BD,OAAQM,EAAON,OAASO,EAASP,OACjCD,MAAOO,EAAOP,MAAQQ,EAASR,MAEnC,EACIS,GAAS,SAAgBF,EAAQG,GACnC,MAAO,CACLX,IAAKQ,EAAOR,IAAMW,EAASX,IAC3BG,KAAMK,EAAOL,KAAOQ,EAASR,KAC7BD,OAAQM,EAAON,OAASS,EAAST,OACjCD,MAAOO,EAAOP,MAAQU,EAASV,MAEnC,EAWIW,GAAY,CACdZ,IAAK,EACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,GAEJU,GAAY,SAAmB7H,GACjC,IAAI8H,EAAY9H,EAAM8H,UAClBC,EAAe/H,EAAMgI,OACrBA,OAA+B,IAAtBD,EAA0BH,GAAYG,EAC/CE,EAAejI,EAAMkI,OACrBA,OAA+B,IAAtBD,EAA0BL,GAAYK,EAC/CE,EAAgBnI,EAAMoI,QACtBA,OAAiC,IAAvBD,EAA2BP,GAAYO,EACjDE,EAAYtB,GAAQQ,GAAOO,EAAWE,IACtCM,EAAavB,GAAQW,GAAOI,EAAWI,IACvCK,EAAaxB,GAAQW,GAAOY,EAAYF,IAC5C,MAAO,CACLC,UAAWA,EACXP,UAAWf,GAAQe,GACnBQ,WAAYA,EACZC,WAAYA,EACZP,OAAQA,EACRE,OAAQA,EACRE,QAASA,EAEb,EAEII,GAAQ,SAAeC,GACzB,IAAIzS,EAAQyS,EAAIC,MAAM,GAAI,GAG1B,GAAe,OAFFD,EAAIC,OAAO,GAGtB,OAAO,EAGT,IAAIpH,EAASqH,OAAO3S,GAEpB,OADE4S,MAAMtH,KAAmC,eAxF7C,0BAwFgC4E,SAA4B5N,IAAU,EAAO,+BAAiCmQ,EAAM,qBAAuBzS,EAAQ,KAAOsC,IAAU,IAC3JgJ,CACT,EASIuH,GAAS,SAAgBC,EAAUC,GACrC,IA1DyBvB,EAAQwB,EA8D7BC,EA7DG,CACLjC,KAFuBQ,EA0DTsB,EAAShB,WAxDXd,KAFmBgC,EA8DFD,GA5DHpE,EAC1BwC,KAAMK,EAAOL,KAAO6B,EAAQ9E,EAC5BgD,OAAQM,EAAON,OAAS8B,EAAQrE,EAChCsC,MAAOO,EAAOP,MAAQ+B,EAAQ9E,GA0DhC,OAAO2D,GAAU,CACfC,UAAWmB,EACXf,OANWY,EAASZ,OAOpBF,OANWc,EAASd,OAOpBI,QANYU,EAASV,SAQzB,EACIc,GAAa,SAAoBJ,EAAUK,GAK7C,YAJoB,IAAhBA,IACFA,EArBK,CACLjF,EAAGkF,OAAOC,YACV1E,EAAGyE,OAAOE,cAsBLT,GAAOC,EAAUK,EAC1B,EACII,GAAe,SAAsBzB,EAAW0B,GAClD,IAAIxB,EAAS,CACXhB,IAAKwB,GAAMgB,EAAOC,WAClBxC,MAAOuB,GAAMgB,EAAOE,aACpBxC,OAAQsB,GAAMgB,EAAOG,cACrBxC,KAAMqB,GAAMgB,EAAOI,aAEjBxB,EAAU,CACZpB,IAAKwB,GAAMgB,EAAOK,YAClB5C,MAAOuB,GAAMgB,EAAOM,cACpB5C,OAAQsB,GAAMgB,EAAOO,eACrB5C,KAAMqB,GAAMgB,EAAOQ,cAEjB9B,EAAS,CACXlB,IAAKwB,GAAMgB,EAAOS,gBAClBhD,MAAOuB,GAAMgB,EAAOU,kBACpBhD,OAAQsB,GAAMgB,EAAOW,mBACrBhD,KAAMqB,GAAMgB,EAAOY,kBAErB,OAAOvC,GAAU,CACfC,UAAWA,EACXE,OAAQA,EACRI,QAASA,EACTF,OAAQA,GAEZ,EACImC,GAAS,SAAgBC,GAC3B,IAAIxC,EAAYwC,EAAGC,wBACff,EAASJ,OAAOoB,iBAAiBF,GACrC,OAAOf,GAAazB,EAAW0B,EACjC,ECpHAiB,GAjCc,SAAiBxS,GAC7B,IAAIyS,EAAW,GACXC,EAAU,KAEVC,EAAY,WACd,IAAK,IAAIC,EAAOxK,UAAUjM,OAAQgM,EAAO,IAAI5F,MAAMqQ,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E1K,EAAK0K,GAAQzK,UAAUyK,GAGzBJ,EAAWtK,EAEPuK,IAIJA,EAAUI,sBAAsB,WAC9BJ,EAAU,KACV1S,EAAG+S,WAAW,EAAGN,EACnB,KAYF,OATAE,EAAUK,OAAS,WACZN,IAILO,qBAAqBP,GACrBA,EAAU,OAGLC,CACT,EC/BA,SAASO,KACP,OAAOA,GAAW9P,OAAO+P,OAAS/P,OAAO+P,OAAOC,OAAS,SAAUC,GACjE,IAAK,IAAIC,EAAI,EAAGA,EAAIlL,UAAUjM,OAAQmX,IAAK,CACzC,IAAI5V,EAAI0K,UAAUkL,GAClB,IAAK,IAAIC,KAAK7V,GAAG,CAAG,GAAE8V,eAAelR,KAAK5E,EAAG6V,KAAOF,EAAEE,GAAK7V,EAAE6V,GAC/D,CACA,OAAOF,CACR,EAAEH,GAASH,MAAM,KAAM3K,UAC1B,CCAA,MAAMqL,GAA0C,eARhD,0BAQmCxF,SAC7ByF,GAAgB,aAChBC,GAAsB,YACtBC,GAAU7V,GAASA,EAAMwF,QAAQmQ,GAAe,KAAKnQ,QAAQoQ,GAAqB,IAAIE,OACtFC,GAAgBlF,GAAWgF,GAAQ,kCAGnCA,GAAQhF,gGAMd,SAASmF,GAAIlM,EAAM+G,GACb6E,IAGkB,oBAAXtC,QAA0BA,OALhB,6CAQrB6C,QAAQnM,MATkB+G,IAAW,CAACkF,GAAclF,GAAU,uDAAwD,mBAAoB,mBASzHqF,CAAoBrF,GACvC,CACA,MAAMsF,GAAUH,GAAIX,KAAK,KAAM,QACzBe,GAAQJ,GAAIX,KAAK,KAAM,SAE7B,SAASgB,KAAU,CAQnB,SAASC,GAAWhC,EAAIiC,EAAUC,GAChC,MAAMC,EAAaF,EAAShV,IAAImV,IAC9B,MAAMC,EARV,SAAoBC,EAAQC,GAC1B,MAAO,IACFD,KACAC,EAEP,CAGoBC,CAAWN,EAAeE,EAAQC,SAElD,OADArC,EAAGyC,iBAAiBL,EAAQM,UAAWN,EAAQzU,GAAI0U,GAC5C,WACLrC,EAAG2C,oBAAoBP,EAAQM,UAAWN,EAAQzU,GAAI0U,MAG1D,OAAO,WACLF,EAAWS,QAAQC,IACjBA,MAGN,CAEA,MAAMxG,GAAwC,eAxD9C,0BAwDiCT,SAC3BkH,GAAW,mBACjB,MAAMC,WAAqBhV,OAI3B,SAASC,GAAUsO,EAAWC,GAC5B,MACQ,IAAIwG,GADR1G,GACqByG,GAEA,GAAGA,OAAavG,GAAW,KAEtD,CATAwG,GAAanV,UAAUqD,SAAW,WAChC,OAAO1C,KAAKgO,OACd,EASA,MAAMyG,WAAsBzX,EAAK,QAAC0X,UAChC5T,WAAAA,IAAeyG,GACboN,SAASpN,GACTvH,KAAK4U,UAAY,KACjB5U,KAAKsU,OAASd,GACdxT,KAAK6U,cAAgBC,IACnB,MAAMF,EAAY5U,KAAK+U,eACnBH,EAAUI,eACZJ,EAAUK,WACe,eA/EjC,0BA+EoB5H,UAA4BiG,GAAQ,sJAKlD,MAAM4B,EAAMJ,EAAMvB,MACd2B,aAAeV,KACjBM,EAAMK,iBACuB,eAvFrC,0BAuFwB9H,UACdkG,GAAM2B,EAAIlH,WAIhBhO,KAAK+U,aAAe,KAClB,IAAK/U,KAAK4U,UACR,MAAM,IAAIpV,MAAM,mDAElB,OAAOQ,KAAK4U,WAEd5U,KAAKoV,aAAeR,IAClB5U,KAAK4U,UAAYA,EAErB,CACAS,iBAAAA,GACErV,KAAKsU,OAASb,GAAWlD,OAAQ,CAAC,CAChC4D,UAAW,QACX/U,GAAIY,KAAK6U,gBAEb,CACAS,iBAAAA,CAAkBJ,GAChB,GAAIA,aAAeV,GAKjB,MAJ6B,eA9GnC,0BA8GsBnH,UACdkG,GAAM2B,EAAIlH,cAEZhO,KAAKuV,SAAS,CAAA,GAGhB,MAAML,CACR,CACAM,oBAAAA,GACExV,KAAKsU,QACP,CACAmB,MAAAA,GACE,OAAOzV,KAAK0V,MAAMC,SAAS3V,KAAKoV,aAClC,EAGF,MAKMQ,GAAWC,GAASA,EAAQ,EAI5BC,GAAeA,CAAC/V,EAAQgW,KAC5B,MAAMC,EAAejW,EAAOkW,cAAgBF,EAAYE,YAClDC,EAAgBN,GAAS7V,EAAO8V,OAChCM,EAAcP,GAASG,EAAYF,OACzC,OAAIG,EACK,iDACmCE,wBAC1BC,UAGX,+CACmCD,kBAC9BnW,EAAOkW,4BACPF,EAAYE,gCACRE,SAGZC,GAAcA,CAACla,EAAI6D,EAAQsW,IACZtW,EAAOkW,cAAgBI,EAAQJ,YAEzC,oBACM/Z,mCACcma,EAAQC,cAE9B,oBACQpa,oBACD6D,EAAOkW,6CACQI,EAAQC,8BACvBD,EAAQJ,oBAclBM,GAAkBxW,GAAU,4DAE3B6V,GAAS7V,EAAO8V,WA4BjBW,GA3EcvW,GAAS,2CACW2V,GAAS3V,EAAMF,OAAO8V,WA0ExDW,GAzCeC,IACnB,MAAMC,EAAWD,EAAOV,YACxB,GAAIW,EACF,OAAOZ,GAAaW,EAAO1W,OAAQ2W,GAErC,MAAML,EAAUI,EAAOJ,QACvB,OAAIA,EACKD,GAAYK,EAAOH,YAAaG,EAAO1W,OAAQsW,GAEjD,kDAgCHG,GA1BY/N,IAChB,GAAsB,WAAlBA,EAAOkO,OACT,MAAO,sCAEHJ,GAAgB9N,EAAO1I,gBAG7B,MAAM2W,EAAWjO,EAAOsN,YAClBM,EAAU5N,EAAO4N,QACvB,OAAIK,EACK,6CAEHZ,GAAarN,EAAO1I,OAAQ2W,WAG9BL,EACK,6CAEHD,GAAY3N,EAAO6N,YAAa7N,EAAO1I,OAAQsW,WAG9C,oEAEHE,GAAgB9N,EAAO1I,eAU7B,SAAS6W,GAAUC,EAAOzc,GACxB,OAAIyc,IAAUzc,MAGV0V,OAAOC,MAAM8G,KAAU/G,OAAOC,MAAM3V,GAI1C,CACA,SAAS0c,GAAeC,EAAWC,GACjC,GAAID,EAAUxb,SAAWyb,EAAWzb,OAClC,OAAO,EAET,IAAK,IAAI4G,EAAI,EAAGA,EAAI4U,EAAUxb,OAAQ4G,IACpC,IAAKyU,GAAUG,EAAU5U,GAAI6U,EAAW7U,IACtC,OAAO,EAGX,OAAO,CACT,CAEA,SAAS+J,GAAQ+K,EAAWC,GAC1B,MAAMC,EAAUxa,EAAAA,SAAS,KAAO,CAC9Bua,SACAzO,OAAQwO,OACN,GACEG,EAAapL,UAAO,GACpBqL,EAAYrL,SAAOmL,GAEnBG,EADWF,EAAW1K,SAAWnN,QAAQ2X,GAAUG,EAAU3K,QAAQwK,QAAUJ,GAAeI,EAAQG,EAAU3K,QAAQwK,SACrGG,EAAU3K,QAAU,CAC3CwK,SACAzO,OAAQwO,KAMV,OAJAhL,EAAAA,UAAU,KACRmL,EAAW1K,SAAU,EACrB2K,EAAU3K,QAAU4K,GACnB,CAACA,IACGA,EAAM7O,MACf,CACA,SAAS8O,GAAYC,EAAUN,GAC7B,OAAOhL,GAAQ,IAAMsL,EAAUN,EACjC,CAEA,MAAMO,GAAS,CACbpM,EAAG,EACHS,EAAG,GAEC1Q,GAAMA,CAACsc,EAAQC,KAAY,CAC/BtM,EAAGqM,EAAOrM,EAAIsM,EAAOtM,EACrBS,EAAG4L,EAAO5L,EAAI6L,EAAO7L,IAEjB3P,GAAWA,CAACub,EAAQC,KAAY,CACpCtM,EAAGqM,EAAOrM,EAAIsM,EAAOtM,EACrBS,EAAG4L,EAAO5L,EAAI6L,EAAO7L,IAEjB8L,GAAYA,CAACF,EAAQC,IAAWD,EAAOrM,IAAMsM,EAAOtM,GAAKqM,EAAO5L,IAAM6L,EAAO7L,EAC7E+L,GAASC,IAAU,CACvBzM,EAAe,IAAZyM,EAAMzM,GAAWyM,EAAMzM,EAAI,EAC9BS,EAAe,IAAZgM,EAAMhM,GAAWgM,EAAMhM,EAAI,IAE1BiM,GAAQA,CAAC1X,EAAMlD,EAAO6a,EAAa,IAC1B,MAAT3X,EACK,CACLgL,EAAGlO,EACH2O,EAAGkM,GAGA,CACL3M,EAAG2M,EACHlM,EAAG3O,GAGD8a,GAAWA,CAACP,EAAQC,IAAW5V,KAAKmW,MAAMP,EAAOtM,EAAIqM,EAAOrM,IAAM,GAAKsM,EAAO7L,EAAI4L,EAAO5L,IAAM,GAC/FqM,GAAYA,CAACxJ,EAAQyJ,IAAWrW,KAAKC,OAAOoW,EAAO1Z,IAAIoZ,GAASG,GAAStJ,EAAQmJ,KACjF3F,GAAQ/S,GAAM0Y,IAAU,CAC5BzM,EAAGjM,EAAG0Y,EAAMzM,GACZS,EAAG1M,EAAG0Y,EAAMhM,KAgBRuM,GAAmBA,CAACC,EAASR,KAAW,CAC5C3J,IAAKmK,EAAQnK,IAAM2J,EAAMhM,EACzBwC,KAAMgK,EAAQhK,KAAOwJ,EAAMzM,EAC3BgD,OAAQiK,EAAQjK,OAASyJ,EAAMhM,EAC/BsC,MAAOkK,EAAQlK,MAAQ0J,EAAMzM,IAEzBkN,GAAaD,GAAW,CAAC,CAC7BjN,EAAGiN,EAAQhK,KACXxC,EAAGwM,EAAQnK,KACV,CACD9C,EAAGiN,EAAQlK,MACXtC,EAAGwM,EAAQnK,KACV,CACD9C,EAAGiN,EAAQhK,KACXxC,EAAGwM,EAAQjK,QACV,CACDhD,EAAGiN,EAAQlK,MACXtC,EAAGwM,EAAQjK,SAwBPmK,GAAOA,CAAC7J,EAAQ8J,IAChBA,GAASA,EAAMC,kBAvDHC,EAACF,EAAOG,KACxB,MAAMnQ,EAASyF,GAAQ,CACrBC,IAAKpM,KAAK8W,IAAID,EAAQzK,IAAKsK,EAAMtK,KACjCC,MAAOrM,KAAKC,IAAI4W,EAAQxK,MAAOqK,EAAMrK,OACrCC,OAAQtM,KAAKC,IAAI4W,EAAQvK,OAAQoK,EAAMpK,QACvCC,KAAMvM,KAAK8W,IAAID,EAAQtK,KAAMmK,EAAMnK,QAErC,OAAI7F,EAAO8F,OAAS,GAAK9F,EAAO+F,QAAU,EACjC,KAEF/F,GA8CEkQ,CAAYF,EAAMK,cAAenK,GAEnCT,GAAQS,GAEjB,IAAIoK,GAAaA,EACfC,OACAC,kBACAC,OACAT,YAEA,MAAMU,EA3BSC,EAACzK,EAAQ8J,IACnBA,EAGEJ,GAAiB1J,EAAQ8J,EAAMnI,OAAO+I,KAAKC,cAFzC3K,EAyBQyK,CAASJ,EAAKxJ,UAAWiJ,GACpCc,EAtBSC,EAAC7K,EAAQuK,EAAMD,IAC1BA,GAAmBA,EAAgBQ,YAC9B,IACF9K,EACH,CAACuK,EAAKhZ,KAAMyO,EAAOuK,EAAKhZ,KAAO+Y,EAAgBQ,YAAYP,EAAK7Y,OAG7DsO,EAeW6K,CAASL,EAAUD,EAAMD,GAE3C,MAAO,CACLD,OACAC,kBACAS,OAJclB,GAAKe,EAAWd,KAQ9BkB,GAAkBA,CAACC,EAAWC,KAC/BD,EAAUnB,OAAgDhZ,KAC3D,MAAMqa,EAAaF,EAAUnB,MACvBsB,EAAa5d,GAAS0d,EAAWC,EAAWxJ,OAAO6G,SACnD6C,EAAqBnC,GAAOkC,GAC5BtB,EAAQ,IACTqB,EACHxJ,OAAQ,CACN6G,QAAS2C,EAAWxJ,OAAO6G,QAC3BzK,QAASmN,EACTR,KAAM,CACJlc,MAAO4c,EACPT,aAAcU,GAEhBnB,IAAKiB,EAAWxJ,OAAOuI,MAGrBD,EAAUG,GAAW,CACzBC,KAAMY,EAAUhB,QAAQI,KACxBC,gBAAiBW,EAAUhB,QAAQK,gBACnCC,KAAMU,EAAUV,KAChBT,UAOF,MALe,IACVmB,EACHnB,QACAG,YAKJ,SAASqB,GAAWC,EAAU1N,EAAUsK,IACtC,IAAIQ,EAAQ,KACZ,SAAS6C,KAAYC,GACnB,GAAI9C,GAASA,EAAM+C,WAAara,MAAQwM,EAAQ4N,EAAS9C,EAAMzF,UAC7D,OAAOyF,EAAMgD,WAEf,MAAMA,EAAaJ,EAAS/H,MAAMnS,KAAMoa,GAMxC,OALA9C,EAAQ,CACNgD,aACAzI,SAAUuI,EACVC,SAAUra,MAELsa,CACT,CAIA,OAHAH,EAASI,MAAQ,WACfjD,EAAQ,MAEH6C,CACT,CAEA,MAAMK,GAAiBP,GAAWQ,GAAcA,EAAWC,OAAO,CAACC,EAAUjO,KAC3EiO,EAASjO,EAAQkO,WAAW1e,IAAMwQ,EAC3BiO,GACN,CAAA,IACGE,GAAiBZ,GAAWa,GAAcA,EAAWJ,OAAO,CAACC,EAAUjO,KAC3EiO,EAASjO,EAAQkO,WAAW1e,IAAMwQ,EAC3BiO,GACN,CAAA,IACGI,GAAkBd,GAAWQ,GAAcjY,OAAOnE,OAAOoc,IACzDO,GAAkBf,GAAWa,GAActY,OAAOnE,OAAOyc,IAE/D,IAAIG,GAA+BhB,GAAW,CAAChE,EAAa6E,KAC1D,MAAMrS,EAASuS,GAAgBF,GAAY1P,OAAO8P,GAAajF,IAAgBiF,EAAUN,WAAW3E,aAAa7c,KAAK,CAACC,EAAGC,IAAMD,EAAEuhB,WAAW/E,MAAQvc,EAAEshB,WAAW/E,OAClK,OAAOpN,IAGT,SAAS0S,GAAkBC,GACzB,OAAIA,EAAOC,IAAyB,YAAnBD,EAAOC,GAAGpU,KAClBmU,EAAOC,GAAGtF,YAEZ,IACT,CACA,SAASuF,GAAcF,GACrB,OAAIA,EAAOC,IAAyB,YAAnBD,EAAOC,GAAGpU,KAClBmU,EAAOC,GAAGhF,QAEZ,IACT,CAEA,IAAIkF,GAA0BtB,GAAW,CAACuB,EAAQC,IAASA,EAAKrQ,OAAOsQ,GAAQA,EAAKd,WAAW1e,KAAOsf,EAAOZ,WAAW1e,KAoDpHyf,GAAWA,CAACT,EAAWnF,IAAgBmF,EAAUN,WAAW3E,cAAgBF,EAAY6E,WAAW1e,GAEvG,MAAM0f,GAAgB,CACpB9D,MAAOL,GACPta,MAAO,GAEH0e,GAAc,CAClBC,UAAW,CAAE,EACbC,QAAS,CAAE,EACXC,IAAK,IAEDC,GAAW,CACfC,UAAWL,GACXM,YAAaP,GACbP,GAAI,MAGN,IAAIe,GAAWA,CAACC,EAAYC,IAAenf,GAASkf,GAAclf,GAASA,GAASmf,EAEhFC,GAAiC9D,IACnC,MAAM+D,EAAmBJ,GAAS3D,EAAMtK,IAAKsK,EAAMpK,QAC7CoO,EAAqBL,GAAS3D,EAAMnK,KAAMmK,EAAMrK,OACtD,OAAOwK,IAEL,GADoB4D,EAAiB5D,EAAQzK,MAAQqO,EAAiB5D,EAAQvK,SAAWoO,EAAmB7D,EAAQtK,OAASmO,EAAmB7D,EAAQxK,OAEtJ,OAAO,EAET,MAAMsO,EAA+BF,EAAiB5D,EAAQzK,MAAQqO,EAAiB5D,EAAQvK,QACzFsO,EAAiCF,EAAmB7D,EAAQtK,OAASmO,EAAmB7D,EAAQxK,OAEtG,GAD6BsO,GAAgCC,EAE3D,OAAO,EAET,MAAMC,EAAqBhE,EAAQzK,IAAMsK,EAAMtK,KAAOyK,EAAQvK,OAASoK,EAAMpK,OACvEwO,EAAuBjE,EAAQtK,KAAOmK,EAAMnK,MAAQsK,EAAQxK,MAAQqK,EAAMrK,MAEhF,SADgCwO,IAAsBC,IAItBD,GAAsBD,GAAkCE,GAAwBH,IAKhHI,GAA+BrE,IACjC,MAAM+D,EAAmBJ,GAAS3D,EAAMtK,IAAKsK,EAAMpK,QAC7CoO,EAAqBL,GAAS3D,EAAMnK,KAAMmK,EAAMrK,OACtD,OAAOwK,GACe4D,EAAiB5D,EAAQzK,MAAQqO,EAAiB5D,EAAQvK,SAAWoO,EAAmB7D,EAAQtK,OAASmO,EAAmB7D,EAAQxK,QAK5J,MAAM2O,GAAW,CACfrhB,UAAW,WACX2E,KAAM,IACN2c,cAAe,IACf/c,MAAO,MACPC,IAAK,SACL+c,KAAM,SACNC,eAAgB,OAChBC,aAAc,QACdC,cAAe,SAEXC,GAAa,CACjB3hB,UAAW,aACX2E,KAAM,IACN2c,cAAe,IACf/c,MAAO,OACPC,IAAK,QACL+c,KAAM,QACNC,eAAgB,MAChBC,aAAc,SACdC,cAAe,UAyBXE,GAAcA,EAClB3O,OAAQ4O,EACRxH,cACAyH,WACAC,4BACAC,8BAEA,MAAMC,EAAkBF,EAlBIG,EAACjP,EAAQoH,IAE9BsC,GAAiB1J,EADHoH,EAAY0C,MAAQ1C,EAAY0C,MAAMnI,OAAO+I,KAAKC,aAAe7B,IAiBlCmG,CAAsBL,EAAexH,GAAewH,EACxG,MAf2BM,EAAClP,EAAQoH,EAAa2H,MAC5C3H,EAAY6C,QAAQc,QAGlBgE,EAAwB3H,EAAY6C,QAAQc,OAA5CgE,CAAoD/O,GAWpDkP,CAAqBF,EAAiB5H,EAAa2H,IAThCI,EAACnP,EAAQ6O,EAAUE,IAA4BA,EAAwBF,EAAxBE,CAAkC/O,GASrBmP,CAAoBH,EAAiBH,EAAUE,IAMjIK,GAAmBxW,GAAQ+V,GAAY,IACxC/V,EACHmW,wBAAyBZ,KAkC3B,SAASkB,IAAsBC,cAC7BA,EAAalI,YACbA,EAAWoG,YACXA,EAAWqB,SACXA,EAAQU,mBACRA,EAAkBC,KAClBA,IAEA,OAAOF,EAAcvD,OAAO,SAAiB0D,EAAQlD,GACnD,MAAMvM,EAnBV,SAAmBuM,EAAWiB,GAQ5B,OAAOjO,GAAQQ,GAPGwM,EAAUlC,KAAKxJ,UAChB,CACfrB,IAAKgO,EAAYrE,MAAMhM,EACvBsC,MAAO,EACPC,OAAQ,EACRC,KAAM6N,EAAYrE,MAAMzM,IAG5B,CAUmBgT,CAAUnD,EAAWiB,GAC9BjgB,EAAKgf,EAAUN,WAAW1e,GAlDTqL,MA0DvB,GAPA6W,EAAOpC,IAAI5Z,KAAKlG,GAnDOqL,EAoDc,CACnCoH,SACAoH,cACAyH,WACAC,2BAA2B,IAxDEH,GAAY,IAC1C/V,EACHmW,wBAAyBnB,KA0DrB,OADA6B,EAAOtC,UAAUZ,EAAUN,WAAW1e,KAAM,EACrCkiB,EAET,MAAME,EAjDeC,EAACriB,EAAIiiB,EAAMD,KAClC,GAAkC,kBAAvBA,EACT,OAAOA,EAET,IAAKC,EACH,OAAO,EAET,MAAMrC,UACJA,EAASC,QACTA,GACEoC,EACJ,GAAIrC,EAAU5f,GACZ,OAAO,EAET,MAAMye,EAAWoB,EAAQ7f,GACzB,OAAOye,GAAWA,EAAS2D,eAkCHC,CAAiBriB,EAAIiiB,EAAMD,GAMjD,OADAE,EAAOrC,QAAQ7f,GAJM,CACnBoa,YAAapa,EACboiB,iBAGKF,CACT,EAAG,CACDpC,IAAK,GACLD,QAAS,CAAE,EACXD,UAAW,CAAC,GAEhB,CASA,SAAS0C,IAAQC,kBACfA,EAAiBC,WACjBA,EAAUvC,YACVA,EAAWpG,YACXA,IAEA,MAAM4I,EAbR,SAA4B7D,EAAYhH,GACtC,IAAKgH,EAAWvf,OACd,OAAO,EAET,MAAMqjB,EAAkB9D,EAAWA,EAAWvf,OAAS,GAAGqf,WAAW/E,MACrE,OAAO/B,EAAQ4K,WAAaE,EAAkBA,EAAkB,CAClE,CAOmBC,CAAmBJ,EAAmB,CACrDC,eAEF,MAAO,CACLxC,UAAWL,GACXM,cACAd,GAAI,CACFpU,KAAM,UACN8O,YAAa,CACXE,YAAaF,EAAY6E,WAAW1e,GACpC2Z,MAAO8I,IAIf,CACA,SAASG,IAAuB5D,UAC9BA,EAASuD,kBACTA,EAAiB1I,YACjBA,EAAWyH,SACXA,EAAQrB,YACRA,EAAWgC,KACXA,EAAItI,MACJA,EAAKqI,mBACLA,IAEA,MAAMQ,EAAa/C,GAAST,EAAWnF,GACvC,GAAa,MAATF,EACF,OAAO2I,GAAQ,CACbC,oBACAC,aACAvC,cACApG,gBAGJ,MAAMgJ,EAAQN,EAAkB9kB,KAAK+hB,GAAQA,EAAKd,WAAW/E,QAAUA,GACvE,IAAKkJ,EACH,OAAOP,GAAQ,CACbC,oBACAC,aACAvC,cACApG,gBAGJ,MAAMiJ,EAAkBzD,GAAwBL,EAAWuD,GACrDQ,EAAYR,EAAkBrd,QAAQ2d,GAU5C,MAAO,CACL7C,UATgB8B,GAAsB,CACtCC,cAFee,EAAgBnP,MAAMoP,GAGrClJ,cACAoG,cACAgC,OACAX,SAAUA,EAAS/E,MACnByF,uBAIA/B,cACAd,GAAI,CACFpU,KAAM,UACN8O,YAAa,CACXE,YAAaF,EAAY6E,WAAW1e,GACpC2Z,UAIR,CAEA,SAASqJ,GAAsB5I,EAAa6I,GAC1C,OAAO5f,QAAQ4f,EAAcC,SAAS9I,GACxC,CAyIA,MAAM+I,GAAqCA,CAACnG,EAAMoG,IAAQA,EAAInQ,OAAO+J,EAAKjZ,OAASqf,EAAIrQ,UAAUiK,EAAK+D,MAAQ,EAExGsC,GAA8BA,CAACrG,EAAMvK,EAAQ6Q,IAAa7Q,EAAOuK,EAAKgE,gBAAkBsC,EAASrQ,OAAO+J,EAAKgE,gBAAkBsC,EAASvQ,UAAUiK,EAAKkE,eAAiB,EACxKqC,GAAUA,EACdvG,OACAwG,iBACAF,cACIzH,GAAMmB,EAAK7Y,KAAMqf,EAAelQ,UAAU0J,EAAKhZ,KAAOmf,GAAmCnG,EAAMsG,GAAWD,GAA4BrG,EAAMwG,EAAelQ,UAAWgQ,IACtKG,GAAWA,EACfzG,OACAwG,iBACAF,cACIzH,GAAMmB,EAAK7Y,KAAMqf,EAAelQ,UAAU0J,EAAKjZ,OAXZ2f,EAAC1G,EAAMoG,IAAQA,EAAInQ,OAAO+J,EAAKhZ,KAAOof,EAAIrQ,UAAUiK,EAAK+D,MAAQ,EAW5C2C,CAAiC1G,EAAMsG,GAAWD,GAA4BrG,EAAMwG,EAAelQ,UAAWgQ,IAO5K,IAyDI/B,GAA4BA,CAAC7D,EAAW9B,KAC1C,MAAMW,EAAQmB,EAAUnB,MACxB,OAAKA,EAGErd,GAAI0c,EAAOW,EAAMnI,OAAO+I,KAAKC,cAF3BxB,GAmCP+H,GAAmCtY,IACrC,MAAMuY,EA/BsCC,GAC5C3E,SACAF,YACAtB,YACAkB,aACAqE,oBAEA,MAAMlP,EAAWiL,EAAUlC,KAAK/J,UAAUR,OACpC4M,EAAKD,EAAOC,GAClB,OAAKzB,GAGAyB,EAGW,YAAZA,EAAGpU,KAhFY+Y,GACnB5E,SACAF,YACAJ,aACAlB,YACAuF,oBAEA,MAAMV,EAAoBxD,GAA6BrB,EAAUgB,WAAW1e,GAAI4e,GAC1EmF,EAAgB/E,EAAUlC,KAC1BE,EAAOU,EAAUV,KACvB,IAAKuF,EAAkBljB,OACrB,MAjBgB2kB,GAClBhH,OACAiH,WACAX,cACIzH,GAAMmB,EAAK7Y,KAAM8f,EAASzQ,WAAWwJ,EAAKjZ,OAASof,GAAmCnG,EAAMsG,GAAWD,GAA4BrG,EAAMiH,EAASzQ,WAAY8P,IAazJU,CAAY,CACjBhH,OACAiH,SAAUvG,EAAUZ,KACpBwG,SAAUS,IAGd,MAAM/D,UACJA,EAASC,YACTA,GACEf,EACEgF,EAAelE,EAAUF,IAAI,GACnC,GAAIoE,EAAc,CAChB,MAAMC,EAAUvF,EAAWsF,GAC3B,GAAIlB,GAAsBkB,EAAcjB,GACtC,OAAOQ,GAAS,CACdzG,OACAwG,eAAgBW,EAAQrH,KACxBwG,SAAUS,IAGd,MAAMK,EAAmBtQ,GAAOqQ,EAAQrH,KAAMmD,EAAYrE,OAC1D,OAAO6H,GAAS,CACdzG,OACAwG,eAAgBY,EAChBd,SAAUS,GAEd,CACA,MAAM9B,EAAOM,EAAkBA,EAAkBljB,OAAS,GAC1D,GAAI4iB,EAAKvD,WAAW1e,KAAOgf,EAAUN,WAAW1e,GAC9C,OAAO+jB,EAAchR,UAAUR,OAEjC,GAAIyQ,GAAsBf,EAAKvD,WAAW1e,GAAIijB,GAAgB,CAC5D,MAAMnG,EAAOhJ,GAAOmO,EAAKnF,KAAMnB,GAAOsH,EAAchD,YAAYrE,QAChE,OAAO2H,GAAQ,CACbvG,OACAwG,eAAgB1G,EAChBwG,SAAUS,GAEd,CACA,OAAOR,GAAQ,CACbvG,OACAwG,eAAgBvB,EAAKnF,KACrBwG,SAAUS,KA4BHD,CAAe,CACpB5E,SACAF,YACAJ,aACAlB,YACAuF,kBA3HcoB,GAClBpB,gBACA/D,SACAN,iBAEA,MAAMzE,EAAUiF,GAAcF,GAC7B/E,GAAkD5W,KACnD,MAAM+gB,EAAcnK,EAAQC,YACtB7H,EAASqM,EAAW0F,GAAaxH,KAAK/J,UAAUR,OAChDgS,EAtB0BC,GAChCxE,YACAiD,gBACAqB,cACArE,kBAEA,MAAMwE,EAAcphB,QAAQ2c,EAAUH,QAAQyE,IAAgBtE,EAAUJ,UAAU0E,IAClF,OAAItB,GAAsBsB,EAAarB,GAC9BwB,EAAclJ,GAASI,GAAOsE,EAAYrE,OAE5C6I,EAAcxE,EAAYrE,MAAQL,IAYtBiJ,CAA4B,CAC7CxE,UAAWd,EAAOc,UAClBiD,gBACAqB,cACArE,YAAaf,EAAOe,cAEtB,OAAO/gB,GAAIqT,EAAQgS,IA+GZF,CAAc,CACnBnF,SACAN,aACAqE,kBAjBOlP,GAqBmB8P,CAAsCxY,GAC5DqS,EAAYrS,EAAKqS,UAEvB,OADyBA,EAAY6D,GAA0B7D,EAAWkG,GAAuBA,GAI/Fc,GAAiBA,CAACpD,EAAU3D,KAC9B,MAAMR,EAAOld,GAAS0d,EAAW2D,EAASlN,OAAO6G,SAC3CmC,EAAezB,GAAOwB,GAmB5B,MAZgB,CACdZ,MAPYvK,GAAQ,CACpBC,IAAK0L,EAAU/N,EACfuC,OAAQwL,EAAU/N,EAAI0R,EAAS/E,MAAMjK,OACrCF,KAAMuL,EAAUxO,EAChB+C,MAAOyL,EAAUxO,EAAImS,EAAS/E,MAAMlK,QAIpC+B,OAAQ,CACN6G,QAASqG,EAASlN,OAAO6G,QACzB0B,IAAK2E,EAASlN,OAAOuI,IACrBnM,QAASmN,EACTR,KAAM,CACJlc,MAAOkc,EACPC,mBAOR,SAASuH,GAAgBC,EAAKhG,GAC5B,OAAOgG,EAAIpiB,IAAIxC,GAAM4e,EAAW5e,GAClC,CAUA,IAkDI6kB,GAAmCA,EACrCC,sBACA9F,YACAsC,eAEA,MAAMyD,EAPuBC,EAAC1D,EAAU1F,IAAU1c,GAAIoiB,EAASlN,OAAO+I,KAAKC,aAAcxB,GAOzDoJ,CAAyB1D,EAAUwD,GAC7DhR,EAAS7T,GAAS8kB,EAAyB/F,EAAUlC,KAAK/J,UAAUR,QAC1E,OAAOrT,GAAI8f,EAAUiG,OAAOlS,UAAUR,OAAQuB,IAG5CoR,GAAgCA,EAClClG,YACAnF,cACAsL,yBACA7D,WACAC,4BACA6D,kBAAiB,MAEjB,MAAMC,EAAeplB,GAASklB,EAAwBnG,EAAUlC,KAAK/J,UAAUR,QAEzElH,EAAO,CACXoH,OAFc0J,GAAiB6C,EAAUlC,KAAK/J,UAAWsS,GAGzDxL,cACA0H,4BACAD,YAEF,OAAO8D,EAxgBsB/Z,KAAQ+V,UAAY,IAC9C/V,EACHmW,yBA1CuCxE,EA0CqB3R,EAAKwO,YAAYmD,KA1C9BT,IAC/C,MAAM+D,EAAmBJ,GAAS3D,EAAMtK,IAAKsK,EAAMpK,QAC7CoO,EAAqBL,GAAS3D,EAAMnK,KAAMmK,EAAMrK,OACtD,OAAOwK,GACDM,IAAS6D,GACJP,EAAiB5D,EAAQzK,MAAQqO,EAAiB5D,EAAQvK,QAE5DoO,EAAmB7D,EAAQtK,OAASmO,EAAmB7D,EAAQxK,WAPjC8K,OAgjBfsI,CAAuBja,GAAQwW,GAAiBxW,IAiF1E,MAAMka,GAAiB7H,IACrB,MAAM8H,EAAO9H,EAAUhB,QAAQc,OAE/B,OADCgI,IAAgC,eApsCnC,0BAosCsBrU,SAA4B5N,GAAU,EAAO,0CAA4CA,MACtGiiB,GA2DHC,GAAgCA,CAACzG,EAAWiE,KAChD,MAAMlP,EAAWiL,EAAUlC,KAAK/J,UAAUR,OAC1C,OAAOyQ,GAAsBhE,EAAUN,WAAW1e,GAAIijB,GAAiBhjB,GAAS8T,EAAUkP,EAAchD,YAAYrE,OAAS7H,GAEzH2R,GAA0BA,CAAC1G,EAAWiE,KAC1C,MAAMlP,EAAWiL,EAAUlC,KAAK/J,UAChC,OAAOiQ,GAAsBhE,EAAUN,WAAW1e,GAAIijB,GAAiB9G,GAAiBpI,EAAU4H,GAAOsH,EAAchD,YAAYrE,QAAU7H,GAG/I,IA0BI4R,GAAiB5H,GAAW,SAAwBf,EAAMuH,GAC5D,MAAMnH,EAAemH,EAAWvH,EAAK7Y,MACrC,MAAO,CACLlD,MAAOmc,EACPxB,MAAOC,GAAMmB,EAAK7Y,KAAMiZ,GAE5B,GAEA,MAeMwI,GAAgBA,CAACrJ,EAAOI,KAAS,IAClCJ,EACHnI,OAAQ,IACHmI,EAAMnI,OACTuI,SAGEkJ,GAAiBA,CAACnI,EAAWsB,EAAWJ,KAC5C,MAAMrC,EAAQmB,EAAUnB,MACtBkD,GAAST,EAAWtB,KAAsC,eAn0C9D,0BAm0CiDvM,SAA4B5N,GAAU,EAAO,iDAAmDA,MAC7Ima,EAAUhB,QAAQK,kBAA2C,eAp0CjE,0BAo0CoD5L,SAA4B5N,GAAU,EAAO,oEAAsEA,MACrK,MAAMuiB,EAAkBH,GAAejI,EAAUV,KAAMgC,EAAUuF,YAAY3I,MACvEmK,EA3BgCC,EAACtI,EAAWoI,EAAiBlH,KACnE,MAAM5B,EAAOU,EAAUV,KACvB,GAAkC,YAA9BU,EAAUgB,WAAWuH,KACvB,OAAOpK,GAAMmB,EAAK7Y,KAAM2hB,EAAgB9I,EAAK7Y,OAE/C,MAAM+hB,EAAiBxI,EAAUhB,QAAQI,KAAKtJ,WAAWwJ,EAAK+D,MAIxDoF,EAHkBpH,GAA6BrB,EAAUgB,WAAW1e,GAAI4e,GAC5CJ,OAAO,CAAC4H,EAAKC,IAAcD,EAAMC,EAAUpB,OAAO3R,UAAU0J,EAAK+D,MAAO,GACxE+E,EAAgB9I,EAAK7Y,MACjB+hB,EACtC,OAAIC,GAAiB,EACZ,KAEFtK,GAAMmB,EAAK7Y,KAAMgiB,IAcDH,CAAgCtI,EAAWoI,EAAiBlH,GAC7E0H,EAAQ,CACZR,kBACAvI,YAAawI,EACbQ,kBAAmB7I,EAAUnB,MAAQmB,EAAUnB,MAAMnI,OAAOuI,IAAM,MAEpE,IAAKJ,EAAO,CACV,MAAMG,EAAUG,GAAW,CACzBC,KAAMY,EAAUhB,QAAQI,KACxBC,gBAAiBuJ,EACjBtJ,KAAMU,EAAUV,KAChBT,MAAOmB,EAAUnB,QAEnB,MAAO,IACFmB,EACHhB,UAEJ,CACA,MAAM8J,EAAYT,EAAiB7mB,GAAIqd,EAAMnI,OAAOuI,IAAKoJ,GAAkBxJ,EAAMnI,OAAOuI,IAClF8J,EAAWb,GAAcrJ,EAAOiK,GAChC9J,EAAUG,GAAW,CACzBC,KAAMY,EAAUhB,QAAQI,KACxBC,gBAAiBuJ,EACjBtJ,KAAMU,EAAUV,KAChBT,MAAOkK,IAET,MAAO,IACF/I,EACHhB,UACAH,MAAOkK,IAmCX,IA8HIC,GAAoBxH,IACtB,MAAMC,EAAKD,EAAOC,GAClB,OAAKA,EAGW,YAAZA,EAAGpU,KACEoU,EAAGtF,YAAYE,YAEjBoF,EAAGhF,QAAQJ,YALT,MAsDX,SAAS4M,GAAkBC,GACzB,MAAuB,aAAhBA,EAAMC,OAAwC,eAAhBD,EAAMC,KAC7C,CAEA,SAASC,GAAkBvK,GACzB,MAAM+D,EAAmBJ,GAAS3D,EAAMtK,IAAKsK,EAAMpK,QAC7CoO,EAAqBL,GAAS3D,EAAMnK,KAAMmK,EAAMrK,OACtD,OAAO,SAAa0J,GAClB,OAAO0E,EAAiB1E,EAAMhM,IAAM2Q,EAAmB3E,EAAMzM,GAEjE,CAoEA,MAAM4X,GAAuBA,CAACvB,EAAM5J,IAAU5J,GAAQmK,GAAiBqJ,EAAM5J,IAU7E,SAASoL,IAAehH,UACtBA,EAAShgB,GACTA,IAEA,OAAOqD,QAAQ2c,EAAUH,QAAQ7f,IAAOggB,EAAUJ,UAAU5f,GAC9D,CAqEA,IAuDIinB,GAAgBA,EAClBC,aACAlI,YACAJ,aACAL,aACA4I,iBACA7F,WACA2B,oBAEA,MAAMmE,EAAgBL,GAAqB/H,EAAUlC,KAAK/J,UAAWmU,GAC/DG,EApMR,UAA0BD,cACxBA,EAAapI,UACbA,EAAST,WACTA,IAEA,MAAM+I,EAAazI,GAAgBN,GAAYrP,OAAOsQ,IACpD,IAAKA,EAAK+H,UACR,OAAO,EAET,MAAM/J,EAASgC,EAAK9C,QAAQc,OAC5B,IAAKA,EACH,OAAO,EAET,MAhCmB7C,EAgCAyM,GA/BRhV,MADelU,EAgCQsf,GA/BTtL,OAASyI,EAAMzI,MAAQhU,EAAOkU,MAAQuI,EAAM1I,IAAM/T,EAAOiU,QAAUwI,EAAMxI,OAASjU,EAAO+T,KAgChH,OAAO,EAjCb,IAAuB0I,EAAOzc,EAmC1B,GAAI4oB,GAAkBtJ,EAAlBsJ,CAA0BM,EAAc7U,QAC1C,OAAO,EAET,MAAMyK,EAAOwC,EAAKxC,KACZwK,EAAchK,EAAOjL,OAAOyK,EAAK8D,eACjCE,EAAiBoG,EAAcpK,EAAKgE,gBACpCC,EAAemG,EAAcpK,EAAKiE,cAClCwG,EAAcvH,GAAS1C,EAAOR,EAAKgE,gBAAiBxD,EAAOR,EAAKiE,eAChEyG,EAAmBD,EAAYzG,GAC/B2G,EAAiBF,EAAYxG,GACnC,OAAKyG,IAAqBC,IAGtBD,EACK1G,EAAiBwG,EAEnBvG,EAAeuG,KAExB,OAAKF,EAAWjoB,OAGU,IAAtBioB,EAAWjoB,OACNioB,EAAW,GAAG5I,WAAW1e,GAtDpC,UAAyBonB,cACvBA,EAAapI,UACbA,EAASsI,WACTA,IAEA,MAAMM,EAAc5I,EAAUlC,KAAK/J,UAAUR,OACvCsV,EAASP,EAAW9kB,IAAIslB,IAC5B,MAAM9K,EAAO8K,EAAU9K,KACjBvK,EAASoJ,GAAMiM,EAAU9K,KAAK7Y,KAAMijB,EAAc7U,OAAOyK,EAAK7Y,MAAO2jB,EAAUhL,KAAK/J,UAAUR,OAAOyK,EAAK8D,gBAChH,MAAO,CACL9gB,GAAI8nB,EAAUpJ,WAAW1e,GACzB+b,SAAUA,GAAS6L,EAAanV,MAEjCvV,KAAK,CAACC,EAAGC,IAAMA,EAAE2e,SAAW5e,EAAE4e,UACjC,OAAO8L,EAAO,GAAKA,EAAO,GAAG7nB,GAAK,IACpC,CAyCS+nB,CAAgB,CACrBX,gBACApI,YACAsI,eARO,IAUX,CAuJwBU,CAAiB,CACrCZ,gBACApI,YACAT,eAEF,IAAK8I,EACH,OAAOtH,GAET,MAAMlG,EAAc0E,EAAW8I,GACzB9E,EAAoBxD,GAA6BlF,EAAY6E,WAAW1e,GAAI4e,GAC5EqJ,EA7JkBC,EAACxK,EAAWyK,KACpC,MAAM5L,EAAQmB,EAAUnB,MACxB,OAAKA,EAGEwK,GAAqBoB,EAAM5L,EAAMnI,OAAO+I,KAAKlc,OAF3CknB,GA0JgCD,CAAoBrO,EAAauN,GAC1E,MA5EqBgB,GACrBpJ,YACAiJ,iCAAkCI,EAClClB,iBACAtN,cACA0I,oBACAU,oBAEA,IAAKpJ,EAAYyO,iBACf,OAAO,KAET,MAAMtL,EAAOnD,EAAYmD,KACnBiD,EAAc0F,GAAe9L,EAAYmD,KAAMgC,EAAUuF,YACzDnH,EAAe6C,EAAYhf,MAC3BsnB,EAAcF,EAAWrL,EAAKjZ,OAC9BykB,EAAYH,EAAWrL,EAAKhZ,KAE5BsgB,EADkBjF,GAAwBL,EAAWuD,GACvB9kB,KAAKgrB,IACvC,MAAMzoB,EAAKyoB,EAAM/J,WAAW1e,GACtB0oB,EAAYD,EAAM3L,KAAK/J,UAEvB4V,EADYD,EAAU1L,EAAK+D,MArBL,EAuBtB6H,EAA0B5F,GAAsBhjB,EAAIijB,GACpDwB,EAAcuC,GAAe,CACjChH,UAAWmH,EAAenH,UAC1BhgB,OAEF,OAAI4oB,EACEnE,EACK+D,EAAYE,EAAU1L,EAAKjZ,OAAS4kB,GAAaH,EAAYE,EAAU1L,EAAKhZ,KAAO2kB,EAErFJ,EAAcG,EAAU1L,EAAKjZ,OAASqZ,EAAeuL,GAAaJ,EAAcG,EAAU1L,EAAKhZ,KAAOoZ,EAAeuL,EAE1HlE,EACK+D,EAAYE,EAAU1L,EAAKjZ,OAASqZ,EAAeuL,GAAaH,EAAYE,EAAU1L,EAAKhZ,KAAOoZ,EAAeuL,EAEnHJ,EAAcG,EAAU1L,EAAKjZ,OAAS4kB,GAAaJ,EAAcG,EAAU1L,EAAKhZ,KAAO2kB,IAEhG,OAAKrE,EAGU,CACbrE,cACAD,UAAWmH,EAAenH,UAC1Bb,GAAI,CACFpU,KAAM,UACNoP,QAAS,CACPC,YAAakK,EAAY5F,WAAW1e,GACpC+Z,YAAaF,EAAY6E,WAAW1e,MATjC,MAqCFooB,CAAiB,CACtBH,mCACAjJ,YACAmI,iBACAtN,cACA0I,oBACAU,mBArImB4F,GACrBZ,iCAAkCI,EAClCrJ,YACAnF,cACA0I,oBACAN,OACAX,WACA2B,oBAEA,MAAMjG,EAAOnD,EAAYmD,KACnBiD,EAAc0F,GAAe9L,EAAYmD,KAAMgC,EAAUuF,YACzDnH,EAAe6C,EAAYhf,MAC3BsnB,EAAcF,EAAWrL,EAAKjZ,OAC9BykB,EAAYH,EAAWrL,EAAKhZ,KAqB5Bye,EAlDR,UAAiBzD,UACfA,EAASmF,QACTA,EAAO3B,WACPA,IAEA,OAAK2B,EAGA3B,GAGD2B,EAAQzF,WAAW/E,MAAQqF,EAAUN,WAAW/E,MAC3CwK,EAAQzF,WAAW/E,MAAQ,EAH3BwK,EAAQzF,WAAW/E,MAHnB,IASX,CAmCmBmP,CAAQ,CACvB9J,YACAmF,QAtBsB9E,GAAwBL,EAAWuD,GAC3B9kB,KAAKgrB,IACnC,MAAMzoB,EAAKyoB,EAAM/J,WAAW1e,GACtBwnB,EAAciB,EAAM3L,KAAK/J,UAAUR,OAAOyK,EAAK7Y,MAC/CykB,EAA0B5F,GAAsBhjB,EAAIijB,GACpDwB,EAAcuC,GAAe,CACjChH,UAAWiC,EACXjiB,OAEF,OAAI4oB,EACEnE,EACK+D,GAAahB,EAEfe,EAAcf,EAAcpK,EAEjCqH,EACK+D,GAAahB,EAAcpK,EAE7BmL,EAAcf,KACjB,KAIJhF,WAAY/C,GAAST,EAAWnF,KAElC,OAAO+I,GAAuB,CAC5B5D,YACAuD,oBACA1I,cACAyH,WACAW,OACAhC,cACAtG,MAAO8I,KAwFHoG,CAAiB,CACrBZ,mCACAjJ,YACAnF,cACA0I,oBACAN,KAAMkF,EAAenH,UACrBsB,WACA2B,mBAIA8F,GAAoBA,CAACxK,EAAYyK,KAAa,IAC7CzK,EACH,CAACyK,EAAQtK,WAAW1e,IAAKgpB,IAkDvBzO,GAASA,EACXqM,QACAqC,gBAAiBC,EACjBC,WAAYC,EACZ9H,SAAU+H,EACVnK,OAAQoK,EACRC,wBAEA,MAAMjI,EAAW+H,GAAkBzC,EAAMtF,SACnC6H,EAAaC,GAAoBxC,EAAMuC,WACvCF,EAAkBC,GAAyBtC,EAAMpW,QAAQyU,OAAOuE,UAChE1V,EAAS7T,GAASgpB,EAAiBrC,EAAM3L,QAAQgK,OAAOuE,WACxDvE,EAAS,CACbnR,SACA0V,UAAWP,EACXQ,gBAAiBvqB,GAAI0nB,EAAM3L,QAAQgK,OAAOwE,gBAAiB3V,IAEvDgJ,EAAO,CACX0M,UAAWtqB,GAAI+lB,EAAOuE,UAAWlI,EAASlN,OAAO5D,SACjDiZ,gBAAiBvqB,GAAI+lB,EAAOwE,gBAAiBnI,EAASlN,OAAO5D,SAC7DsD,OAAQ5U,GAAI+lB,EAAOnR,OAAQwN,EAASlN,OAAO+I,KAAKlc,QAE5CuP,EAAU,CACdyU,SACAnI,QAEF,GAAoB,eAAhB8J,EAAMC,MACR,MAAO,IACFD,EACHuC,aACA7H,WACA9Q,WAGJ,MAAMwO,EAAYmK,EAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,IAC3D2pB,EAAYL,GAAgBrC,GAAc,CAC9CC,WAAYpK,EAAKhJ,OACjBkL,YACAJ,WAAYuK,EAAWvK,WACvBL,WAAY4K,EAAW5K,WACvB4I,eAAgBP,EAAM1H,OACtBoC,WACA2B,cAAe2D,EAAM3D,gBAEjB2G,EAvEoBC,GAC1B7K,YACAJ,aACAL,aACA4I,iBACAjI,aAEA,MAAM4K,EA3BuBC,GAC7B5C,iBACAjI,SACAX,iBAEA,MAAM0D,EAAOyE,GAAkBS,GACzB3oB,EAAMkoB,GAAkBxH,GAC9B,IAAK+C,EACH,OAAO1D,EAET,GAAI0D,IAASzjB,EACX,OAAO+f,EAET,MAAMyL,EAAgBzL,EAAW0D,GACjC,IAAK+H,EAActN,QAAQK,gBACzB,OAAOwB,EAET,MAAMyK,EA7ekBtL,KACxB,MAAM4I,EAAQ5I,EAAUhB,QAAQK,gBAC/BuJ,IAAiC,eAx2CpC,0BAw2CuBnV,SAA4B5N,GAAU,EAAO,8DAAgEA,MAClI,MAAMgZ,EAAQmB,EAAUnB,MACxB,IAAKA,EAAO,CACV,MAAMG,EAAUG,GAAW,CACzBC,KAAMY,EAAUhB,QAAQI,KACxBE,KAAMU,EAAUV,KAChBT,MAAO,KACPQ,gBAAiB,OAEnB,MAAO,IACFW,EACHhB,UAEJ,CACA,MAAMuN,EAAe3D,EAAMC,kBAC1B0D,IAAwC,eAv3C3C,0BAu3C8B9Y,SAA4B5N,GAAU,EAAO,wFAA0FA,MACnK,MAAMkjB,EAAWb,GAAcrJ,EAAO0N,GAChCvN,EAAUG,GAAW,CACzBC,KAAMY,EAAUhB,QAAQI,KACxBE,KAAMU,EAAUV,KAChBT,MAAOkK,EACP1J,gBAAiB,OAEnB,MAAO,IACFW,EACHhB,UACAH,MAAOkK,IAidOyD,CAAkBF,GAClC,OAAOjB,GAAkBxK,EAAYyK,IASrBe,CAAuB,CACrC5C,iBACAjI,SACAX,eAEI4L,EAASzD,GAAkBxH,GACjC,IAAKiL,EACH,OAAOL,EAET,MAAMpM,EAAYa,EAAW4L,GAC7B,GAAI1K,GAAST,EAAWtB,GACtB,OAAOoM,EAET,GAAIpM,EAAUhB,QAAQK,gBACpB,OAAO+M,EAET,MAAMM,EAAUvE,GAAenI,EAAWsB,EAAWJ,GACrD,OAAOmK,GAAkBe,EAASM,IA+CFP,CAAsB,CACpD7K,YACAE,OAAQyK,EACRxC,eAAgBP,EAAM1H,OACtBN,WAAYuK,EAAWvK,WACvBL,WAAY4K,EAAW5K,aAczB,MAZe,IACVqI,EACHpW,UACA2Y,WAAY,CACVvK,WAAYuK,EAAWvK,WACvBL,WAAYqL,GAEd1K,OAAQyK,EACRrI,WACAiI,kBAAmBA,GAAqB,KACxCvH,oBAAoBuH,GAA4B,OAQhDc,GAAYA,EACdnL,SACAoC,WACA1C,aACA/E,cACAmI,yBAEA,MAAMC,EAAO/C,EAAOc,UACd+B,EAXR,SAAuB6C,EAAKhG,GAC1B,OAAOgG,EAAIpiB,IAAIxC,GAAM4e,EAAW5e,GAClC,CASwBsqB,CAAcrI,EAAKnC,IAAKlB,GACxCoB,EAAY8B,GAAsB,CACtCC,gBACAlI,cACAoG,YAAaf,EAAOe,YACpBqB,SAAUA,EAAS/E,MACnByF,qBACAC,SAEF,MAAO,IACF/C,EACHc,cAIAuK,GAA2BA,EAC7BrL,SACAF,YACAtB,YACAkB,aACA0C,WACA2B,oBAEA,MAAM6B,EAAsBnB,GAAiC,CAC3DzE,SACAF,YACAJ,aACAlB,YACAuF,kBAEF,OAAO4B,GAAiC,CACtCC,sBACA9F,YACAsC,cAIAkJ,GAAcA,EAChB5D,QACAuC,WAAYC,EACZ9H,SAAU+H,MAEe,SAAvBzC,EAAM6D,cAAmElnB,KAC3E,MAAMmnB,EAAuB9D,EAAM1H,OAC7BoC,EAAW+H,GAAkBzC,EAAMtF,SACnC6H,EAAaC,GAAoBxC,EAAMuC,YACvCvK,WACJA,EAAUL,WACVA,GACE4K,EACEnK,EAAYJ,EAAWgI,EAAM8C,SAAS1K,UAAUhf,IAChDmqB,EAASzD,GAAkBgE,GAChCP,IAAkC,eAl/DrC,0BAk/DwBhZ,SAA4B5N,GAAU,EAAO,oDAAsDA,MACzH,MAAMsW,EAAc0E,EAAW4L,GACzBjL,EAASmL,GAAU,CACvBnL,OAAQwL,EACRpJ,WACAzH,cACA+E,eAEIqK,EAAkBsB,GAAyB,CAC/CrL,SACAF,YACAtB,UAAW7D,EACX+E,aACA0C,WACA2B,cAAe2D,EAAM3D,gBAEvB,OAAO1I,GAAO,CACZ2E,SACA+J,kBACArC,QACAuC,aACA7H,cASAqJ,GAAgBA,EAClB3L,YACA4L,OACAhM,aACA0C,eAEA,MAAMrB,EAAc0F,GAAeiF,EAAK5N,KAAMgC,EAAUuF,YAClDsG,EAAa9L,GAA6B6L,EAAKlM,WAAW1e,GAAI4e,GAC9DkM,EAAWD,EAAW3lB,QAAQ8Z,IACpB,IAAd8L,IAA4C,eAzhEhD,0BAyhEmC3Z,SAA4B5N,GAAU,EAAO,6CAA+CA,MAC7H,MAAMwe,EAAgB8I,EAAWlX,MAAMmX,EAAW,GAC5C5H,EAAWnB,EAAcvD,OAAO,CAACC,EAAUe,KAC/Cf,EAASe,EAAKd,WAAW1e,KAAM,EACxBye,GACN,CAAE,GACCwE,EAAgB,CACpB8H,cAAwC,YAAzBH,EAAKlM,WAAWuH,KAC/BhG,cACAiD,YAvBkBxE,MAyCpB,MAAO,CACLQ,OATa,CACbc,UATgB8B,GAAsB,CACtCC,gBACAlI,YAAa+Q,EACb3K,cACAgC,KAAM,KACNX,SAAUA,EAAS/E,MACnByF,oBAAoB,IAIpB/B,cACAd,GAAI,CACFpU,KAAM,UACN8O,aAtCgB6E,EAsCaM,EAAUN,WAtCR,CACnC/E,MAAO+E,EAAW/E,MAClBI,YAAa2E,EAAW3E,gBAyCtBkJ,kBAiJJ,MAAM+H,GAAapE,GAAgC,SAAvBA,EAAM6D,aAC5BQ,GAAsBA,CAACrE,EAAOoC,EAASkC,KAC3C,MAAM/B,EA/IgBgC,EAAChC,EAAYH,KAAa,CAChDpK,WAAYuK,EAAWvK,WACvBL,WAAYwK,GAAkBI,EAAW5K,WAAYyK,KA6IlCmC,CAAkBvE,EAAMuC,WAAYH,GACvD,OAAKgC,GAAWpE,IAAUsE,EACjB3Q,GAAO,CACZqM,QACAuC,eAGGqB,GAAY,CACjB5D,QACAuC,gBAGJ,SAASiC,GAAwBxE,GAC/B,OAAIA,EAAM9N,YAAqC,SAAvB8N,EAAM6D,aACrB,IACF7D,EACH2C,kBAAmB,MAGhB3C,CACT,CACA,MAAMyE,GAAS,CACbxE,MAAO,OACPyE,UAAW,KACXC,aAAa,GAEf,IAAIC,GAAUA,CAAC5E,EAAQyE,GAAQI,KAC7B,GAAoB,UAAhBA,EAAO1gB,KACT,MAAO,IACFsgB,GACHE,aAAa,GAGjB,GAAoB,oBAAhBE,EAAO1gB,KAA4B,CACnB,SAAhB6b,EAAMC,QAA6C,eA3uEzD,0BA2uE4C1V,SAA4B5N,GAAU,EAAO,gDAAkDA,MACvI,MAAMmmB,SACJA,EAAQT,gBACRA,EAAe3H,SACfA,EAAQ6H,WACRA,EAAUsB,aACVA,GACEgB,EAAOC,QACL1M,EAAYmK,EAAWvK,WAAW8K,EAAS1K,UAAUhf,IACrD4qB,EAAOzB,EAAW5K,WAAWmL,EAAShM,UAAU1d,IAChDilB,EAAS,CACbuE,UAAWP,EACXQ,gBAAiBzK,EAAUiG,OAAOlS,UAAUR,OAC5CuB,OAAQyH,IAEJN,EAAU,CACdgK,SACAnI,KAAM,CACJ0M,UAAWtqB,GAAI+lB,EAAOuE,UAAWlI,EAASlN,OAAO6G,SACjDwO,gBAAiBvqB,GAAI+lB,EAAOuE,UAAWlI,EAASlN,OAAO6G,SACvDnH,OAAQ5U,GAAI+lB,EAAOuE,UAAWlI,EAASlN,OAAO+I,KAAKlc,SAGjD0qB,EAAwB9M,GAAgBsK,EAAW5K,YAAYqN,MAAMpM,IAASA,EAAKqM,gBACnF3M,OACJA,EAAM+D,cACNA,GACE0H,GAAc,CAChB3L,YACA4L,OACAhM,WAAYuK,EAAWvK,WACvB0C,aAkBF,MAhBe,CACbuF,MAAO,WACP/N,YAAY,EACZ4Q,WACAe,eACAtB,aACAlO,UACAzK,QAASyK,EACT0Q,wBACAzM,SACA+D,gBACA6I,aAAc5M,EACdoC,WACAiI,kBAAmB,KACnBvH,mBAAoB,KAGxB,CACA,GAAoB,wBAAhByJ,EAAO1gB,KACT,MAAoB,eAAhB6b,EAAMC,OAA0C,iBAAhBD,EAAMC,MACjCD,GAES,aAAhBA,EAAMC,QAAiD,eAlyE7D,0BAkyEgD1V,SAA4B5N,GAAU,EAAO,sCAAsCqjB,EAAMC,SAAWtjB,MACjI,IACVqjB,EACHC,MAAO,eAIX,GAAoB,2BAAhB4E,EAAO1gB,KAET,MADkB,eAAhB6b,EAAMC,OAA0C,iBAAhBD,EAAMC,QAAqD,eA1yEjG,0BA0yEoF1V,SAA4B5N,GAAU,EAAO,cAAckoB,EAAO1gB,0BAA0B6b,EAAMC,SAAWtjB,MA9K7JwoB,GAClCnF,QACAoF,gBAGA,MAAMC,EAAmBD,EAAUE,SAAS1pB,IAAI+X,GAE7BkD,GADAmJ,EAAMuC,WAAW5K,WAAWhE,EAAOR,aACTQ,EAAOnG,SAG9CmK,EAAa,IACdqI,EAAMuC,WAAW5K,cACjBD,GAAe2N,IAEdE,EAAmBxN,GAnCWyN,GACpCC,YACAC,oBACAhL,eAEA,MAAMiL,EAAqBjL,EAASlN,OAAO+I,KAAKlc,MAChD,OAAOorB,EAAU7pB,IAAIwc,IACnB,MAEMzC,EAfKmB,KACb,MAAMnB,EAAQmB,EAAUnB,MAExB,OADCA,IAAiC,eAnmEpC,0BAmmEuBpL,SAA4B5N,GAAU,EAAO,sCAAwCA,MACnGgZ,GAYSiQ,CADGF,EADGtN,EAAUN,WAAW3E,cAKnC0S,EArCYC,GACpB1N,YACAlL,OAAQ6Y,EACRC,0BAEA,MAAM3H,EAASnR,GAAOkL,EAAUiG,OAAQ0H,GAClC7P,EAAO3I,GAAW8Q,EAAQ2H,GAUhC,MATc,IACT5N,EACH6N,YAAa,IACR7N,EAAU6N,YACb5H,UAEFA,SACAnI,SAuBc4P,CAAgB,CAC5B1N,YACAlL,OAHkB5U,GAAIqtB,EADMhQ,EAAMnI,OAAO+I,KAAKlc,OAK9C2rB,oBAAqBtL,EAASlN,OAAO6G,UAEvC,OAAOwR,KAkB+BL,CAAgC,CACtEC,UAAWL,EAAUK,UACrBC,kBAAmB/N,EACnB+C,SAAUsF,EAAMtF,YAEZ1C,EAAa,IACdgI,EAAMuC,WAAWvK,cACjBuN,GAELH,EAAUc,SAAS3U,QAAQnY,WAClB4e,EAAW5e,KAEpB,MAAMmpB,EAAa,CACjB5K,aACAK,cAEImO,EAAYrG,GAAkBE,EAAM1H,QACpC8N,EAAUD,EAAY5D,EAAW5K,WAAWwO,GAAa,KACzD/N,EAAYmK,EAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,IAC3D4qB,EAAOzB,EAAW5K,WAAWqI,EAAM8C,SAAShM,UAAU1d,KAE1Dkf,OAAQ4M,EAAY7I,cACpBA,GACE0H,GAAc,CAChB3L,YACA4L,OACAhM,aACA0C,SAAUsF,EAAMtF,WAGZpC,EAAS+H,GAAc,CAC3BC,WAAYN,EAAMpW,QAAQsM,KAAKhJ,OAC/BkL,UAAWmK,EAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,IAC1D4e,WAAYuK,EAAWvK,WACvBL,WAAY4K,EAAW5K,WACvB4I,eANqB6F,GAAWA,EAAQ1E,iBAAmB1B,EAAM1H,OAAS4M,EAO1ExK,SAAUsF,EAAMtF,SAChB2B,kBAGIgK,EAAgB,IACjBrG,EACHC,MAAO,WACP3H,SACA4M,eACA3C,aACAlG,gBACAjB,oBAAoB,GAEtB,MAAoB,eAAhB4E,EAAMC,MACDoG,EAEW,IACfA,EACHpG,MAAO,eACPpM,OAAQmM,EAAMnM,OACdyS,WAAW,IAyGJnB,CAA8B,CACnCnF,QACAoF,UAAWP,EAAOC,UAGtB,GAAoB,SAAhBD,EAAO1gB,KAAiB,CAC1B,GAAoB,iBAAhB6b,EAAMC,MACR,OAAOD,EAERD,GAAkBC,KAAkC,eApzEzD,0BAozE4CzV,SAA4B5N,GAAU,EAAO,GAAGkoB,EAAO1gB,+BAA+B6b,EAAMC,SAAWtjB,MAC/I,MACE0hB,OAAQgE,GACNwC,EAAOC,QACX,OAAIhQ,GAAUuN,EAAiBrC,EAAMpW,QAAQyU,OAAOuE,WAC3C5C,EAEFrM,GAAO,CACZqM,QACAqC,kBACA/J,OAAQ8L,GAAWpE,GAASA,EAAM1H,OAAS,MAE/C,CACA,GAAoB,4BAAhBuM,EAAO1gB,KAAoC,CAC7C,GAAoB,iBAAhB6b,EAAMC,MACR,OAAOuE,GAAwBxE,GAEjC,GAAoB,eAAhBA,EAAMC,MACR,OAAOuE,GAAwBxE,GAEhCD,GAAkBC,KAAkC,eAx0EzD,0BAw0E4CzV,SAA4B5N,GAAU,EAAO,GAAGkoB,EAAO1gB,+BAA+B6b,EAAMC,SAAWtjB,MAC/I,MAAMvD,GACJA,EAAE2d,UACFA,GACE8N,EAAOC,QACLjZ,EAASmU,EAAMuC,WAAW5K,WAAWve,GAC3C,IAAKyS,EACH,OAAOmU,EAET,MAAM3J,EAAWQ,GAAgBhL,EAAQkL,GACzC,OAAOsN,GAAoBrE,EAAO3J,GAAU,EAC9C,CACA,GAAoB,gCAAhBwO,EAAO1gB,KAAwC,CACjD,GAAoB,iBAAhB6b,EAAMC,MACR,OAAOD,EAERD,GAAkBC,KAAkC,eAx1EzD,0BAw1E4CzV,SAA4B5N,GAAU,EAAO,8CAA8CqjB,EAAMC,SAAWtjB,MACpJ,MAAMvD,GACJA,EAAEunB,UACFA,GACEkE,EAAOC,QACLjZ,EAASmU,EAAMuC,WAAW5K,WAAWve,GAC1CyS,IAAkC,eA91EvC,0BA81E0BtB,SAA4B5N,GAAU,EAAO,6BAA6BvD,kCAAqCuD,MACnIkP,EAAO8U,YAAcA,IAAsC,eA/1EjE,0BA+1EoDpW,SAA4B5N,GAAU,EAAO,wCAAwC8B,OAAOkiB,+BACtHliB,OAAOoN,EAAO8U,cAAgBhkB,MACpD,MAAMylB,EAAU,IACXvW,EACH8U,aAEF,OAAO0D,GAAoBrE,EAAOoC,GAAS,EAC7C,CACA,GAAoB,wCAAhByC,EAAO1gB,KAAgD,CACzD,GAAoB,iBAAhB6b,EAAMC,MACR,OAAOD,EAERD,GAAkBC,KAAkC,eA32EzD,0BA22E4CzV,SAA4B5N,GAAU,EAAO,8CAA8CqjB,EAAMC,SAAWtjB,MACpJ,MAAMvD,GACJA,EAAEsoB,iBACFA,GACEmD,EAAOC,QACLjZ,EAASmU,EAAMuC,WAAW5K,WAAWve,GAC1CyS,IAAkC,eAj3EvC,0BAi3E0BtB,SAA4B5N,GAAU,EAAO,6BAA6BvD,2CAA8CuD,MAC5IkP,EAAO6V,mBAAqBA,IAA6C,eAl3E/E,0BAk3EkEnX,SAA4B5N,GAAU,EAAO,+CAA+C8B,OAAOijB,+BAC3IjjB,OAAOoN,EAAO6V,qBAAuB/kB,MAC3D,MAAMylB,EAAU,IACXvW,EACH6V,oBAEF,OAAO2C,GAAoBrE,EAAOoC,GAAS,EAC7C,CACA,GAAoB,0BAAhByC,EAAO1gB,KAAkC,CAC3C,GAAoB,iBAAhB6b,EAAMC,OAA4C,mBAAhBD,EAAMC,MAC1C,OAAOD,EAERD,GAAkBC,KAAkC,eA93EzD,0BA83E4CzV,SAA4B5N,GAAU,EAAO,kCAAkCqjB,EAAMC,SAAWtjB,MACvIqjB,EAAM+E,wBAAiD,eA/3E5D,0BA+3E+Cxa,SAA4B5N,GAAU,EAAO,+DAAiEA,MACzJ,MAAMoa,EAAY8N,EAAOC,QAAQ/N,UACjC,GAAIjC,GAAUkL,EAAMtF,SAASlN,OAAO5D,QAASmN,GAC3C,OAAOyN,GAAwBxE,GAEjC,MAAMtF,EAAWoD,GAAekC,EAAMtF,SAAU3D,GAChD,OAAIqN,GAAWpE,GACN4D,GAAY,CACjB5D,QACAtF,aAGG/G,GAAO,CACZqM,QACAtF,YAEJ,CACA,GAAoB,+BAAhBmK,EAAO1gB,KAAuC,CAChD,IAAK4b,GAAkBC,GACrB,OAAOA,EAET,MAAMJ,EAAYiF,EAAOC,QAAQlF,UACjC,GAAI9K,GAAU8K,EAAWI,EAAMtF,SAASlN,OAAOuI,KAC7C,OAAOiK,EAET,MAAMhB,EAAgB,IACjBgB,EAAMtF,SACTlN,OAAQ,IACHwS,EAAMtF,SAASlN,OAClBuI,IAAK6J,IAGT,MAAO,IACFI,EACHtF,SAAUsE,EAEd,CACA,GAAoB,YAAhB6F,EAAO1gB,MAAsC,cAAhB0gB,EAAO1gB,MAAwC,cAAhB0gB,EAAO1gB,MAAwC,eAAhB0gB,EAAO1gB,KAAuB,CAC3H,GAAoB,eAAhB6b,EAAMC,OAA0C,iBAAhBD,EAAMC,MACxC,OAAOD,EAES,aAAhBA,EAAMC,QAAiD,eAx6E7D,0BAw6EgD1V,SAA4B5N,GAAU,EAAO,GAAGkoB,EAAO1gB,6CAA+CxH,MAClJ,MAAMgJ,EAt5BY4gB,GACpBvG,QACA7b,WAEA,MAAMqiB,EARmBC,EAACnO,EAAQX,KAClC,MAAMve,EAAK0mB,GAAkBxH,GAC7B,OAAOlf,EAAKue,EAAWve,GAAM,MAMNqtB,CAAmBzG,EAAM1H,OAAQ0H,EAAMuC,WAAW5K,YACnE+O,EAA4BjqB,QAAQ+pB,GAEpCjD,EAASiD,GADFxG,EAAMuC,WAAW5K,WAAWqI,EAAM8C,SAAShM,UAAU1d,IAE5DR,EAAY2qB,EAAOnN,KAAKxd,UACxB+tB,EAAmC,aAAd/tB,IAAsC,YAATuL,GAA+B,cAATA,IAAuC,eAAdvL,IAAwC,cAATuL,GAAiC,eAATA,GAC9J,GAAIwiB,IAAuBD,EACzB,OAAO,KAET,MAAME,EAA2B,cAATziB,GAAiC,eAATA,EAC1CiU,EAAY4H,EAAMuC,WAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,IACjEytB,EAA8B7G,EAAMpW,QAAQsM,KAAK2M,iBACjD7K,WACJA,EAAUL,WACVA,GACEqI,EAAMuC,WACV,OAAOoE,EAnbaG,GACpBF,kBACAxO,YACAnF,cACA+E,aACAuI,iBACA7F,WACAmM,8BACAE,0BACA1K,oBAEA,IAAKpJ,EAAY0N,UACf,OAAO,KAET,MAAMhF,EAAoBxD,GAA6BlF,EAAY6E,WAAW1e,GAAI4e,GAC5E9E,EAAe2F,GAAST,EAAWnF,GACnCqF,EAjsBgB0O,GACtBJ,kBACAxO,YACAnF,cACA0I,oBACA4E,qBAEA,IAAKtN,EAAYyO,iBACf,OAAO,KAGT,IADiBrJ,GAAkBkI,GAEjC,OAAO,KAET,SAAS0G,EAAUpb,GACjB,MAAM0M,EAAK,CACTpU,KAAM,UACNoP,QAAS,CACPC,YAAa3H,EACbsH,YAAaF,EAAY6E,WAAW1e,KAGxC,MAAO,IACFmnB,EACHhI,KAEJ,CACA,MAAMW,EAAMqH,EAAenH,UAAUF,IAC/BgO,EAAYhO,EAAIzgB,OAASygB,EAAI,GAAK,KACxC,GAAI0N,EACF,OAAOM,EAAYD,EAAUC,GAAa,KAE5C,MAAMC,EAAmB1O,GAAwBL,EAAWuD,GAC5D,IAAKuL,EACH,OAAKC,EAAiB1uB,OAIfwuB,EADME,EAAiBA,EAAiB1uB,OAAS,GAClCqf,WAAW1e,IAHxB,KAKX,MAAMguB,EAAiBD,EAAiBhuB,UAAUkuB,GAAKA,EAAEvP,WAAW1e,KAAO8tB,IACrD,IAApBE,IAAkD,eA5etD,0BA4eyC7c,SAA4B5N,GAAU,EAAO,wCAA0CA,MAC9H,MAAM2qB,EAAgBF,EAAiB,EACvC,OAAIE,EAAgB,EACX,KAGFL,EADQE,EAAiBG,GACRxP,WAAW1e,KAkpBpB4tB,CAAkB,CAC/BJ,kBACAxO,YACAnF,cACA0I,oBACA4E,oBAvVkBgH,GACpBX,kBACA1T,eACAkF,YACAJ,aACA/E,cACA0I,oBACA4E,iBACA7F,WACA2B,oBAEA,MAAMmL,EAAQjH,EAAehI,GAE7B,GADCiP,IAAiC,eA9zBpC,0BA8zBuBjd,SAA4B5N,GAAU,EAAO,6DAA+DA,MAC9G,YAAf6qB,EAAMrjB,KAAoB,CAC5B,MAAM0X,EArCQ4L,GAChBb,kBACA1T,eACAyI,oBACA/H,eAEA,IAAK+H,EAAkBljB,OACrB,OAAO,KAET,MAAMS,EAAe0a,EAASb,MACxBuU,EAAgBV,EAAkB1tB,EAAe,EAAIA,EAAe,EAEpEwuB,EAAY/L,EAAkBA,EAAkBljB,OAAS,GAAGqf,WAAW/E,MAE7E,OAAIuU,EAHe3L,EAAkB,GAAG7D,WAAW/E,OAM/CuU,GAJepU,EAAewU,EAAYA,EAAY,GAEjD,KAKFJ,GAiBYG,CAAY,CAC3Bb,kBACA1T,eACAU,SAAU4T,EAAMvU,YAChB0I,sBAEF,OAAgB,MAAZE,EACK,KAEFG,GAAuB,CAC5B5D,YACAuD,oBACA1I,cACAyH,WACAW,KAAMkF,EAAenH,UACrBC,YAAakH,EAAelH,YAC5BtG,MAAO8I,GAEX,CACA,MAAMA,EAlFU8L,GAChBf,kBACA3T,cACA+E,aACAzE,UACA8I,oBAEA,IAAKpJ,EAAYyO,iBACf,OAAO,KAET,MAAMkG,EAAYrU,EAAQC,YAEpBqU,EADc7P,EAAW4P,GACM9P,WAAW/E,MAEhD,OADyCqJ,GAAsBwL,EAAWvL,GAEpEuK,EACKiB,EAEFA,EAAmB,EAExBjB,EACKiB,EAAmB,EAErBA,GA2DUF,CAAY,CAC3Bf,kBACA3T,cACAmG,UAAWmH,EAAenH,UAC1BpB,aACAzE,QAASiU,EAAMjU,QACf8I,kBAEF,OAAgB,MAAZR,EACK,KAEFG,GAAuB,CAC5B5D,YACAuD,oBACA1I,cACAyH,WACAW,KAAMkF,EAAenH,UACrBC,YAAakH,EAAelH,YAC5BtG,MAAO8I,KAqSH0L,CAAgB,CACpBX,kBACA1T,eACAkF,YACAJ,aACA/E,cACA0I,oBACA4E,iBACA7F,WACA2B,kBAEF,IAAK/D,EACH,OAAO,KAET,MAAM4F,EAAsBnB,GAAiC,CAC3DzE,SACAF,YACAtB,UAAW7D,EACX+E,aACAqE,kBAUF,GAR+BiC,GAA8B,CAC3DlG,YACAnF,cACAsL,uBAAwBL,EACxBxD,SAAUA,EAAS/E,MACnBgF,2BAA2B,EAC3B6D,gBAAgB,IAQhB,MAAO,CACL6D,gBANsBpE,GAAiC,CACvDC,sBACA9F,YACAsC,aAIApC,SACAqK,kBAAmB,MAGvB,MAAMxN,EAAW9b,GAAS6kB,EAAqB2I,GACzCiB,EA/IoBC,GAC1BzP,SACAoC,WACAzH,cACA+E,aACAgQ,sBAEA,MAAMC,EAAmBnK,GAAepD,EAAUpiB,GAAIoiB,EAASlN,OAAO5D,QAASoe,IACzEE,EAAoBjV,EAAY0C,MAAQkB,GAAgB5D,EAAa3a,GAAI2a,EAAY0C,MAAMnI,OAAO5D,QAASoe,IAAoB/U,EAC/HoI,EAAO/C,EAAOc,UACd+O,EAAqBjN,GAAsB,CAC/CC,cAAe4C,GAAgB1C,EAAKnC,IAAKlB,GACzC/E,cACAoG,YAAaf,EAAOe,YACpBqB,SAAUuN,EAAiBtS,MAC3B0F,OACAD,oBAAoB,IAEhBkG,EAAsBpG,GAAsB,CAChDC,cAAe4C,GAAgB1C,EAAKnC,IAAKlB,GACzC/E,YAAaiV,EACb7O,YAAaf,EAAOe,YACpBqB,SAAUA,EAAS/E,MACnB0F,OACAD,oBAAoB,IAEhBpC,EAAY,CAAA,EACZC,EAAU,CAAA,EACVqC,EAAS,CAACD,EAAM8M,EAAoB7G,GAiB1C,OAhBAjG,EAAKnC,IAAI3H,QAAQnY,IACf,MAAMod,EAvCV,SAAuBpd,EAAIkiB,GACzB,IAAK,IAAIjc,EAAI,EAAGA,EAAIic,EAAO7iB,OAAQ4G,IAAK,CACtC,MAAMmX,EAAe8E,EAAOjc,GAAG4Z,QAAQ7f,GACvC,GAAIod,EACF,OAAOA,CAEX,CACA,OAAO,IACT,CA+ByB4R,CAAchvB,EAAIkiB,GACnC9E,EACFyC,EAAQ7f,GAAMod,EAGhBwC,EAAU5f,IAAM,IAEA,IACbkf,EACHc,UAAW,CACTF,IAAKmC,EAAKnC,IACVF,YACAC,aAqGa8O,CAAsB,CACrCzP,SACAoC,WACAzH,cACA+E,aACAgQ,gBAAiB7S,IAEnB,MAAO,CACLkN,gBAAiB0E,EACjBzO,OAAQwP,EACRnF,kBAAmBxN,IAyWO2R,CAAgB,CAC1CF,kBACAC,8BACAzO,YACAnF,YAAasQ,EACbvL,aACA0C,SAAUsF,EAAMtF,SAChBqM,wBAAyB/G,EAAMpW,QAAQyU,OAAOuE,UAC9CrC,eAAgBP,EAAM1H,OACtB+D,cAAe2D,EAAM3D,gBAxGLgM,GAClBzB,kBACAC,8BACAzO,YACAmL,SACAvL,aACAL,aACA+C,WACA2B,oBAEA,MAAMpJ,EA3QwBqV,GAC9B1B,kBACA1I,sBACAjhB,SACA0a,aACA+C,eAEA,MAAM9D,EAAS3Z,EAAO6Y,QAAQc,OAC9B,IAAKA,EACH,OAAO,KAET,MAAMR,EAAOnZ,EAAOmZ,KACdmS,EAAyBjP,GAAS1C,EAAOR,EAAKjZ,OAAQyZ,EAAOR,EAAKhZ,MAClEsjB,EAAazI,GAAgBN,GAAYrP,OAAOwO,GAAaA,IAAc7Z,GAAQqL,OAAOwO,GAAaA,EAAU6J,WAAWrY,OAAOwO,GAAara,QAAQqa,EAAUhB,QAAQc,SAAStO,OAAOwO,GAAa2C,GAA+BiB,EAAS/E,MAAxC8D,CAA+CkF,GAAe7H,KAAaxO,OAAOwO,IAC7R,MAAM0R,EAAiB7J,GAAe7H,GACtC,OAAI8P,EACKhQ,EAAOR,EAAKiE,cAAgBmO,EAAepS,EAAKiE,cAElDmO,EAAepS,EAAKgE,gBAAkBxD,EAAOR,EAAKgE,kBACxD9R,OAAOwO,IACR,MAAM0R,EAAiB7J,GAAe7H,GAChC2R,EAA8BnP,GAASkP,EAAepS,EAAKjZ,OAAQqrB,EAAepS,EAAKhZ,MAC7F,OAAOmrB,EAAuBC,EAAepS,EAAKjZ,SAAWorB,EAAuBC,EAAepS,EAAKhZ,OAASqrB,EAA4B7R,EAAOR,EAAKjZ,SAAWsrB,EAA4B7R,EAAOR,EAAKhZ,QAC3M9G,KAAK,CAACC,EAAGC,KACV,MAAMud,EAAQ4K,GAAepoB,GAAG6f,EAAKgE,gBAC/B9iB,EAASqnB,GAAenoB,GAAG4f,EAAKgE,gBACtC,OAAIwM,EACK7S,EAAQzc,EAEVA,EAASyc,IACfzL,OAAO,CAACwO,EAAW/D,EAAOhU,IAAU4f,GAAe7H,GAAWV,EAAKgE,kBAAoBuE,GAAe5f,EAAM,IAAIqX,EAAKgE,iBACxH,IAAKsG,EAAWjoB,OACd,OAAO,KAET,GAA0B,IAAtBioB,EAAWjoB,OACb,OAAOioB,EAAW,GAEpB,MAAMgI,EAAWhI,EAAWpY,OAAOwO,GACPwC,GAASqF,GAAe7H,GAAWV,EAAKjZ,OAAQwhB,GAAe7H,GAAWV,EAAKhZ,KAClGurB,CAAkBzK,EAAoB9H,EAAK7Y,QAEpD,OAAwB,IAApBmrB,EAASjwB,OACJiwB,EAAS,GAEdA,EAASjwB,OAAS,EACbiwB,EAASpyB,KAAK,CAACC,EAAGC,IAAMmoB,GAAepoB,GAAG6f,EAAKjZ,OAASwhB,GAAenoB,GAAG4f,EAAKjZ,QAAQ,GAEzFujB,EAAWpqB,KAAK,CAACC,EAAGC,KACzB,MAAMud,EAAQsB,GAAU6I,EAAqBzI,GAAWkJ,GAAepoB,KACjEe,EAAS+d,GAAU6I,EAAqBzI,GAAWkJ,GAAenoB,KACxE,OAAIud,IAAUzc,EACLyc,EAAQzc,EAEVqnB,GAAepoB,GAAG6f,EAAKjZ,OAASwhB,GAAenoB,GAAG4f,EAAKjZ,SAC7D,IAqNiBmrB,CAA0B,CAC5C1B,kBACA1I,oBAAqB2I,EACrB5pB,OAAQsmB,EACR5L,aACA+C,aAEF,IAAKzH,EACH,OAAO,KAET,MAAM0I,EAAoBxD,GAA6BlF,EAAY6E,WAAW1e,GAAI4e,GAC5E4E,EApNkBgM,GACxB1K,sBACAxD,WACAzH,cACA0I,oBACAU,oBAEA,MAAM4E,EAAStF,EAAkBrT,OAAO8P,GAAa6C,GAAiB,CACpEpP,OAAQiT,GAAwB1G,EAAWiE,GAC3CpJ,cACAyH,SAAUA,EAAS/E,MACnBgF,2BAA2B,KACzBrkB,KAAK,CAACC,EAAGC,KACX,MAAMqyB,EAAc1T,GAAS+I,EAAqBvD,GAA0B1H,EAAa4L,GAA8BtoB,EAAG8lB,KACpHyM,EAAc3T,GAAS+I,EAAqBvD,GAA0B1H,EAAa4L,GAA8BroB,EAAG6lB,KAC1H,OAAIwM,EAAcC,GACR,EAENA,EAAcD,EACT,EAEFtyB,EAAEuhB,WAAW/E,MAAQvc,EAAEshB,WAAW/E,QAE3C,OAAOkO,EAAO,IAAM,MA6LG2H,CAAoB,CACzC1K,oBAAqB2I,EACrBnM,WACAzH,cACA0I,oBACAU,kBAEI/D,EA9FiByQ,GACvBlC,8BACAjK,iBACAjB,oBACAvD,YACAJ,aACA/E,cACAyH,WACA2B,oBAEA,IAAKO,EAAgB,CACnB,GAAIjB,EAAkBljB,OACpB,OAAO,KAET,MAAMuwB,EAAW,CACf5P,UAAWL,GACXM,YAAaP,GACbP,GAAI,CACFpU,KAAM,UACN8O,YAAa,CACXE,YAAaF,EAAY6E,WAAW1e,GACpC2Z,MAAO,KAIPkW,EAA8BlM,GAAiC,CACnEzE,OAAQ0Q,EACR5Q,YACAtB,UAAW7D,EACX+E,aACAqE,kBAEIlG,EAAkB0C,GAAST,EAAWnF,GAAeA,EAAcgM,GAAehM,EAAamF,EAAWJ,GAShH,OAR+BsG,GAA8B,CAC3DlG,YACAnF,YAAakD,EACboI,uBAAwB0K,EACxBvO,SAAUA,EAAS/E,MACnBgF,2BAA2B,EAC3B6D,gBAAgB,IAEcwK,EAAW,IAC7C,CACA,MAAME,EAAsBzsB,QAAQoqB,EAA4B5T,EAAYmD,KAAK7Y,OAASqf,EAAe1G,KAAK/J,UAAUR,OAAOsH,EAAYmD,KAAK7Y,OAC1I+pB,EAAgB,MACpB,MAAM6B,EAAavM,EAAe9E,WAAW/E,MAC7C,OAAI6J,EAAe9E,WAAW1e,KAAOgf,EAAUN,WAAW1e,IAGtD8vB,EAFKC,EAKFA,EAAa,CACrB,EATqB,GAUhB9P,EAAc0F,GAAe9L,EAAYmD,KAAMgC,EAAUuF,YAC/D,OAAO3B,GAAuB,CAC5B5D,YACAuD,oBACA1I,cACAyH,WACArB,cACAgC,KAAMtC,GACNhG,MAAOuU,KAgCMyB,CAAmB,CAChClC,8BACA5T,cACAmF,YACAJ,aACA4E,iBACAjB,oBACAjB,WACA2B,kBAEF,IAAK/D,EACH,OAAO,KAET,MAAM4F,EAAsBnB,GAAiC,CAC3DzE,SACAF,YACAtB,UAAW7D,EACX+E,aACAqE,kBAOF,MAAO,CACLgG,gBANsBpE,GAAiC,CACvDC,sBACA9F,YACAsC,aAIApC,SACAqK,kBAAmB,OAiDhB0F,CAAc,CACjBzB,kBACAC,8BACAzO,YACAmL,SACAvL,aACAL,aACA+C,SAAUsF,EAAMtF,SAChB2B,cAAe2D,EAAM3D,iBAg3BNkK,CAAgB,CAC7BvG,QACA7b,KAAM0gB,EAAO1gB,OAEf,OAAKwB,EAGEgO,GAAO,CACZqM,QACA1H,OAAQ3S,EAAO2S,OACf+J,gBAAiB1c,EAAO0c,gBACxBM,kBAAmBhd,EAAOgd,oBANnB3C,CAQX,CACA,GAAoB,iBAAhB6E,EAAO1gB,KAAyB,CAClC,MAAM0P,EAASgR,EAAOC,QAAQjR,OAQ9B,MAPkB,eAAhBmM,EAAMC,QAAmD,eAz7E/D,0BAy7EkD1V,SAA4B5N,GAAU,EAAO,uEAAyEA,MACnJ,IACZqjB,EACHC,MAAO,eACPqG,WAAW,EACXzS,SAGJ,CACA,GAAoB,iBAAhBgR,EAAO1gB,KAAyB,CAClC,MAAMugB,UACJA,EAAS0E,aACTA,EAAYC,oBACZA,GACExE,EAAOC,QASX,MARkB,aAAhB9E,EAAMC,OAAwC,iBAAhBD,EAAMC,QAAqD,eAx8E/F,0BAw8EkF1V,SAA4B5N,GAAU,EAAO,kCAAkCqjB,EAAMC,SAAWtjB,MAC/J,CACbsjB,MAAO,iBACPyE,YACA0E,eACAC,sBACA9G,WAAYvC,EAAMuC,WAGtB,CACA,GAAoB,kBAAhBsC,EAAO1gB,KAA0B,CACnC,MAAMugB,UACJA,GACEG,EAAOC,QACX,MAAO,CACL7E,MAAO,OACPyE,YACAC,aAAa,EAEjB,CACA,OAAO3E,GAGT,SAASsJ,GAAMzE,EAAQ0E,GACrB,OAAO1E,aAAkBnlB,QAAU,SAAUmlB,GAAUA,EAAO1gB,OAASolB,CACzE,CACA,MAYMC,GAAuB/kB,IAAS,CACpCN,KAAM,yBACN2gB,QAASrgB,IAELglB,GAAqBA,KAAO,CAChCtlB,KAAM,sBACN2gB,QAAS,OAEL4E,GAAwBjlB,IAAS,CACrCN,KAAM,0BACN2gB,QAASrgB,IAELklB,GAA2BllB,IAAS,CACxCN,KAAM,8BACN2gB,QAASrgB,IAELmlB,GAAkCnlB,IAAS,CAC/CN,KAAM,sCACN2gB,QAASrgB,IAELolB,GAAOplB,IAAS,CACpBN,KAAM,OACN2gB,QAASrgB,IAULqlB,GAASA,KAAO,CACpB3lB,KAAM,UACN2gB,QAAS,OAELiF,GAAWA,KAAO,CACtB5lB,KAAM,YACN2gB,QAAS,OAELkF,GAAYA,KAAO,CACvB7lB,KAAM,aACN2gB,QAAS,OAELmF,GAAWA,KAAO,CACtB9lB,KAAM,YACN2gB,QAAS,OAULoF,GAAezlB,IAAS,CAC5BN,KAAM,gBACN2gB,QAASrgB,IAEL0lB,GAAO1lB,IAAS,CACpBN,KAAM,OACN2gB,QAASrgB,IA0GL2lB,GAEE,0BAWFC,GAAU,CACdC,YAAa,GACbC,YAAa,IACbC,YAAa,KAETC,GAAoB,GAAGJ,GAAQC,0CAC/BI,GAAc,CAClBC,MAAO,WAAWF,KAClBG,KAAM,aAAaH,eAA8BA,KACjDN,KAAMU,IACJ,MAAMC,EAAS,GAAGD,MAAaT,KAC/B,MAAO,aAAaU,cAAmBA,KAEzCR,YAAa,aAAaG,KAC1BxE,YAAa,UAAUwE,aAA4BA,cAA6BA,MAE5EM,GAAS7d,GAAU4H,GAAU5H,EAAQyH,SAAUxY,EAAY,aAAa+Q,EAAO3E,QAAQ2E,EAAOlE,OAC9FgiB,GACJD,IAaIR,YACJA,GAAWC,YACXA,IACEH,GACEY,GAAgBT,GAAcD,GAoF9BW,GAAiBA,EACrBC,WACAC,cACI1tB,GAAQmnB,IACZ,IAAKyE,GAAMzE,EAAQ,QAEjB,YADAnnB,EAAKmnB,GAGP,MAAM7E,EAAQmL,IACRtX,EAASgR,EAAOC,QAAQjR,OAC9B,GAAoB,eAAhBmM,EAAMC,MAIR,YAHAmL,GAvPgB3mB,EAuPK,CACnBoP,UAxPuB,CAC3B1P,KAAM,eACN2gB,QAASrgB,KAFSA,MA4PlB,GAAoB,SAAhBub,EAAMC,MACR,OAEuC,iBAAhBD,EAAMC,OAA4BD,EAAMsG,YACnB,eA9yFhD,0BA8yFmC/b,SAA4B5N,GAAU,EAAO,+DAAiEA,MAC7H,aAAhBqjB,EAAMC,OAAwC,iBAAhBD,EAAMC,QAAqD,eA/yF7F,0BA+yFgF1V,SAA4B5N,GAAU,EAAO,yBAAyBqjB,EAAMC,SAAWtjB,MACrK,MAAMmmB,EAAW9C,EAAM8C,SACjBP,EAAavC,EAAMuC,WACnBnK,EAAYmK,EAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,KAC3Dkf,OACJA,EAAM+S,uBACNA,GAhEgBC,GAClBtT,aACAnE,SACA0X,aACAvH,OACAtJ,WACAwK,kBAEKqG,EAAWhT,IAAiB,SAAX1E,EAaK,YAAvB0X,EAAWhT,GAAGpU,KACT,CACLmU,OAAQiT,EACRF,wBAAwB,GAOrB,CACL/S,OALsB,IACnBiT,EACHnS,UAAWL,IAIXsS,wBAAwB,GAjBjB,CACL/S,OAR2BmL,GAAU,CACrCzL,aACAM,OAAQ4M,EACRjS,YAAa+Q,EACbtJ,WACAU,oBAAoB,IAIpBiQ,wBAAwB,GA+CxBC,CAAc,CAChBzX,SACA0X,WAAYvL,EAAM1H,OAClB+D,cAAe2D,EAAM3D,cACrB6I,aAAclF,EAAMkF,aACpBlB,KAAMhE,EAAMuC,WAAW5K,WAAWqI,EAAM8C,SAAShM,UAAU1d,IAC3DshB,SAAUsF,EAAMtF,SAChB1C,WAAYgI,EAAMuC,WAAWvK,aAEzB/E,EAAcoY,EAAyBhT,GAAkBC,GAAU,KACnE/E,EAAU8X,EAAyB7S,GAAcF,GAAU,KAK3D3S,EAAS,CACb6N,YAAa4E,EAAUN,WAAW1e,GAClC+K,KAAMiU,EAAUN,WAAW3T,KAC3BlH,OAPa,CACb8V,MAAO+P,EAAS1K,UAAUrF,MAC1BI,YAAa2P,EAAShM,UAAU1d,IAMhCya,SACAwL,KAAMW,EAAM6D,aACZ5Q,cACAM,WAEI8V,EAnHqBmC,GAC3BlT,SACAF,YACAmK,aACA7H,WACA2B,oBAEA,MAAMrE,WACJA,EAAUL,WACVA,GACE4K,EACEpP,EAAc2M,GAAkBxH,GAGhCmT,EAAkB9H,GAAyB,CAC/CrL,SACAF,YACAJ,aACAqE,gBACAvF,WAPkB3D,EAAcwE,EAAWxE,GAAe,OAC/CwE,EAAWS,EAAUN,WAAW3E,aAO3CuH,aAGF,OADerhB,GAASoyB,EAAiBrT,EAAUiG,OAAOlS,UAAUR,SA6FxC6f,CAAuB,CACjDlT,SACAF,YACAmK,aACA7H,SAAUsF,EAAMtF,SAChB2B,cAAe2D,EAAM3D,gBAEjBqI,EAAY,CAChB5B,SAAU9C,EAAM8C,SAChBzG,cAAe2D,EAAM3D,cACrB1W,SACA2S,UAGF,GAD6BxD,GAAUkL,EAAMpW,QAAQyU,OAAOnR,OAAQmc,KAAwB5sB,QAAQkJ,EAAO4N,SAKzG,YAHA6X,EAASlB,GAAa,CACpBxF,eAIJ,MAAM0E,EAzJcsC,GACpB9hB,UACAqJ,cACAY,aAEA,MAAM8X,EAAaxW,GAASvL,EAASqJ,GACrC,GAAI0Y,GAAc,EAChB,OAAOpB,GAET,GAAIoB,GAXwB,KAY1B,OAAOnB,GAET,MACMK,EAAWN,GAAcU,IADZU,EAdS,MAiB5B,OAAO3e,QADyB,WAAX6G,EAfI,GAekBgX,EAAgCA,GAChDe,QAAQ,KA0IdF,CAAgB,CACnC9hB,QAASoW,EAAMpW,QAAQyU,OAAOnR,OAC9B+F,YAAaoW,EACbxV,WAOFuX,EA1UkB3mB,KAAS,CAC3BN,KAAM,eACN2gB,QAASrgB,IAwUAonB,CALI,CACXxC,sBACAD,eACA1E,gBAKJ,IAAIoH,GAAkBA,KAAO,CAC3BvjB,EAAGkF,OAAOC,YACV1E,EAAGyE,OAAOE,cA+CZ,MACMoe,GAAiBC,IACrB,MAAMC,EA/BR,UAA2BC,eACzBA,IAKA,MAAMC,EAAYC,GAHlB,WACEF,EAAeJ,KACjB,GAEM/a,EAtBR,SAAgC4C,GAC9B,MAAO,CACLtC,UAAW,SACXL,QAAS,CACPqb,SAAS,EACTC,SAAS,GAEXhwB,GAAI0V,IACEA,EAAMnG,SAAW4B,QAAUuE,EAAMnG,SAAW4B,OAAO8e,UAGvD5Y,KAGN,CAQkB6Y,CAAuBL,GACvC,IAAI3a,EAASd,GACb,SAAS+b,IACP,OAAOjb,IAAWd,EACpB,CAWA,MAAO,CACLvT,MAXF,WACIsvB,MAAsC,eAh5F5C,0BAg5F+BliB,SAA4B5N,GAAU,EAAO,oDAAsDA,MAC9H6U,EAASb,GAAWlD,OAAQ,CAACsD,GAC/B,EASE2b,KARF,WACGD,MAAsC,eAp5F3C,0BAo5F8BliB,SAA4B5N,GAAU,EAAO,+CAAiDA,MACxHwvB,EAAU7c,SACVkC,IACAA,EAASd,EACX,EAIE+b,WAEJ,CAImBE,CAAkB,CACjCT,eAAgBnV,IACdiV,EAAMZ,SA9ZwB,CAClCjnB,KAAM,wBACN2gB,QA4ZsC,CAChC/N,kBAIN,OAAOrZ,GAAQmnB,KACRoH,EAASQ,YAAcnD,GAAMzE,EAAQ,oBACxCoH,EAAS9uB,QAEP8uB,EAASQ,YAbI5H,IAAUyE,GAAMzE,EAAQ,kBAAoByE,GAAMzE,EAAQ,iBAAmByE,GAAMzE,EAAQ,SAajF+H,CAAa/H,IACtCoH,EAASS,OAEXhvB,EAAKmnB,KA0FHgI,GAAcA,CAAC/wB,EAAKQ,KAExBA,KAGIwwB,GAAeA,CAAChK,EAAUzD,KAAU,CACxC7L,YAAasP,EAAS1K,UAAUhf,GAChC+K,KAAM2e,EAAShM,UAAU3S,KACzBlH,OAAQ,CACNkW,YAAa2P,EAAShM,UAAU1d,GAChC2Z,MAAO+P,EAAS1K,UAAUrF,OAE5BsM,SAEF,SAAS0N,GAAQC,EAAWtzB,EAAMuzB,EAAUC,GAC1C,IAAKF,EAEH,YADAC,EAASC,EAAkBxzB,IAG7B,MAAMyzB,EAzGkBF,KACxB,IAAIG,GAAY,EACZC,GAAY,EAChB,MAAMC,EAAYC,WAAW,KAC3BF,GAAY,IAER1nB,EAASuF,IACTkiB,EACuB,eA57F/B,0BA47FkB7iB,UAA4BiG,GAAQ,+DAG9C6c,EACuB,eAh8F/B,0BAg8FkB9iB,UAA4BiG,GAAQ,wHAMlD4c,GAAY,EACZH,EAAS/hB,GACTsiB,aAAaF,KAGf,OADA3nB,EAAOynB,UAAY,IAAMA,EAClBznB,GAkFY8nB,CAAoBR,GAIvCD,EAAUtzB,EAHO,CACfuzB,SAAUE,IAGPA,EAAWC,aACdH,EAASC,EAAkBxzB,GAE/B,CAoIA,MAAMg0B,GAAgC1B,GAAStuB,GAAQmnB,IACrD,IAAKyE,GAAMzE,EAAQ,2BAEjB,YADAnnB,EAAKmnB,GAGP,MAAM7E,EAAQgM,EAAMb,WACF,mBAAhBnL,EAAMC,QAAuD,eA/qGjE,0BA+qGoD1V,SAA4B5N,GAAU,EAAO,4DAA8DA,MAC7JqvB,EAAMZ,SAASlB,GAAa,CAC1BxF,UAAW1E,EAAM0E,cAIfiJ,GAAuC3B,IAC3C,IAAIxa,EAAS,KACTxC,EAAU,KAWd,OAAOtR,GAAQmnB,IAKb,IAJIyE,GAAMzE,EAAQ,UAAYyE,GAAMzE,EAAQ,kBAAoByE,GAAMzE,EAAQ,8BAV1E7V,IACFO,qBAAqBP,GACrBA,EAAU,MAERwC,IACFA,IACAA,EAAS,OAOX9T,EAAKmnB,IACAyE,GAAMzE,EAAQ,gBACjB,OAEF,MAAM9T,EAAU,CACdM,UAAW,SACXL,QAAS,CACPsb,SAAS,EACTD,SAAS,EACTuB,MAAM,GAERtxB,GAAI,WAEkB,mBADN0vB,EAAMb,WACVlL,OACR+L,EAAMZ,SAlqBqB,CACnCjnB,KAAM,0BACN2gB,QAAS,MAkqBL,GAEF9V,EAAUI,sBAAsB,KAC9BJ,EAAU,KACVwC,EAASb,GAAWlD,OAAQ,CAACsD,QA4D7B8c,GAAc7B,GAAStuB,GAAQmnB,IAEnC,GADAnnB,EAAKmnB,IACAyE,GAAMzE,EAAQ,0BACjB,OAEF,MAAMiJ,EAAkB9B,EAAMb,WACA,iBAA1B2C,EAAgB7N,QAGhB6N,EAAgBxH,WAGpB0F,EAAMZ,SAASjB,GAAK,CAClBtW,OAAQia,EAAgBja,YAItBka,GAA4C,eAvyGlD,0BAuyGqCxjB,UAA+C,oBAAXkD,QAA0BA,OAAOugB,qCAAuCvgB,OAAOugB,qCAAqC,CAC3Lp3B,KAAM,sBACHq3B,GACL,IAqFIC,GAAeA,EACjBC,eACAC,cACA1iB,SACAD,YAEA,MAAMmU,EAAYvmB,GAAS,CACzBkP,EAAG6lB,EACHplB,EAAGmlB,GACF,CACD5lB,EAAGkD,EACHzC,EAAG0C,IAML,MAJ0B,CACxBnD,EAAGtJ,KAAK8W,IAAI,EAAG6J,EAAUrX,GACzBS,EAAG/J,KAAK8W,IAAI,EAAG6J,EAAU5W,KAKzBqlB,GAAqBA,KACvB,MAAMC,EAAM/B,SAASgC,gBAErB,OADCD,IAA+B,eAr5GlC,0BAq5GqB/jB,SAA4B5N,GAAU,EAAO,wCAA0CA,MACnG2xB,GAGLE,GAAqBA,KACvB,MAAMF,EAAMD,KAOZ,OANkBH,GAAa,CAC7BC,aAAcG,EAAIH,aAClBC,YAAaE,EAAIF,YACjB3iB,MAAO6iB,EAAIG,YACX/iB,OAAQ4iB,EAAII,gBA4DhB,SAASC,GAAoBC,EAAUC,EAAUC,GAC/C,OAAIA,EAAMhX,WAAW1e,KAAOy1B,EAASz1B,IAGjC01B,EAAMhX,WAAW3T,OAAS0qB,EAAS1qB,OAIV,YADhByqB,EAAS9X,UAAUiY,QAAQD,EAAMhX,WAAW3E,aAChD2E,WAAWuH,OACO,eAp+G7B,0BAo+GgB9U,UAA4BiG,GAAQ,gEACSse,EAAMhX,WAAW1e,oLAKnE,GAGX,CACA,IAmGI41B,GAAeA,CAAChP,EAAO5mB,IACL,SAAhB4mB,EAAMC,OAGU,mBAAhBD,EAAMC,OAGND,EAAM0E,UAAU/e,OAAO6N,cAAgBpa,GAGF,SAAlC4mB,EAAM0E,UAAU/e,OAAOkO,OAG5Bob,GAAe7hB,IACjBK,OAAOyhB,SAAS9hB,EAAO7E,EAAG6E,EAAOpE,IAGnC,MAAMmmB,GAA0BhY,GAAWQ,GAAcM,GAAgBN,GAAYrP,OAAOwO,KACrFA,EAAU6J,aAGV7J,EAAUnB,QA4BXyZ,GAA6B,CACjCC,oBAAqB,IACrBC,sBAAuB,IACvBC,eAAgB,GAChBC,KAAMC,GAAcA,GAAc,EAClCC,kBAAmB,CACjBC,gBAAiB,KACjBC,aAAc,KAEhBC,UAAU,GAGZ,IAWIC,GAAgBA,EAClBC,eACAC,aACApmB,cAEA,MAAMqmB,EAAQD,EAAaD,EAC3B,OAAc,IAAVE,GACuB,eAhqH7B,0BAgqHgB1lB,UAA4BiG,GAAQ,2KAKzC,IAEc5G,EAAUmmB,GACGE,GAkDlCC,GAAWA,EACbC,iBACAC,aACAC,gBACAC,yBACAC,6BAEA,MAAM/iB,EAnDmBgjB,EAACL,EAAgBC,EAAYG,EAAyBA,IAAMnB,MACrF,MAAMqB,EAAsBF,IAC5B,GAAIJ,EAAiBC,EAAWM,mBAC9B,OAAO,EAET,GAAIP,GAAkBC,EAAWO,iBAC/B,OAAOF,EAAoBlB,eAE7B,GAAIY,IAAmBC,EAAWM,mBAChC,OAXY,EAad,MAAME,EAAiCd,GAAc,CACnDC,aAAcK,EAAWO,iBACzBX,WAAYI,EAAWM,mBACvB9mB,QAASumB,IAGL3iB,EAASijB,EAAoBlB,eAAiBkB,EAAoBjB,KAD/B,EAAIoB,GAE7C,OAAO3xB,KAAK4xB,KAAKrjB,IAiCFgjB,CAAqBL,EAAgBC,EAAYG,GAChE,OAAe,IAAX/iB,EACK,EAEJ8iB,EAGErxB,KAAK8W,IArCU+a,EAACC,EAAgBV,EAAeE,KACtD,MAAME,EAAsBF,IACtBX,EAAea,EAAoBf,kBAAkBE,aACrDoB,EAASP,EAAoBf,kBAAkBC,gBAC/CI,EAAeM,EACfL,EAAagB,EAEbC,EADMC,KAAKt5B,MACKm4B,EACtB,GAAIkB,GAAWD,EACb,OAAOD,EAET,GAAIE,EAAUrB,EACZ,OAnCY,EAqCd,MAAMuB,EAAyCrB,GAAc,CAC3DC,aAAcH,EACdI,aACApmB,QAASqnB,IAELzjB,EAASujB,EAAiBN,EAAoBjB,KAAK2B,GACzD,OAAOlyB,KAAK4xB,KAAKrjB,IAiBDsjB,CAAkBtjB,EAAQ6iB,EAAeE,GA5D3C,GA0DL/iB,GAKP4jB,GAAkBA,EACpBC,YACAC,kBACAjB,gBACAja,OACAka,yBACAC,6BAEA,MAAMH,EArGoBmB,EAACF,EAAWjb,EAAMma,EAAyBA,IAAMnB,MAC3E,MAAMqB,EAAsBF,IAO5B,MAJmB,CACjBG,mBAHyBW,EAAUjb,EAAK+D,MAAQsW,EAAoBpB,oBAIpEsB,iBAHuBU,EAAUjb,EAAK+D,MAAQsW,EAAoBnB,wBAkGjDiC,CAAsBF,EAAWjb,EAAMma,GAE1D,OADsBe,EAAgBlb,EAAKhZ,KAAOk0B,EAAgBlb,EAAKjZ,OAE9D+yB,GAAS,CACdC,eAAgBmB,EAAgBlb,EAAKhZ,KACrCgzB,aACAC,gBACAC,yBACAC,4BAGI,EAAIL,GAAS,CACnBC,eAAgBmB,EAAgBlb,EAAKjZ,OACrCizB,aACAC,gBACAC,yBACAC,4BAuBJ,MAAMiB,GAAQniB,GAAMhV,GAAmB,IAAVA,EAAc,EAAIA,GAC/C,IAAIo3B,GAAcA,EAChBpB,gBACAgB,YACAvb,UACAnK,SACA2kB,yBACAC,6BAEA,MAAMe,EAAkB,CACtBjmB,IAAKM,EAAO3C,EAAIqoB,EAAUhmB,IAC1BC,MAAO+lB,EAAU/lB,MAAQK,EAAOpD,EAChCgD,OAAQ8lB,EAAU9lB,OAASI,EAAO3C,EAClCwC,KAAMG,EAAOpD,EAAI8oB,EAAU7lB,MAEvBxC,EAAIooB,GAAgB,CACxBC,YACAC,kBACAjB,gBACAja,KAAM6D,GACNqW,yBACAC,2BAEIhoB,EAAI6oB,GAAgB,CACxBC,YACAC,kBACAjB,gBACAja,KAAMmE,GACN+V,yBACAC,2BAEImB,EAAWF,GAAM,CACrBjpB,IACAS,MAEF,GAAI8L,GAAU4c,EAAU/c,IACtB,OAAO,KAET,MAAMgd,EAzDkBC,GACxBP,YACAvb,UACAib,qBAEA,MAAMc,EAAqB/b,EAAQpK,OAAS2lB,EAAU3lB,OAChDomB,EAAuBhc,EAAQrK,MAAQ4lB,EAAU5lB,MACvD,OAAKqmB,GAAyBD,EAG1BC,GAAwBD,EACnB,KAEF,CACLtpB,EAAGupB,EAAuB,EAAIf,EAAexoB,EAC7CS,EAAG6oB,EAAqB,EAAId,EAAe/nB,GAPpC+nB,GAiDOa,CAAoB,CAClCP,YACAvb,UACAib,eAAgBW,IAElB,OAAKC,EAGE7c,GAAU6c,EAAShd,IAAU,KAAOgd,EAFlC,MAKX,MAAMI,GAAiB1iB,GAAMhV,GACb,IAAVA,EACK,EAEFA,EAAQ,EAAI,GAAK,GAEpB23B,GAAa,MACjB,MAAMC,EAAeA,CAACpmB,EAAQkK,IACxBlK,EAAS,EACJA,EAELA,EAASkK,EACJlK,EAASkK,EAEX,EAET,MAAO,EACLnM,UACAmM,MACA3I,aAEA,MAAM8kB,EAAe55B,GAAIsR,EAASwD,GAC5B+kB,EAAU,CACd5pB,EAAG0pB,EAAaC,EAAa3pB,EAAGwN,EAAIxN,GACpCS,EAAGipB,EAAaC,EAAalpB,EAAG+M,EAAI/M,IAEtC,OAAI8L,GAAUqd,EAASxd,IACd,KAEFwd,EAEV,EAzBkB,GA0BbC,GAAqBA,EACzBrc,IAAKsc,EACLzoB,UACAwD,aAEA,MAAM2I,EAAM,CACVxN,EAAGtJ,KAAK8W,IAAInM,EAAQrB,EAAG8pB,EAAO9pB,GAC9BS,EAAG/J,KAAK8W,IAAInM,EAAQZ,EAAGqpB,EAAOrpB,IAE1BspB,EAAiBP,GAAe3kB,GAChC+kB,EAAUH,GAAW,CACzBjc,MACAnM,UACAwD,OAAQklB,IAEV,OAAKH,GAGoB,IAArBG,EAAe/pB,GAAyB,IAAd4pB,EAAQ5pB,GAGb,IAArB+pB,EAAetpB,GAAyB,IAAdmpB,EAAQnpB,GAKlCupB,GAAkBA,CAAC7X,EAAUtN,IAAWglB,GAAmB,CAC/DxoB,QAAS8Q,EAASlN,OAAO5D,QACzBmM,IAAK2E,EAASlN,OAAOuI,IACrB3I,WAcIolB,GAAqBA,CAAC1b,EAAW1J,KACrC,MAAMuI,EAAQmB,EAAUnB,MACxB,QAAKA,GAGEyc,GAAmB,CACxBxoB,QAAS+L,EAAMnI,OAAO5D,QACtBmM,IAAKJ,EAAMnI,OAAOuI,IAClB3I,YAkBJ,IA0CII,GAASA,EACXwS,QACAqQ,gBACAC,yBACArB,eACApY,kBACA0Z,6BAEA,MAAM5kB,EAASqU,EAAMpW,QAAQsM,KAAK2M,gBAE5B/M,EADYkK,EAAMuC,WAAWvK,WAAWgI,EAAM8C,SAAS1K,UAAUhf,IAC7C8c,KAAKxJ,UAC/B,GAAIsT,EAAM+E,sBAAuB,CAC/B,MACM3X,EAvDkBqlB,GAC1B/X,WACA5E,UACAnK,SACA0kB,gBACAC,yBACAC,6BAEA,MAAM/iB,EAASikB,GAAY,CACzBpB,gBACAgB,UAAW3W,EAAS/E,MACpBG,UACAnK,SACA2kB,yBACAC,2BAEF,OAAO/iB,GAAU+kB,GAAgB7X,EAAUlN,GAAUA,EAAS,MAuC7CilB,CAAsB,CACnCpC,gBACA3V,SAHesF,EAAMtF,SAIrB5E,UACAnK,SACA2kB,yBACAC,2BAEF,GAAInjB,EAEF,YADA6hB,EAAa7hB,EAGjB,CACA,MAAM0J,EAlYyB4b,GAC/B/mB,SACAsH,cACA0E,iBAEA,GAAI1E,EAAa,CACf,MAAMwM,EAAY9H,EAAW1E,GAC7B,OAAKwM,EAAU9J,MAGR8J,EAFE,IAGX,CACA,MAAMA,EAnB2BkT,EAAC9mB,EAAQ8L,KAC1C,MAAMib,EAAQzD,GAAwBxX,GAAY9gB,KAAKigB,IACpDA,EAAUnB,QAAiC,eA7mHhD,0BA6mHmCpL,SAA4B5N,GAAU,EAAO,kBAAoBA,MACzFujB,GAAkBpJ,EAAUnB,MAAMK,cAAlCkK,CAAiDrU,MACpD,KACN,OAAO+mB,GAcWD,CAA2BhnB,EAAQgM,GACrD,OAAO8H,GAqXWiT,CAA2B,CAC3C/mB,SACAsH,YAAa6M,GAAkBE,EAAM1H,QACrCX,WAAYqI,EAAMuC,WAAW5K,aAE/B,IAAKb,EACH,OAEF,MAAM1J,EAzDuBylB,GAC7B/b,YACAhB,UACAnK,SACA0kB,gBACAC,yBACAC,6BAEA,MAAM5a,EAAQmB,EAAUnB,MACxB,IAAKA,EACH,OAAO,KAET,MAAMnI,EAASikB,GAAY,CACzBpB,gBACAgB,UAAW1b,EAAMK,cACjBF,UACAnK,SACA2kB,yBACAC,2BAEF,OAAO/iB,GAAUglB,GAAmB1b,EAAWtJ,GAAUA,EAAS,MAqCnDqlB,CAAyB,CACtCxC,gBACAvZ,YACAhB,UACAnK,SACA2kB,yBACAC,2BAEEnjB,GACFyJ,EAAgBC,EAAUgB,WAAW1e,GAAIgU,IAwK7C,MAAMzI,GAAS,WACTmuB,GAAa,MACjB,MAAMC,EAAO,GAAGpuB,iBAChB,MAAO,CACLouB,OACAvf,YAAa,GAAGuf,iBAChBC,UAAW,GAAGD,eAEjB,EAPkB,GAQb3a,GAAY,MAChB,MAAM2a,EAAO,GAAGpuB,eAChB,MAAO,CACLouB,OACAC,UAAW,GAAGD,eACd35B,GAAI,GAAG25B,OAEV,EAPiB,GAQZjc,GAAY,MAChB,MAAMic,EAAO,GAAGpuB,eAChB,MAAO,CACLouB,OACAC,UAAW,GAAGD,eACd35B,GAAI,GAAG25B,OAEV,EAPiB,GAQZE,GAAkB,CACtBD,UAAW,GAAGruB,kCAIVuuB,GAAYA,CAACC,EAAOC,IAAaD,EAAMv3B,IAAIy3B,IAC/C,MAAMh5B,EAAQg5B,EAAKxlB,OAAOulB,GAC1B,OAAK/4B,EAGE,GAAGg5B,EAAK5pB,cAAcpP,MAFpB,KAGRkF,KAAK,KAkEF+zB,GAA8C,oBAAX7lB,aAAqD,IAApBA,OAAO8e,eAAqE,IAAlC9e,OAAO8e,SAASpyB,cAAgCo5B,EAAAA,gBAAkBpqB,EAAAA,UAEhLqqB,GAAUA,KACd,MAAMC,EAAOlH,SAASmH,cAAc,QAEpC,OADCD,IAAgC,eAvxInC,0BAuxIsBlpB,SAA4B5N,GAAU,EAAO,6CAA+CA,MACzG82B,GAEHE,GAAgBC,IACpB,MAAMjlB,EAAK4d,SAASpyB,cAAc,SAKlC,OAJIy5B,GACFjlB,EAAGklB,aAAa,QAASD,GAE3BjlB,EAAGxK,KAAO,WACHwK,GA6DT,SAASmlB,GAAiBC,EAAYtqB,GACpC,OAAO5K,MAAMm1B,KAAKD,EAAWD,iBAAiBrqB,GAChD,CAEA,IAAIwqB,GAAkBtlB,GAChBA,GAAMA,EAAGulB,eAAiBvlB,EAAGulB,cAAcC,YACtCxlB,EAAGulB,cAAcC,YAEnB1mB,OAGT,SAAS2mB,GAAczlB,GACrB,OAAOA,aAAcslB,GAAgBtlB,GAAI0lB,WAC3C,CAEA,SAASC,GAAetB,EAAWxf,GACjC,MACM+gB,EAAWT,GAAiBvH,SADjB,IAAIuG,GAAWE,cAAcA,OAE9C,IAAKuB,EAAS97B,OAEZ,MADyB,eAh3I7B,0BAg3IgB8R,UAA4BiG,GAAQ,mDAAmDwiB,MAC5F,KAET,MAAMwB,EAASD,EAAS19B,KAAK8X,GACpBA,EAAG8lB,aAAa3B,GAAWtf,eAAiBA,GAErD,OAAKghB,EAIAJ,GAAcI,GAIZA,GAHoB,eA33I7B,0BA23IgBjqB,UAA4BiG,GAAQ,yCACzC,OALkB,eAv3I7B,0BAu3IgBjG,UAA4BiG,GAAQ,uCAAuCgD,gDAChF,KAOX,CA6EA,SAASkhB,KACP,MAAMC,EAAU,CACd3c,WAAY,CAAE,EACdL,WAAY,CAAC,GAETid,EAAc,GAWpB,SAASC,EAAO7iB,GACV4iB,EAAYn8B,QACdm8B,EAAYrjB,QAAQtJ,GAAMA,EAAG+J,GAEjC,CACA,SAAS8iB,EAAkB17B,GACzB,OAAOu7B,EAAQ3c,WAAW5e,IAAO,IACnC,CA+CA,SAAS27B,EAAkB37B,GACzB,OAAOu7B,EAAQhd,WAAWve,IAAO,IACnC,CA8BA,MAAO,CACLgf,UA1EmB,CACnB4c,SAAUlG,IACR6F,EAAQ3c,WAAW8W,EAAMhX,WAAW1e,IAAM01B,EAC1C+F,EAAO,CACL1wB,KAAM,WACN9J,MAAOy0B,KAGXnb,OAAQA,CAACmb,EAAOzT,KACd,MAAMzR,EAAU+qB,EAAQ3c,WAAWqD,EAAKvD,WAAW1e,IAC9CwQ,GAGDA,EAAQqrB,WAAanG,EAAMmG,kBAGxBN,EAAQ3c,WAAWqD,EAAKvD,WAAW1e,IAC1Cu7B,EAAQ3c,WAAW8W,EAAMhX,WAAW1e,IAAM01B,IAE5CoG,WAAYpG,IACV,MAAMtb,EAAcsb,EAAMhX,WAAW1e,GAC/BwQ,EAAUkrB,EAAkBthB,GAC7B5J,GAGDklB,EAAMmG,WAAarrB,EAAQqrB,kBAGxBN,EAAQ3c,WAAWxE,GACtBmhB,EAAQhd,WAAWmX,EAAMhX,WAAW3E,cACtC0hB,EAAO,CACL1wB,KAAM,UACN9J,MAAOy0B,MAIbC,QAzCF,SAA0B31B,GACxB,MAAM01B,EAAQgG,EAAkB17B,GAEhC,OADC01B,IAAiC,eAt+ItC,0BAs+IyBvkB,SAA4B5N,GAAU,EAAO,wCAAwCvD,MAASuD,MAC5GmyB,CACT,EAsCEqG,SAAUL,EACVM,OAAQh8B,GAAMqD,QAAQq4B,EAAkB17B,IACxCi8B,aAAclxB,GAAQzE,OAAOnE,OAAOo5B,EAAQ3c,YAAY1P,OAAOwmB,GAASA,EAAMhX,WAAW3T,OAASA,IAoClG2S,UA1BmB,CACnBke,SAAUlG,IACR6F,EAAQhd,WAAWmX,EAAMhX,WAAW1e,IAAM01B,GAE5CoG,WAAYpG,IACV,MAAMllB,EAAUmrB,EAAkBjG,EAAMhX,WAAW1e,IAC9CwQ,GAGDklB,EAAMmG,WAAarrB,EAAQqrB,iBAGxBN,EAAQhd,WAAWmX,EAAMhX,WAAW1e,KAE7C21B,QAnBF,SAA0B31B,GACxB,MAAM01B,EAAQiG,EAAkB37B,GAEhC,OADC01B,IAAiC,eAvhJtC,0BAuhJyBvkB,SAA4B5N,GAAU,EAAO,wCAAwCvD,MAASuD,MAC5GmyB,CACT,EAgBEqG,SAAUJ,EACVK,OAAQh8B,GAAMqD,QAAQs4B,EAAkB37B,IACxCi8B,aAAclxB,GAAQzE,OAAOnE,OAAOo5B,EAAQhd,YAAYrP,OAAOwmB,GAASA,EAAMhX,WAAW3T,OAASA,IAUlGmF,UAnGF,SAAmBrB,GAEjB,OADA2sB,EAAYt1B,KAAK2I,GACV,WACL,MAAM8K,EAAQ6hB,EAAYt2B,QAAQ2J,IACnB,IAAX8K,GAGJ6hB,EAAYU,OAAOviB,EAAO,GAE9B,EA2FEye,MATF,WACEmD,EAAQ3c,WAAa,GACrB2c,EAAQhd,WAAa,GACrBid,EAAYn8B,OAAS,CACvB,EAOF,CAYA,IAAI88B,GAAer7B,EAAK,QAACs7B,cAAc,MAEnCC,GAAiBA,KACnB,MAAMC,EAAOnJ,SAASmJ,KAEtB,OADCA,IAAgC,eAxkJnC,0BAwkJsBnrB,SAA4B5N,GAAU,EAAO,6BAA+BA,MACzF+4B,GAGT,MAAMC,GAAiB,CACrB7iB,SAAU,WACVrH,MAAO,MACPC,OAAQ,MACRW,OAAQ,OACRE,OAAQ,IACRE,QAAS,IACTmpB,SAAU,SACVlgB,KAAM,gBACN,YAAa,eA+CTmgB,GAAW,CACfxtB,UAAW,MAEb,SAASytB,GAAYnxB,EAAQqM,EAAU6kB,IACrC,MAAMz8B,EAAKc,UAAM67B,QACjB,OAAO3sB,GAAQ,IAAM,GAAGzE,IAASqM,EAAQ3I,YAAYjP,IAAM,CAAC4X,EAAQ3I,UAAW1D,EAAQvL,GACzF,CAmCA,IAAI48B,GAAa97B,EAAK,QAACs7B,cAAc,MAKrC,MAAMS,GAAS,sBACTC,GAAa77B,IACjB,MAAMsL,EAASswB,GAAOE,KAAK97B,GAK3B,OAJY,MAAVsL,IAA2C,eArrJ/C,0BAqrJkC4E,SAA4B5N,GAAU,EAAO,iCAAiCtC,KAAWsC,MAIlH,CACLy5B,MAJYppB,OAAOrH,EAAO,IAK1B0wB,MAJYrpB,OAAOrH,EAAO,IAK1BsP,MAJYjI,OAAOrH,EAAO,IAK1BmH,IAAKzS,IAgCHi8B,GAAS,8MAiCf,SAASC,GAAOC,GACe,eA/vJ/B,0BA+vJkBjsB,UACdisB,GAEJ,CAEA,SAASC,GAAmBn6B,EAAI8X,GAC9BmiB,GAAO,KACLptB,EAAAA,UAAU,KACR,IACE7M,GACD,CAAC,MAAOsT,GACPa,GAAM,+DAGAb,EAAE1E,oBAEV,GACCkJ,IAEP,CASA,SAASsiB,GAAY9sB,GACnB,MAAM+sB,EAAMztB,SAAOU,GAInB,OAHAT,EAAAA,UAAU,KACRwtB,EAAI/sB,QAAUA,IAET+sB,CACT,CAqCA,SAASzkB,GAAW8N,GAClB,MAAoB,SAAhBA,EAAMC,OAAoC,mBAAhBD,EAAMC,OAG7BD,EAAM9N,UACf,CAEA,MAAM0kB,GAAM,EACNvzB,GAAQ,GAGRwzB,GAAS,GACTC,GAAW,GACX15B,GAAM,GACN4mB,GAAO,GAMP+S,GAAgB,CACpB1zB,CAACA,KAAQ,EACTuzB,CAACA,KAAM,GAET,IAAII,GAA2BhlB,IACzB+kB,GAAc/kB,EAAMilB,UACtBjlB,EAAMK,kBAIV,MAAM6kB,GAAqB,MACzB,MAAMnE,EAAO,mBACb,MAAwB,oBAAbxG,SACFwG,EAEU,CAACA,EAAM,KAAKA,IAAQ,SAASA,IAAQ,MAAMA,IAAQ,IAAIA,KAC7Cl8B,KAAKwa,GAAa,KAAKA,MAAekb,WAC/CwG,CACrB,EAR0B,GAerBoE,GAAS,CACbhzB,KAAM,QAiOR,SAASizB,KAAU,CACnB,MAAMC,GAAiB,CACrBP,CAACA,KAAW,EACZD,CAACA,KAAS,EACV7S,CAACA,KAAO,EACR5mB,CAACA,KAAM,GAgIHk6B,GAAO,CACXnzB,KAAM,QAuQFozB,GAAsB,CAAC,QAAS,SAAU,WAAY,SAAU,SAAU,WAAY,QAAS,SACrG,SAASC,GAAuBC,EAAQ7tB,GACtC,GAAe,MAAXA,EACF,OAAO,EAGT,GAD4B2tB,GAAoBG,SAAS9tB,EAAQ+tB,QAAQC,eAEvE,OAAO,EAET,MAAMC,EAAYjuB,EAAQ6qB,aAAa,mBACvC,MAAkB,SAAdoD,GAAsC,KAAdA,GAGxBjuB,IAAY6tB,GAGTD,GAAuBC,EAAQ7tB,EAAQkuB,cAChD,CACA,SAASC,GAA4B3f,EAAWpG,GAC9C,MAAMnG,EAASmG,EAAMnG,OACrB,QAAKuoB,GAAcvoB,IAGZ2rB,GAAuBpf,EAAWvM,EAC3C,CAEA,IAAImsB,GAA6BrpB,GAAMvD,GAAQuD,EAAGC,yBAAyBjD,OAM3E,MAAMssB,GAAuB,MAC3B,MAAMlF,EAAO,UACb,MAAwB,oBAAbxG,SACFwG,EAEU,CAACA,EAAM,oBAAqB,yBACtBl8B,KAAKD,GAAQA,KAAQshC,QAAQ37B,YACtCw2B,CACjB,EAR4B,GAS7B,SAASoF,GAAgBxpB,EAAIlF,GAC3B,OAAU,MAANkF,EACK,KAELA,EAAGspB,IAAsBxuB,GACpBkF,EAEFwpB,GAAgBxpB,EAAGmpB,cAAeruB,EAC3C,CACA,SAAS8T,GAAQ5O,EAAIlF,GACnB,OAAIkF,EAAG4O,QACE5O,EAAG4O,QAAQ9T,GAEb0uB,GAAgBxpB,EAAIlF,EAC7B,CA8CA,SAAS4I,GAAeL,GACtBA,EAAMK,gBACR,CACA,SAASoa,IAAS2L,SAChBA,EAAQnY,MACRA,EAAKoY,aACLA,EAAYC,WACZA,IAEA,OAAKD,IAcDD,IAAanY,IACXqY,GACuB,eAhmL/B,0BAgmLkB/tB,UAA4BiG,GAAQ,wHAI7B4nB,wDAC2BnY,kHAOzC,IA3BHqY,GACuB,eAllL/B,0BAklLkB/tB,UAA4BiG,GAAQ,kPAU3C,EAmBX,CACA,SAAS+nB,IAASC,QAChBA,EAAOxM,MACPA,EAAK4C,SACLA,EAAQpb,YACRA,IAEA,GAAIglB,EAAQC,YACV,OAAO,EAET,MAAM3J,EAAQF,EAASxW,UAAU+c,SAAS3hB,GAC1C,OAAKsb,IAIAA,EAAM9d,QAAQ2P,aAGdqO,GAAahD,EAAMb,WAAY3X,IANT,eA3nL7B,0BA2nLgBjJ,UAA4BiG,GAAQ,qCAAqCgD,MAC9E,EASX,CA4JA,MAAMklB,GAAiB,CAj0BvB,SAAwBC,GACtB,MAAMC,EAAW1vB,SAAOiuB,IAClB0B,EAAkB3vB,SAAOwH,IACzBooB,EAAsB1vB,GAAQ,KAAO,CACzCiI,UAAW,YACX/U,GAAI,SAAqB0V,GACvB,GAAIA,EAAM+mB,iBACR,OAEF,GA3HgB,IA2HZ/mB,EAAMgnB,OACR,OAEF,GAAIhnB,EAAMinB,SAAWjnB,EAAMknB,SAAWlnB,EAAMmnB,UAAYnnB,EAAMonB,OAC5D,OAEF,MAAM5lB,EAAcmlB,EAAIU,uBAAuBrnB,GAC/C,IAAKwB,EACH,OAEF,MAAM8lB,EAAUX,EAAIY,WAAW/lB,EAAakZ,EAAM,CAChD8M,YAAaxnB,IAEf,IAAKsnB,EACH,OAEFtnB,EAAMK,iBACN,MAAM2C,EAAQ,CACZzM,EAAGyJ,EAAMynB,QACTzwB,EAAGgJ,EAAM0nB,SAEXb,EAAgBjvB,UAChB+vB,EAAiBL,EAAStkB,EAC5B,IACE,CAAC2jB,IACCiB,EAA2BxwB,GAAQ,KAAO,CAC9CiI,UAAW,4BACX/U,GAAI0V,IACF,GAAIA,EAAM+mB,iBACR,OAEF,MAAM3/B,EAAKu/B,EAAIU,uBAAuBrnB,GACtC,IAAK5Y,EACH,OAEF,MAAM4X,EAAU2nB,EAAIkB,wBAAwBzgC,GACvC4X,IAGDA,EAAQ8oB,yBAGPnB,EAAIoB,WAAW3gC,IAGpB4Y,EAAMK,qBAEN,CAACsmB,IACCqB,EAAmBvlB,GAAY,WAKnCokB,EAAgBjvB,QAAU+G,GAAWlD,OAAQ,CAACmsB,EAA0Bd,GAJxD,CACdzM,SAAS,EACTC,SAAS,GAGb,EAAG,CAACsN,EAA0Bd,IACxBpM,EAAOjY,GAAY,KAEF,SADLmkB,EAAShvB,QACbzF,OAGZy0B,EAAShvB,QAAUutB,GACnB0B,EAAgBjvB,UAChBowB,MACC,CAACA,IACE1qB,EAASmF,GAAY,KACzB,MAAMwL,EAAQ2Y,EAAShvB,QACvB8iB,IACmB,aAAfzM,EAAM9b,MACR8b,EAAMqZ,QAAQhqB,OAAO,CACnB2qB,sBAAsB,IAGP,YAAfha,EAAM9b,MACR8b,EAAMqZ,QAAQY,SAEf,CAACxN,IACEyN,EAAsB1lB,GAAY,WACtC,MAIM7D,EApMV,UAA4BtB,OAC1BA,EAAMoV,UACNA,EAAS0V,SACTA,EAAQC,SACRA,IAEA,MAAO,CAAC,CACNhpB,UAAW,YACX/U,GAAI0V,IACF,MAAMgnB,OACJA,EAAMS,QACNA,EAAOC,QACPA,GACE1nB,EACJ,GAtBgB,IAsBZgnB,EACF,OAEF,MAAMhkB,EAAQ,CACZzM,EAAGkxB,EACHzwB,EAAG0wB,GAECzZ,EAAQma,IACd,GAAmB,aAAfna,EAAM9b,KAGR,OAFA6N,EAAMK,sBACN4N,EAAMqZ,QAAQzP,KAAK7U,GAKrB,GAFiB,YAAfiL,EAAM9b,OAA+C,eAj5J7D,0BAi5JgDoG,SAA4B5N,GAAU,EAAO,kBAAoBA,MAjCzEwQ,EAkClB8S,EAAMjL,MAlCsBpL,EAmCCoL,IAlC1C/V,KAAKq7B,IAAI1wB,EAAQrB,EAAI4E,EAAS5E,IAFV,GAEwCtJ,KAAKq7B,IAAI1wB,EAAQZ,EAAImE,EAASnE,IAFtE,GAqCrB,OApCR,IAAwCmE,EAAUvD,EAsC5CoI,EAAMK,iBACN,MAAMinB,EAAUrZ,EAAMqZ,QAAQiB,UAAUvlB,GACxCqlB,EAAS,CACPl2B,KAAM,WACNm1B,cAGH,CACDjoB,UAAW,UACX/U,GAAI0V,IACF,MAAMiO,EAAQma,IACK,aAAfna,EAAM9b,MAIV6N,EAAMK,iBACN4N,EAAMqZ,QAAQnP,KAAK,CACjB8P,sBAAsB,IAExBvV,KAPEpV,MASH,CACD+B,UAAW,YACX/U,GAAI0V,IACsB,aAApBooB,IAAWj2B,MACb6N,EAAMK,iBAER/C,MAED,CACD+B,UAAW,UACX/U,GAAI0V,IAEF,GAAmB,YADLooB,IACJj2B,KAIV,OA5GS,KA4GL6N,EAAMilB,SACRjlB,EAAMK,sBACN/C,UAGF0nB,GAAyBhlB,GARvB1C,MAUH,CACD+B,UAAW,SACX/U,GAAIgT,GACH,CACD+B,UAAW,SACXL,QAAS,CACPqb,SAAS,EACTC,SAAS,GAEXhwB,GAAIA,KACsB,YAApB89B,IAAWj2B,MACbmL,MAGH,CACD+B,UAAW,uBACX/U,GAAI0V,IACF,MAAMiO,EAAQma,IACG,SAAfna,EAAM9b,OAA4C,eAp9J1D,0BAo9J6CoG,SAA4B5N,GAAU,EAAO,oBAAsBA,MACtGsjB,EAAMqZ,QAAQQ,0BAChBxqB,IAGF0C,EAAMK,mBAEP,CACDhB,UAAW6lB,GACX56B,GAAIgT,GAER,CA2FqBkrB,CAAmB,CAClClrB,SACAoV,UAAWgI,EACX0N,SAAUA,IAAMxB,EAAShvB,QACzBywB,SAAUpa,IACR2Y,EAAShvB,QAAUqW,KAGvB4Y,EAAgBjvB,QAAU+G,GAAWlD,OAAQmD,EAZ7B,CACd0b,SAAS,EACTD,SAAS,GAWb,EAAG,CAAC/c,EAAQod,IACNiN,EAAmBllB,GAAY,SAA0B6kB,EAAStkB,GAC1C,SAA1B4jB,EAAShvB,QAAQzF,OAA4C,eArkKnE,0BAqkKsDoG,SAA4B5N,GAAU,EAAO,8CAAgDA,MAC/Ii8B,EAAShvB,QAAU,CACjBzF,KAAM,UACN6Q,QACAskB,WAEFa,GACF,EAAG,CAACA,IACJ7G,GAA0B,WAExB,OADA0G,IACO,WACLnB,EAAgBjvB,UAEpB,EAAG,CAACowB,GACN,EAmFA,SAA2BrB,GACzB,MAAME,EAAkB3vB,SAAOkuB,IACzB0B,EAAsB1vB,GAAQ,KAAO,CACzCiI,UAAW,UACX/U,GAAI,SAAmB0V,GACrB,GAAIA,EAAM+mB,iBACR,OAEF,GA9VQ,KA8VJ/mB,EAAMilB,QACR,OAEF,MAAMzjB,EAAcmlB,EAAIU,uBAAuBrnB,GAC/C,IAAKwB,EACH,OAEF,MAAMinB,EAAU9B,EAAIY,WAAW/lB,EAAakZ,EAAM,CAChD8M,YAAaxnB,IAEf,IAAKyoB,EACH,OAEFzoB,EAAMK,iBACN,IAAIqoB,GAAc,EAClB,MAAMpB,EAAUmB,EAAQE,WAExB,SAASjO,IACNgO,IAAuC,eAhsKhD,0BAgsKmCnwB,SAA4B5N,GAAU,EAAO,4DAA8DA,MACtI+9B,GAAc,EACd7B,EAAgBjvB,UAChBowB,GACF,CANAnB,EAAgBjvB,UAOhBivB,EAAgBjvB,QAAU+G,GAAWlD,OAzG3C,SAA6B6rB,EAAS5M,GACpC,SAASpd,IACPod,IACA4M,EAAQhqB,QACV,CAKA,MAAO,CAAC,CACN+B,UAAW,UACX/U,GAAI0V,GAxRO,KAyRLA,EAAMilB,SACRjlB,EAAMK,sBACN/C,KA1RM,KA6RJ0C,EAAMilB,SACRjlB,EAAMK,iBAZVqa,SACA4M,EAAQnP,QA3QM,KA0RRnY,EAAMilB,SACRjlB,EAAMK,sBACNinB,EAAQvP,YA9RA,KAiSN/X,EAAMilB,SACRjlB,EAAMK,sBACNinB,EAAQxP,UAlSG,KAqST9X,EAAMilB,SACRjlB,EAAMK,sBACNinB,EAAQtP,aAzSE,KA4SRhY,EAAMilB,SACRjlB,EAAMK,sBACNinB,EAAQrP,iBAGNoN,GAAerlB,EAAMilB,SACvBjlB,EAAMK,iBAGR2kB,GAAyBhlB,KAE1B,CACDX,UAAW,YACX/U,GAAIgT,GACH,CACD+B,UAAW,UACX/U,GAAIgT,GACH,CACD+B,UAAW,QACX/U,GAAIgT,GACH,CACD+B,UAAW,aACX/U,GAAIgT,GACH,CACD+B,UAAW,SACX/U,GAAIgT,GACH,CACD+B,UAAW,QACX/U,GAAIgT,EACJ0B,QAAS,CACPqb,SAAS,IAEV,CACDhb,UAAW6lB,GACX56B,GAAIgT,GAER,CAgCmDsrB,CAAoBtB,EAAS5M,GAAO,CAC/EJ,SAAS,EACTD,SAAS,GAEb,IACE,CAACsM,IACCqB,EAAmBvlB,GAAY,WAKnCokB,EAAgBjvB,QAAU+G,GAAWlD,OAAQ,CAACqrB,GAJ9B,CACdzM,SAAS,EACTC,SAAS,GAGb,EAAG,CAACwM,IACJxF,GAA0B,WAExB,OADA0G,IACO,WACLnB,EAAgBjvB,UAEpB,EAAG,CAACowB,GACN,EA8HA,SAAwBrB,GACtB,MAAMC,EAAW1vB,SAAOouB,IAClBuB,EAAkB3vB,SAAOwH,IACzB0pB,EAAW3lB,GAAY,WAC3B,OAAOmkB,EAAShvB,OACjB,EAAE,IACGywB,EAAW5lB,GAAY,SAAkBwL,GAC7C2Y,EAAShvB,QAAUqW,CACpB,EAAE,IACG6Y,EAAsB1vB,GAAQ,KAAO,CACzCiI,UAAW,aACX/U,GAAI,SAAsB0V,GACxB,GAAIA,EAAM+mB,iBACR,OAEF,MAAMvlB,EAAcmlB,EAAIU,uBAAuBrnB,GAC/C,IAAKwB,EACH,OAEF,MAAM8lB,EAAUX,EAAIY,WAAW/lB,EAAakZ,EAAM,CAChD8M,YAAaxnB,IAEf,IAAKsnB,EACH,OAEF,MAAMuB,EAAQ7oB,EAAM8oB,QAAQ,IACtBrB,QACJA,EAAOC,QACPA,GACEmB,EACE7lB,EAAQ,CACZzM,EAAGkxB,EACHzwB,EAAG0wB,GAELb,EAAgBjvB,UAChB+vB,EAAiBL,EAAStkB,EAC5B,IACE,CAAC2jB,IACCqB,EAAmBvlB,GAAY,WAKnCokB,EAAgBjvB,QAAU+G,GAAWlD,OAAQ,CAACqrB,GAJ9B,CACdxM,SAAS,EACTD,SAAS,GAGb,EAAG,CAACyM,IACEpM,EAAOjY,GAAY,KACvB,MAAM7K,EAAUgvB,EAAShvB,QACJ,SAAjBA,EAAQzF,OAGS,YAAjByF,EAAQzF,MACVqpB,aAAa5jB,EAAQmxB,kBAEvBV,EAAS/C,IACTuB,EAAgBjvB,UAChBowB,MACC,CAACA,EAAkBK,IAChB/qB,EAASmF,GAAY,KACzB,MAAMwL,EAAQ2Y,EAAShvB,QACvB8iB,IACmB,aAAfzM,EAAM9b,MACR8b,EAAMqZ,QAAQhqB,OAAO,CACnB2qB,sBAAsB,IAGP,YAAfha,EAAM9b,MACR8b,EAAMqZ,QAAQY,SAEf,CAACxN,IACEyN,EAAsB1lB,GAAY,WACtC,MAAMzD,EAAU,CACdsb,SAAS,EACTD,SAAS,GAEL5nB,EAAO,CACX6K,SACAoV,UAAWgI,EACX0N,YAEIY,EAAerqB,GAAWlD,OAtKpC,UAA2B6B,OACzBA,EAAMoV,UACNA,EAAS0V,SACTA,IAEA,MAAO,CAAC,CACN/oB,UAAW,YACXL,QAAS,CACPsb,SAAS,GAEXhwB,GAAI0V,IACF,MAAMiO,EAAQma,IACd,GAAmB,aAAfna,EAAM9b,KAER,YADAmL,IAGF2Q,EAAMgb,UAAW,EACjB,MAAMxB,QACJA,EAAOC,QACPA,GACE1nB,EAAM8oB,QAAQ,GACZ9lB,EAAQ,CACZzM,EAAGkxB,EACHzwB,EAAG0wB,GAEL1nB,EAAMK,iBACN4N,EAAMqZ,QAAQzP,KAAK7U,KAEpB,CACD3D,UAAW,WACX/U,GAAI0V,IACF,MAAMiO,EAAQma,IACK,aAAfna,EAAM9b,MAIV6N,EAAMK,iBACN4N,EAAMqZ,QAAQnP,KAAK,CACjB8P,sBAAsB,IAExBvV,KAPEpV,MASH,CACD+B,UAAW,cACX/U,GAAI0V,IACsB,aAApBooB,IAAWj2B,MAIf6N,EAAMK,iBACN/C,KAJEA,MAMH,CACD+B,UAAW,mBACX/U,GAAI0V,IACF,MAAMiO,EAAQma,IACG,SAAfna,EAAM9b,MAA2DxH,KACnE,MAAMk+B,EAAQ7oB,EAAM8oB,QAAQ,GAC5B,IAAKD,EACH,OAGF,KADqBA,EAAMK,OA9FL,KAgGpB,OAEF,MAAMC,EAAgBlb,EAAMqZ,QAAQQ,0BACpC,GAAmB,YAAf7Z,EAAM9b,KAMV,OAAIg3B,EACElb,EAAMgb,cACRjpB,EAAMK,sBAGR/C,SAGF0C,EAAMK,iBAbA8oB,GACF7rB,MAcL,CACD+B,UAAW6lB,GACX56B,GAAIgT,GAER,CAgF4C8rB,CAAkB32B,GAAOuM,GAC3DqqB,EAAe1qB,GAAWlD,OAvMpC,UAA2B6B,OACzBA,EAAM8qB,SACNA,IAEA,MAAO,CAAC,CACN/oB,UAAW,oBACX/U,GAAIgT,GACH,CACD+B,UAAW,SACX/U,GAAIgT,GACH,CACD+B,UAAW,cACX/U,GAAI0V,IACFA,EAAMK,mBAEP,CACDhB,UAAW,UACX/U,GAAI0V,IACsB,aAApBooB,IAAWj2B,MAlaN,KAsaL6N,EAAMilB,SACRjlB,EAAMK,iBAER/C,KANEA,MAQH,CACD+B,UAAW6lB,GACX56B,GAAIgT,GAER,CAwK4CgsB,CAAkB72B,GAAOuM,GACjE6nB,EAAgBjvB,QAAU,WACxBoxB,IACAK,IAEH,EAAE,CAAC/rB,EAAQ8qB,EAAU1N,IAChB6O,EAAgB9mB,GAAY,WAChC,MAAMwL,EAAQma,IACG,YAAfna,EAAM9b,OAA+C,eA96K3D,0BA86K8CoG,SAA4B5N,GAAU,EAAO,oCAAoCsjB,EAAM9b,QAAUxH,MAC3I,MAAM28B,EAAUrZ,EAAMqZ,QAAQiB,UAAUta,EAAMjL,OAC9CqlB,EAAS,CACPl2B,KAAM,WACNm1B,UACA2B,UAAU,GAEd,EAAG,CAACb,EAAUC,IACRV,EAAmBllB,GAAY,SAA0B6kB,EAAStkB,GAChD,SAApBolB,IAAWj2B,OAA4C,eAv7K7D,0BAu7KgDoG,SAA4B5N,GAAU,EAAO,8CAAgDA,MACzI,MAAMo+B,EAAmBxN,WAAWgO,EA3Nf,KA4NrBlB,EAAS,CACPl2B,KAAM,UACN6Q,QACAskB,UACAyB,qBAEFZ,GACD,EAAE,CAACA,EAAqBC,EAAUC,EAAUkB,IAC7CjI,GAA0B,WAExB,OADA0G,IACO,WACLnB,EAAgBjvB,UAChB,MAAMqW,EAAQma,IACK,YAAfna,EAAM9b,OACRqpB,aAAavN,EAAM8a,kBACnBV,EAAS/C,KAGd,EAAE,CAAC8C,EAAUJ,EAAkBK,IAChC/G,GAA0B,WASxB,OARe3iB,GAAWlD,OAAQ,CAAC,CACjC4D,UAAW,YACX/U,GAAIA,OACJ0U,QAAS,CACPsb,SAAS,EACTD,SAAS,KAId,EAAE,GACL,GA2UA,SAASmP,IAAiBxI,UACxBA,EAAShH,MACTA,EAAK4C,SACLA,EAAQ6M,cACRA,EAAaC,qBACbA,IAEA,MAAMC,EAAa,IAAKD,EAAuBhD,GAAiB,MAAS+C,GAAiB,IACpFjD,EAAU3+B,EAAAA,SAAS,IAvgC3B,WACE,IAAI+hC,EAAO,KAeX,SAASC,IACND,IAAgC,eApzJrC,0BAozJwBrxB,SAA4B5N,GAAU,EAAO,6CAA+CA,MAChHi/B,EAAO,IACT,CAOA,MAAO,CACLnD,UAzBF,WACE,OAAOh8B,QAAQm/B,EACjB,EAwBEnP,SAvBF,SAAkBpyB,GAChB,OAAOA,IAAUuhC,CACnB,EAsBEE,MArBF,SAAeC,GACXH,IAAgC,eA5yJtC,0BA4yJyBrxB,SAA4B5N,GAAU,EAAO,8CAAgDA,MAClH,MAAMq/B,EAAU,CACdD,WAGF,OADAH,EAAOI,EACAA,CACT,EAeEH,UACAI,WAXF,WACML,IACFA,EAAKG,UACLF,IAEJ,EAQF,CAs+BiCK,IAAU,GACnCC,EAAiB1nB,GAAY,SAAwBoD,EAAUjO,GAC/DsI,GAAW2F,KAAc3F,GAAWtI,IACtC4uB,EAAQyD,YAEZ,EAAG,CAACzD,IACJlF,GAA0B,WACxB,IAAIzb,EAAWmU,EAAMb,WAMrB,OALoBa,EAAM1iB,UAAU,KAClC,MAAMM,EAAUoiB,EAAMb,WACtBgR,EAAetkB,EAAUjO,GACzBiO,EAAWjO,GAGd,EAAE,CAAC4uB,EAASxM,EAAOmQ,IACpB7I,GAA0B,IACjBkF,EAAQyD,WACd,CAACzD,EAAQyD,aACZ,MAAMlC,EAAatlB,GAAYjB,GACtB+kB,GAAS,CACdC,UACA5J,WACA5C,QACAxY,gBAED,CAACglB,EAAS5J,EAAU5C,IACjBuN,EAAa9kB,GAAY,CAACjB,EAAa4oB,EAAWprB,IA9L1D,UAAkBwnB,QAChBA,EAAOxF,UACPA,EAAShH,MACTA,EAAK4C,SACLA,EAAQpb,YACRA,EAAW6oB,gBACXA,EAAe7C,YACfA,IAQA,IANoBjB,GAAS,CAC3BC,UACAxM,QACA4C,WACApb,gBAGA,OAAO,KAET,MAAMsb,EAAQF,EAASxW,UAAU2W,QAAQvb,GACnC7E,EAlGR,SAAuBqkB,EAAWxf,GAChC,MAEM8oB,EADWxI,GAAiBvH,SADjB,IAAInU,GAAU4a,cAAcA,OAEhBn8B,KAAK8X,GACzBA,EAAG8lB,aAAarc,GAAUhf,MAAQoa,GAE3C,OAAK8oB,EAGAlI,GAAckI,GAIZA,GAHoB,eAjkL7B,0BAikLgB/xB,UAA4BiG,GAAQ,0CACzC,MAJA,IAOX,CAoFa+rB,CAAcvJ,EAAWlE,EAAMhX,WAAW1e,IACrD,IAAKuV,EAEH,MADyB,eA3pL7B,0BA2pLgBpE,UAA4BiG,GAAQ,6CAA6CgD,KACtF,KAET,GAAIgmB,IAAgB1K,EAAM9d,QAAQwrB,4BAA8BzE,GAA4BppB,EAAI6qB,GAC9F,OAAO,KAET,MAAMoC,EAAOpD,EAAQsD,MAAMO,GAAmB3rB,IAC9C,IAAIuP,EAAQ,WACZ,SAASwc,IACP,OAAO3N,EAAM9d,QAAQ8oB,uBACvB,CACA,SAASzB,IACP,OAAOG,EAAQ/L,SAASmP,EAC1B,CAWA,MAAMc,EAVN,SAAqBtE,EAAUuE,GACzBlQ,GAAS,CACX2L,WACAnY,QACAoY,eACAC,YAAY,KAEZtM,EAAMZ,SAASuR,IAEnB,EAC4CjtB,KAAK,KAAM,YACvD,SAASktB,EAAKn4B,GACZ,SAASigB,IACP8T,EAAQqD,UACR5b,EAAQ,WACV,CAOA,SAAS4c,EAAOhpB,EAAQ7C,EAAU,CAChCipB,sBAAsB,IAGtB,GADAx1B,EAAKq4B,UACD9rB,EAAQipB,qBAAsB,CAChC,MAAMzoB,EAASb,GAAWlD,OAAQ,CAAC,CACjC4D,UAAW,QACX/U,GAAI+V,GACJrB,QAAS,CACP4c,MAAM,EACNvB,SAAS,EACTC,SAAS,MAGbiB,WAAW/b,EACb,CACAkT,IACAsH,EAAMZ,SAASjB,GAAK,CAClBtW,WAEJ,CACA,MA3Bc,aAAVoM,IACFyE,IACyB,eA3rL/B,0BA2rLkBna,SAA4B5N,GAAU,EAAO,wBAAwBsjB,KAAWtjB,MAE9FqvB,EAAMZ,SAvtGK3mB,KAAS,CACtBN,KAAM,OACN2gB,QAASrgB,IAqtGQs4B,CAAOt4B,EAAKu4B,iBAC3B/c,EAAQ,WAsBD,CACLwM,SAAUA,IAAMA,GAAS,CACvB2L,SAAU,WACVnY,QACAoY,eACAC,YAAY,IAEdwB,wBAAyB2C,EACzBtS,KAAMnZ,GAAW6rB,EAAO,OAAQ7rB,GAChC1B,OAAQ0B,GAAW6rB,EAAO,SAAU7rB,MACjCvM,EAAK60B,QAEZ,CA+DA,MAZgB,CACd7M,SAAUA,IAAMA,GAAS,CACvB2L,SAAU,WACVnY,QACAoY,eACAC,YAAY,IAEdwB,wBAAyB2C,EACzBlC,UA1DF,SAAmBlY,GACjB,MAAM4a,EAAS7Q,GAAQ/N,IACrBqe,EAAwB,IAAM7S,GAAK,CACjCxL,cAcJ,MAAO,IAXKue,EAAK,CACfI,eAAgB,CACd5jC,GAAIoa,EACJ6O,kBACAwB,aAAc,SAEhBiZ,QAASA,IAAMG,EAAO3tB,SACtBgqB,QAAS,CACPzP,KAAMoT,KAKRpT,KAAMoT,EAEV,EAsCEtC,SArCF,WACE,MAAMrB,EAAU,CACdxP,OAAQA,IAAM4S,EAAwB5S,IACtCE,UAAWA,IAAM0S,EAAwB1S,IACzCD,SAAUA,IAAM2S,EAAwB3S,IACxCE,SAAUA,IAAMyS,EAAwBzS,KAE1C,OAAO2S,EAAK,CACVI,eAAgB,CACd5jC,GAAIoa,EACJ6O,gBAAiB2V,GAA2BrpB,GAC5CkV,aAAc,QAEhBiZ,QAASpsB,GACT4oB,WAEJ,EAsBEY,MArBF,WACwBzN,GAAS,CAC7B2L,SAAU,WACVnY,QACAoY,eACAC,YAAY,KAGZE,EAAQqD,SAEZ,EAcF,CAoCsEqB,CAAS,CAC3E1E,UACA5J,WACAoE,YACAhH,QACAxY,cACA6oB,gBAAiBD,GAAa,KAC9B5C,YAAaxoB,GAAWA,EAAQwoB,YAAcxoB,EAAQwoB,YAAc,OAClE,CAACxG,EAAWwF,EAAS5J,EAAU5C,IAC7BqN,EAAyB5kB,GAAYzC,GA9R7C,SAA2CghB,EAAWhhB,GACpD,MAAMwiB,EAlBR,SAAwCxB,EAAWhhB,GACjD,MAAMnG,EAASmG,EAAMnG,OACrB,MAlCiB8C,EAkCF9C,aAjCMooB,GAAgBtlB,GAAIupB,SAmCvC,MADyB,eAjiL7B,0BAiiLgB3tB,UAA4BiG,GAAQ,kCACzC,KApCX,IAAmB7B,EAsCjB,MAAMlF,EATR,SAAqBupB,GACnB,MAAO,IAAIF,GAAWE,cAAcA,KACtC,CAOmBmK,CAAYnK,GACvBwB,EAASjX,GAAQ1R,EAAQpC,GAC/B,OAAK+qB,EAGAJ,GAAcI,GAIZA,GAHoB,eA1iL7B,0BA0iLgBjqB,UAA4BiG,GAAQ,qCACzC,MAJA,IAOX,CAEiB4sB,CAA+BpK,EAAWhhB,GACzD,OAAKwiB,EAGEA,EAAOC,aAAa3B,GAAWtf,aAF7B,IAGX,CAwRsD6pB,CAAkCrK,EAAWhhB,GAAQ,CAACghB,IACpG6G,EAA0BplB,GAAYrb,IAC1C,MAAM01B,EAAQF,EAASxW,UAAU+c,SAAS/7B,GAC1C,OAAO01B,EAAQA,EAAM9d,QAAU,MAC9B,CAAC4d,EAASxW,YACPklB,EAAiB7oB,GAAY,WAC5B+jB,EAAQC,cAGbD,EAAQyD,aACuB,SAA3BjQ,EAAMb,WAAWlL,OACnB+L,EAAMZ,SA1zGS,CACnBjnB,KAAM,QACN2gB,QAAS,OA0zGT,EAAG,CAAC0T,EAASxM,IACPuR,EAAgB9oB,GAAY,IAAM+jB,EAAQC,YAAa,CAACD,IACxDG,EAAMvvB,GAAQ,KAAO,CACzB2wB,aACAR,aACAF,yBACAQ,0BACAyD,iBACAC,kBACE,CAACxD,EAAYR,EAAYF,EAAwBQ,EAAyByD,EAAgBC,IA1YhG,IAAgCC,IA2YP7B,EA1YvBpF,GAAO,KACL,MAAMkH,EAAc/G,GAAY8G,GAChC/G,GAAmB,KACfgH,EAAY7zB,QAAQnR,SAAW+kC,EAAY/kC,SAAmC,eA79KtF,0BA69KyE8R,SAA4B5N,GAAU,EAAO,2DAA6DA,UAwYjL,IAAK,IAAI0C,EAAI,EAAGA,EAAIs8B,EAAWljC,OAAQ4G,IACrCs8B,EAAWt8B,GAAGs5B,EAElB,CAwBA,SAAS+E,GAASC,GAEhB,OADCA,EAAQ/zB,UAAmC,eAj4L9C,0BAi4LiCW,SAA4B5N,GAAU,EAAO,sCAAwCA,MAC7GghC,EAAQ/zB,OACjB,CACA,SAASg0B,GAAIhrB,GACX,MAAMogB,UACJA,EAAS1gB,aACTA,EAAYurB,QACZA,EAAOjK,MACPA,EAAKkK,4BACLA,GACElrB,EACEmrB,EAAe70B,SAAO,MAvnC5ButB,GAAmB,KAtEGuH,EAACC,EAAcC,KACrC,MAAMC,EAAUjI,GAhCV,sBAiCAkI,EAASlI,GAAWgI,GAjBRG,EAACjG,EAAUgG,IACzBA,EAAOhI,MAAQgC,EAAShC,SAGxBgI,EAAOhI,MAAQgC,EAAShC,SAGxBgI,EAAO/H,MAAQ+B,EAAS/B,SAGxB+H,EAAO/H,MAAQ+B,EAAS/B,QAGrB+H,EAAOnpB,OAASmjB,EAASnjB,OAK5BopB,CAAYF,EAASC,IAGA,eArtJ3B,0BAqtJc7zB,UAA4BiG,GAAQ,yBAC5B4tB,EAAOtxB,iEAC6BqxB,EAAQrxB,6EA+D9DkxB,CAAkBM,EAAwBpkC,EAAK,QAACqkC,SAnDjCjQ,MACjB,MAAMkQ,EAmDSjS,SAnDKiS,QACfA,GAQ8B,SAA/BA,EAAQ5nC,KAAKghC,eACU,eA9uJ7B,0BA8uJgBrtB,UAA4BiG,GAAQ,yCACdguB,EAAQ5nC,kBAEtC0/B,YAGmB,KAArBkI,EAAQC,UACe,eArvJ7B,0BAqvJgBl0B,UAA4BiG,GAAQ,kDACLguB,EAAQC,sEAG/CnI,aAnBqB,eAtuJ7B,0BAsuJgB/rB,UAA4BiG,GAAQ,8CAG5C8lB,aA8CJoI,IACC,IAsnCH,MAAMC,EAAejI,GAAY9jB,GAC3BgsB,EAAgBnqB,GAAY,IArCX7B,KAAU,CACjCisB,gBAAiB7kC,IAMf8kC,EAASA,UALsBC,KACzBnsB,EAAMisB,iBACRjsB,EAAMisB,gBAAgB7kC,MAK5BglC,kBAAmBpsB,EAAMosB,kBACzBC,YAAarsB,EAAMqsB,YACnBC,UAAWtsB,EAAMssB,UACjBC,aAAcvsB,EAAMusB,eA0BXC,CAAiBT,EAAa/0B,SACpC,CAAC+0B,IACEpO,EAAyB9b,GAAY,IA1BX7B,KAAU,IACvCwc,MACAxc,EAAM6d,oBACTf,kBAAmB,IACdN,GAA2BM,qBAC3B9c,EAAM6d,uBAsBF4O,CAA0BV,EAAa/0B,SAC7C,CAAC+0B,IACE1R,EA5zCR,SAAsB+F,GACpB,MAAM55B,EAAKgQ,GAAQ,IAFP4pB,IAAa,oBAAoBA,IAEpBsM,CAAMtM,GAAY,CAACA,IACtC2D,EAAMztB,SAAO,MAsCnB,OArCAC,EAASA,UAAC,WACR,MAAMwF,EAAK4d,SAASpyB,cAAc,OAOlC,OANAw8B,EAAI/sB,QAAU+E,EACdA,EAAGvV,GAAKA,EACRuV,EAAGklB,aAAa,YAAa,aAC7BllB,EAAGklB,aAAa,cAAe,QAC/BrkB,GAASb,EAAG4wB,MAAO5J,IACnBF,KAAiB+J,YAAY7wB,GACtB,WACL4e,WAAW,WACT,MAAMmI,EAAOD,KACTC,EAAKhN,SAAS/Z,IAChB+mB,EAAK+J,YAAY9wB,GAEfA,IAAOgoB,EAAI/sB,UACb+sB,EAAI/sB,QAAU,KAElB,GAEJ,EAAG,CAACxQ,IACaqb,GAAYvJ,IAC3B,MAAMyD,EAAKgoB,EAAI/sB,QACX+E,EACFA,EAAG+wB,YAAcx0B,EAGM,eAtnJ7B,0BAsnJgBX,UAA4BiG,GAAQ,wXAQ3CtF,aAEJ,GAEL,CAmxCmBy0B,CAAa3M,GACxB4M,EApwCR,UAA8B5M,UAC5BA,EAAS6M,KACTA,IAEA,MAAM5K,EAAWa,GAAY,cAAe,CAC1CztB,UAAW,MAEPjP,EAAKgQ,GAAQ,IAbrB,UAAsB4pB,UACpBA,EAASiC,SACTA,IAEA,MAAO,mBAAmBjC,KAAaiC,GACzC,CAQ2B6K,CAAa,CACpC9M,YACAiC,aACE,CAACA,EAAUjC,IAcf,OAbA7pB,EAASA,UAAC,WACR,MAAMwF,EAAK4d,SAASpyB,cAAc,OAKlC,OAJAwU,EAAGvV,GAAKA,EACRuV,EAAG+wB,YAAcG,EACjBlxB,EAAG4wB,MAAMQ,QAAU,OACnBtK,KAAiB+J,YAAY7wB,GACtB,WACL,MAAM+mB,EAAOD,KACTC,EAAKhN,SAAS/Z,IAChB+mB,EAAK+J,YAAY9wB,GAGvB,EAAG,CAACvV,EAAIymC,IACDzmC,CACT,CA2uCwC4mC,CAAqB,CACzDhN,YACA6M,KAAM/B,IAEFmC,EAxnDR,SAAyBjN,EAAWY,GAClC,MAAM/lB,EAASzE,GAAQ,IAhFP4pB,KAChB,MAAMmK,GAVgB+C,EAUclN,EAVH6E,GAAa,IAAIA,MAAcqI,OAA1CA,MAWtB,MAAMC,EAAe,MACnB,MAAMC,EAAa,2DAInB,MAAO,CACL32B,SAAU0zB,EAAYrK,GAAWE,WACjCnlB,OAAQ,CACNwyB,OAAQ,mJAKRC,QAASF,EACTvR,SAjBgB,wBAkBhB0R,cAAeH,GAGpB,EAlBoB,GAoDfjN,EAAQ,CAjCM,MAClB,MAAMqN,EAAa,uBACH9V,GAAYJ,qBAE5B,MAAO,CACL7gB,SAAU0zB,EAAY/kB,GAAU4a,WAChCnlB,OAAQ,CACNghB,SAAU2R,EACVD,cAAeC,EACfC,WAAYD,GAGjB,EAZmB,GAiCQL,EApBR,CAClB12B,SAAU0zB,EAAYrmB,GAAUkc,WAChCnlB,OAAQ,CACNwyB,OAAQ,2BAGC,CACX52B,SAAU,OACVoE,OAAQ,CACNghB,SAAU,6OAYd,MAAO,CACLwR,OAAQnN,GAAUC,EAAO,UACzBmN,QAASpN,GAAUC,EAAO,WAC1BtE,SAAUqE,GAAUC,EAAO,YAC3BoN,cAAerN,GAAUC,EAAO,iBAChCsN,WAAYvN,GAAUC,EAAO,gBAoBFuN,CAAY1N,GAAY,CAACA,IAChD2N,EAAYz3B,SAAO,MACnB03B,EAAa13B,SAAO,MACpB23B,EAAkBpsB,GAAY0C,GAAW6R,IAC7C,MAAMra,EAAKiyB,EAAWh3B,QACrB+E,IAA8B,eAxyInC,0BAwyIsBpE,SAA4B5N,GAAU,EAAO,qDAAuDA,MACtHgS,EAAG+wB,YAAc1W,IACf,IACE8X,EAAiBrsB,GAAYuU,IACjC,MAAMra,EAAKgyB,EAAU/2B,QACpB+E,IAA8B,eA7yInC,0BA6yIsBpE,SAA4B5N,GAAU,EAAO,qDAAuDA,MACtHgS,EAAG+wB,YAAc1W,GAChB,IACHsK,GAA0B,MACrBqN,EAAU/2B,SAAYg3B,EAAWh3B,WAAoC,eAjzI5E,0BAizI+DW,SAA4B5N,GAAU,EAAO,kCAAoCA,MAC5I,MAAM0jC,EAAS1M,GAAcC,GACvBmN,EAAUpN,GAAcC,GAS9B,OARA+M,EAAU/2B,QAAUy2B,EACpBO,EAAWh3B,QAAUm3B,EACrBV,EAAOxM,aAAa,GAAGlvB,YAAiBquB,GACxC+N,EAAQlN,aAAa,GAAGlvB,aAAkBquB,GAC1CQ,KAAUgM,YAAYa,GACtB7M,KAAUgM,YAAYuB,GACtBD,EAAejzB,EAAOwyB,QACtBQ,EAAgBhzB,EAAOyyB,SAChB,KACL,MAAM5nB,EAASie,IACb,MAAM/sB,EAAU+sB,EAAI/sB,QACnBA,IAAmC,eA/zI5C,0BA+zI+BW,SAA4B5N,GAAU,EAAO,uCAAyCA,MAC7G62B,KAAUiM,YAAY71B,GACtB+sB,EAAI/sB,QAAU,MAEhB8O,EAAOioB,GACPjoB,EAAOkoB,KAER,CAAChN,EAAOkN,EAAgBD,EAAiBhzB,EAAOwyB,OAAQxyB,EAAOyyB,QAAStN,IAC3E,MAAMnE,EAAWpa,GAAY,IAAMosB,EAAgBhzB,EAAOghB,UAAW,CAACgS,EAAiBhzB,EAAOghB,WACxFmS,EAAWvsB,GAAYZ,IAK3BgtB,EAJe,SAAXhtB,EAIYhG,EAAO4yB,WAHL5yB,EAAO0yB,gBAIxB,CAACM,EAAiBhzB,EAAO0yB,cAAe1yB,EAAO4yB,aAC5CH,EAAU7rB,GAAY,KACrBmsB,EAAWh3B,SAGhBi3B,EAAgBhzB,EAAOyyB,UACtB,CAACO,EAAiBhzB,EAAOyyB,UAM5B,OALgBl3B,GAAQ,KAAO,CAC7BylB,WACAmS,WACAV,YACE,CAACzR,EAAUmS,EAAUV,GAE3B,CA+jDuBW,CAAgBjO,EAAWY,GAC1CsN,EAAezsB,GAAYoQ,IAC/B6Y,GAASK,GAAc3S,SAASvG,IAC/B,IACGsc,EAAmB/3B,GAAQ,IAAMg4B,GAAmB,CACxD5X,wBACAE,yBACAC,4BACAC,mCACAH,uBACCyX,GAAe,CAACA,IACbtS,EA32CR,WACE,MAAMA,EAAWxlB,GAAQsrB,GAAgB,IAMzC,OALAvrB,EAAAA,UAAU,IACD,WACLylB,EAAS4C,SAEV,CAAC5C,IACGA,CACT,CAm2CmByS,GACXC,EAAmBl4B,GAAQ,IAx7ENm4B,EAAC3S,EAAU9c,KACtC,IAAI0vB,EAAa,KACjB,MAAMC,EAxLR,UAAyB7S,SACvBA,EAAQ9c,UACRA,IAEA,IAAI4vB,EATiB,CACrBjc,UAAW,CAAE,EACbS,SAAU,CAAE,EACZZ,SAAU,CAAC,GAOPtW,EAAU,KACd,MAAM2yB,EAAUA,KACV3yB,IAGJ8C,EAAU2X,qBACVza,EAAUI,sBAAsB,KAC9BJ,EAAU,KAEV,MAAMyW,UACJA,EAASS,SACTA,EAAQZ,SACRA,GACEoc,EACEhiB,EAAQhgB,OAAOD,KAAKgmB,GAAW7pB,IAAIxC,GAAMw1B,EAASxW,UAAU2W,QAAQ31B,GAAIwoC,aAAajtB,KAASre,KAAK,CAACC,EAAGC,IAAMD,EAAEuhB,WAAW/E,MAAQvc,EAAEshB,WAAW/E,OAC/IqP,EAAU1iB,OAAOD,KAAK6lB,GAAU1pB,IAAIxC,IAGjC,CACL+Z,YAAa/Z,EACboU,OAJYohB,EAAS9X,UAAUiY,QAAQ31B,GACpB0Y,UAAU+vB,4BAM3Bl8B,EAAS,CACb8f,UAAW/F,EACXwG,SAAUxmB,OAAOD,KAAKymB,GACtBZ,SAAUlD,GAEZsf,EAtCiB,CACrBjc,UAAW,CAAE,EACbS,SAAU,CAAE,EACZZ,SAAU,CAAC,GAqCPxT,EAAUgwB,QAAQn8B,OA6BtB,MAAO,CACLrN,IA3BUw2B,IACV,MAAM11B,EAAK01B,EAAMhX,WAAW1e,GAC5BsoC,EAAQjc,UAAUrsB,GAAM01B,EACxB4S,EAAQpc,SAASwJ,EAAMhX,WAAW3E,cAAe,EAC7CuuB,EAAQxb,SAAS9sB,WACZsoC,EAAQxb,SAAS9sB,GAE1BuoC,KAqBAjpB,OAnBaoW,IACb,MAAMhX,EAAagX,EAAMhX,WACzB4pB,EAAQxb,SAASpO,EAAW1e,KAAM,EAClCsoC,EAAQpc,SAASxN,EAAW3E,cAAe,EACvCuuB,EAAQjc,UAAU3N,EAAW1e,YACxBsoC,EAAQjc,UAAU3N,EAAW1e,IAEtCuoC,KAaAjV,KAXWA,KACN1d,IAGLO,qBAAqBP,GACrBA,EAAU,KACV0yB,EAnEmB,CACrBjc,UAAW,CAAE,EACbS,SAAU,CAAE,EACZZ,SAAU,CAAC,KAuEb,CAmHoByc,CAAgB,CAChCjwB,UAAW,CACTgwB,QAAShwB,EAAU0X,qBACnBC,mBAAoB3X,EAAU2X,oBAEhCmF,aAgDIoT,EAAahwB,IAChBwvB,IAAsC,eAtiH3C,0BAsiH8Bj3B,SAA4B5N,GAAU,EAAO,4DAA8DA,MACrI,MAAMkyB,EAAW2S,EAAW1e,SAAS1K,UAClB,aAAfpG,EAAM7N,MACJwqB,GAAoBC,EAAUC,EAAU7c,EAAM3X,QAChDonC,EAAUnpC,IAAI0Z,EAAM3X,OAGL,YAAf2X,EAAM7N,MACJwqB,GAAoBC,EAAUC,EAAU7c,EAAM3X,QAChDonC,EAAU/oB,OAAO1G,EAAM3X,QAuBvB4nC,EAAU,CACdtY,yBAhF+BA,CAACvwB,EAAIunB,KACnCiO,EAAS9X,UAAUse,OAAOh8B,KAA+B,eAx/G9D,0BAw/GiDmR,SAA4B5N,GAAU,EAAO,8CAA8CvD,6BAAgCuD,MACnK6kC,GAGL1vB,EAAU6X,yBAAyB,CACjCvwB,KACAunB,eA0EFiJ,gCAvEsCA,CAACxwB,EAAIsoB,KACtC8f,IAGJ5S,EAAS9X,UAAUse,OAAOh8B,KAA+B,eArgH9D,0BAqgHiDmR,SAA4B5N,GAAU,EAAO,oDAAoDvD,6BAAgCuD,MAC9KmV,EAAU8X,gCAAgC,CACxCxwB,KACAsoB,uBAiEF7K,gBApDsBA,CAACzd,EAAIgU,KACtBo0B,GAGL5S,EAAS9X,UAAUiY,QAAQ31B,GAAI0Y,UAAUtE,OAAOJ,IAiDhDsc,sBA/D4BA,CAACtwB,EAAI2d,KAC5ByqB,IAGJ5S,EAAS9X,UAAUse,OAAOh8B,KAA+B,eA/gH9D,0BA+gHiDmR,SAA4B5N,GAAU,EAAO,yCAAyCvD,6BAAgCuD,MACnKmV,EAAU4X,sBAAsB,CAC9BtwB,KACA2d,gBAyDFmrB,gBAxBsBC,IACpBX,IAAsC,eApjH5C,0BAojH+Bj3B,SAA4B5N,GAAU,EAAO,+EAAiFA,MACzJ,MAAMmyB,EAAQF,EAASxW,UAAU2W,QAAQoT,EAAQ3uB,aAC3CwQ,EAAO4K,EAAS9X,UAAUiY,QAAQD,EAAMhX,WAAW3E,aACnD2P,EAAW,CACf1K,UAAW0W,EAAMhX,WACjBhB,UAAWkN,EAAKlM,YAEZsqB,EAAcxT,EAAStlB,UAAU04B,GAKvC,OAJAR,EAAa,CACX1e,WACAsf,eA3HkBC,GACtBvf,WACAwf,gBACA1T,eAGA,MAAMlU,EArCU6nB,MAChB,MAAM/0B,EAASse,KACTlM,EAAY4O,KACZnjB,EAAMmC,EAAOxE,EACbwC,EAAOgC,EAAOjF,EACd+lB,EAAMD,KAuBZ,MAZiB,CACf1Y,MAPYvK,GAAQ,CACpBC,MACAG,OACAF,MALYE,EAFA8iB,EAAIG,YAQhBljB,OALaF,EAFAijB,EAAII,eAWjBlhB,OAAQ,CACN6G,QAAS7G,EACT5D,QAAS4D,EACTuI,IAAK6J,EACLrJ,KAAM,CACJlc,MAAOsa,GACP6B,aAAc7B,OAaH4tB,GACXC,EAAe9nB,EAASlN,OAAO5D,QAE/B+N,EAAaiX,EAAS9X,UAAUue,aADzBvS,EAAShM,UACkC3S,MAAMvI,IAAIkzB,GAASA,EAAMhd,UAAU2wB,2BAA2BD,EAAcF,IAC9HtqB,EAAa4W,EAASxW,UAAUid,aAAavS,EAAS1K,UAAUjU,MAAMvI,IAAIkzB,GAASA,EAAM8S,aAAaY,IAW5G,MALe,CACbjgB,WANiB,CACjBvK,WAAYD,GAAeC,GAC3BL,WAAYD,GAAeC,IAK3BmL,WACApI,aA0GO2nB,CAAkB,CACvBvf,WACA8L,WACA0T,cAAeH,EAAQG,iBASzBI,eAjDqBA,KAChBlB,IAGLC,EAAU/U,OAEVkC,EAAS9X,UAAUue,aADNmM,EAAW1e,SAAShM,UACI3S,MAAMoN,QAAQud,GAASA,EAAMhd,UAAU6wB,eAC5EnB,EAAWY,cACXZ,EAAa,QA2Cf,OAAOS,GAy1EEV,CAAuB3S,EAAUuS,GACvC,CAACvS,EAAUuS,IACRyB,EAAex5B,GAAQ,IAlyDNy5B,GACvBhsB,kBACAoY,eACApF,OACA0G,6BAEA,MAAMuS,EApIkBC,GACxB9T,eACApY,kBACA0Z,yBAAyBA,IAAMnB,OAE/B,MAAM4T,EAAuB5W,GAAQ6C,GAC/BgU,EAA0B7W,GAAQvV,GACxC,IAAIgY,EAAW,KACf,MAAMqU,EAAYljB,IACf6O,IAAoC,eAlhIzC,0BAkhI4BtkB,SAA4B5N,GAAU,EAAO,uCAAyCA,MAC9G,MAAM2zB,uBACJA,EAAsBD,cACtBA,GACExB,EACJrhB,GAAO,CACLwS,QACAiP,aAAc+T,EACdnsB,gBAAiBosB,EACjB5S,gBACAC,yBACAC,4BAoCJ,MAAO,CACLpzB,MAlCc6iB,IAEZ6O,IAAoC,eAliI1C,0BAkiI6BtkB,SAA4B5N,GAAU,EAAO,oDAAsDA,MAC5H,MAAM0zB,EAAgBa,KAAKt5B,MAC3B,IAAIurC,GAAkB,EACtB,MAAMC,EAAqBA,KACzBD,GAAkB,GAEpB31B,GAAO,CACLwS,QACAqQ,cAAe,EACfC,wBAAwB,EACxBrB,aAAcmU,EACdvsB,gBAAiBusB,EACjB7S,2BAEF1B,EAAW,CACTwB,gBACAC,uBAAwB6S,GAGtBA,GACFD,EAAUljB,IAaZ0M,KAVWA,KACNmC,IAGLmU,EAAqB1zB,SACrB2zB,EAAwB3zB,SACxBuf,EAAW,OAKXrhB,OAAQ01B,IAyEYH,CAAoB,CACxC9T,eACApY,kBACA0Z,2BAEI8S,EA1EiBC,GACvBzZ,OACAhT,kBACAoY,kBAuCqBjP,IACnB,MAAMmiB,EAAUniB,EAAM2C,kBACtB,IAAKwf,EACH,OAEF,MAAMlvB,EAAc6M,GAAkBE,EAAM1H,QAC3CrF,IAAuC,eAxnI5C,0BAwnI+B1I,SAA4B5N,GAAU,EAAO,6DAA+DA,MACvI,MAAM4mC,EAtC6BC,EAAC1sB,EAAW1J,KAC/C,IAAKolB,GAAmB1b,EAAW1J,GACjC,OAAOA,EAET,MAAM+kB,EAtLkBsR,EAAC3sB,EAAW1J,KACtC,MAAMuI,EAAQmB,EAAUnB,MACxB,OAAKA,GAGA6c,GAAmB1b,EAAW1J,GAG5B4kB,GAAW,CAChBpoB,QAAS+L,EAAMnI,OAAO5D,QACtBmM,IAAKJ,EAAMnI,OAAOuI,IAClB3I,WARO,MAmLSq2B,CAAoB3sB,EAAW1J,GAC/C,IAAK+kB,EAEH,OADAtb,EAAgBC,EAAUgB,WAAW1e,GAAIgU,GAClC,KAET,MAAMs2B,EAA4BrqC,GAAS+T,EAAQ+kB,GAGnD,OAFAtb,EAAgBC,EAAUgB,WAAW1e,GAAIsqC,GACvBrqC,GAAS+T,EAAQs2B,IA2BRF,CAA6BxjB,EAAMuC,WAAW5K,WAAW1E,GAAckvB,GAClG,IAAKoB,EACH,OAEF,MACMI,EA7B0BC,EAAC7e,EAAuBrK,EAAUtN,KAClE,IAAK2X,EACH,OAAO3X,EAET,IAAKmlB,GAAgB7X,EAAUtN,GAC7B,OAAOA,EAET,MAAM+kB,EA9Ne0R,EAACnpB,EAAUtN,IAC7BmlB,GAAgB7X,EAAUtN,GAKxB4kB,GAAW,CAChBpoB,QAFc8Q,EAASlN,OAAO5D,QAG9BmM,IAJU2E,EAASlN,OAAOuI,IAK1B3I,WAPO,KA4NSy2B,CAAiBnpB,EAAUtN,GAC3C,IAAK+kB,EAEH,OADAlD,EAAa7hB,GACN,KAET,MAAM02B,EAAyBzqC,GAAS+T,EAAQ+kB,GAGhD,OAFAlD,EAAa6U,GACKzqC,GAAS+T,EAAQ02B,IAeXF,CAA0B5jB,EAAM+E,sBADvC/E,EAAMtF,SACkE6oB,GACpFI,GAlDcI,EAAC/jB,EAAO9S,KAC3B,MAAMmR,EAAS/lB,GAAI0nB,EAAMpW,QAAQyU,OAAOuE,UAAW1V,GACnD2c,EAAK,CACHxL,YAkDF0lB,CAAa/jB,EAAO2jB,IAgBHL,CAAmB,CACpCzZ,OACAoF,eACApY,oBAqBF,MALiB,CACfrJ,OAfawS,IACeuQ,IACJV,UAA4B,aAAhB7P,EAAMC,QAGf,UAAvBD,EAAM6D,aAIL7D,EAAM2C,mBAGX0gB,EAAWrjB,GANT8iB,EAAct1B,OAAOwS,KAUvB7iB,MAAO2lC,EAAc3lC,MACrBuvB,KAAMoW,EAAcpW,OAiwDamW,CAAmB,CACpD5T,gBACApY,gBAAiByqB,EAAiBzqB,gBAClC0Z,4BACG6Q,GAAmB,CACpBvX,SACCqX,KACD,CAACI,EAAiBzqB,gBAAiBqqB,EAAc3Q,IAC/CyT,EAhjDR,SAAyBhR,GACvB,MAAMiR,EAAa/6B,SAAO,CAAA,GACpBg7B,EAAYh7B,SAAO,MACnBi7B,EAAuBj7B,SAAO,MAC9Bk7B,EAAel7B,UAAO,GACtB8rB,EAAWvgB,GAAY,SAAkBrb,EAAIirC,GACjD,MAAMvV,EAAQ,CACZ11B,KACAirC,SAGF,OADAJ,EAAWr6B,QAAQxQ,GAAM01B,EAClB,WACL,MAAM6F,EAAUsP,EAAWr6B,QACX+qB,EAAQv7B,KACR01B,UACP6F,EAAQv7B,GAGpB,EAAE,IACGkrC,EAAe7vB,GAAY,SAAsB8vB,GACrD,MAAM/P,EAASF,GAAetB,EAAWuR,GACrC/P,GAAUA,IAAWjI,SAASiY,eAChChQ,EAAO6P,OAEX,EAAG,CAACrR,IACEyR,EAAiBhwB,GAAY,SAAwBoD,EAAU6sB,GAC/DR,EAAUt6B,UAAYiO,IACxBqsB,EAAUt6B,QAAU86B,EAEvB,EAAE,IACGC,EAA0BlwB,GAAY,WACtC0vB,EAAqBv6B,SAGpBw6B,EAAax6B,UAGlBu6B,EAAqBv6B,QAAUwF,sBAAsB,KACnD+0B,EAAqBv6B,QAAU,KAC/B,MAAMg7B,EAASV,EAAUt6B,QACrBg7B,GACFN,EAAaM,KAGnB,EAAG,CAACN,IACEO,EAAiBpwB,GAAY,SAAwBrb,GACzD8qC,EAAUt6B,QAAU,KACpB,MAAMk7B,EAAUvY,SAASiY,cACpBM,GAGDA,EAAQrQ,aAAa3B,GAAWtf,eAAiBpa,IAGrD8qC,EAAUt6B,QAAUxQ,EACrB,EAAE,IAiBH,OAhBAk6B,GAA0B,KACxB8Q,EAAax6B,SAAU,EAChB,WACLw6B,EAAax6B,SAAU,EACvB,MAAMoF,EAAUm1B,EAAqBv6B,QACjCoF,GACFO,qBAAqBP,KAGxB,IACa5F,GAAQ,KAAO,CAC7B4rB,WACA6P,iBACAF,0BACAF,mBACE,CAACzP,EAAU6P,EAAgBF,EAAyBF,GAE1D,CAu+CuBM,CAAgB/R,GAC/BhH,EAAQ5iB,GAAQ,IAxoFN47B,GAChB1D,mBACA0C,eACA/D,eACArB,gBACA3R,WACA2V,mBACIqC,UAAcrgB,GAASmJ,8XAAiBmX,EAxqBlCjD,EAwqBwDhC,EAxqB7C,IAAMviC,GAAQmnB,IAC/ByE,GAAMzE,EAAQ,oBAChBod,EAAQpT,WAENvF,GAAMzE,EAAQ,iBAChBod,EAAQjB,SAASnc,EAAOC,QAAQJ,UAAU/e,OAAOkO,SAE/CyV,GAAMzE,EAAQ,UAAYyE,GAAMzE,EAAQ,mBAC1Cod,EAAQ3B,UAEV5iC,EAAKmnB,KA4kBuBod,IAAW,IAAMvkC,GAAQmnB,KACjDyE,GAAMzE,EAAQ,kBAAoByE,GAAMzE,EAAQ,UAAYyE,GAAMzE,EAAQ,kBAC5Eod,EAAQS,iBAEVhlC,EAAKmnB,IA8E4EsgB,CAAwB7D,GAvtBhGW,IAAW,EACpB9W,WACAC,cACI1tB,GAAQmnB,IACZ,IAAKyE,GAAMzE,EAAQ,QAEjB,YADAnnB,EAAKmnB,GAGP,MAAMzrB,GACJA,EAAEipB,gBACFA,EAAewB,aACfA,GACEgB,EAAOC,QACLzQ,EAAU8W,IACM,mBAAlB9W,EAAQ4L,OACVmL,EAASlB,GAAa,CACpBxF,UAAWrQ,EAAQqQ,aAGA,SAArByG,IAAWlL,QAA6C,eA7mF5D,0BA6mF+C1V,SAA4B5N,GAAU,EAAO,oCAAsCA,MAChIyuB,EAhFmB,CACnBjnB,KAAM,QACN2gB,QAAS,OA+ETsG,EA7IoC,CACpCjnB,KAAM,yBACN2gB,QA2I8B,CAC5BtR,YAAapa,EACbyqB,kBAEF,MAGMse,EAAU,CACd3uB,YAAapa,EACbkpC,cALoB,CACpB8C,yBAA2C,SAAjBvhB,KAMtBf,SACJA,EAAQP,WACRA,EAAU7H,SACVA,GACEunB,EAAQC,gBAAgBC,IA3C9B,SAA4Brf,EAAUP,GACP,eAplF/B,0BAolFkBhY,UA7BlB,SAAsBoR,GACpB,GAAIA,EAAkBljB,QAAU,EAC9B,OAEF,MAAM4sC,EAAU1pB,EAAkB/f,IAAIyrB,GAAKA,EAAEvP,WAAW/E,OAClDuyB,EAAS,CAAA,EACf,IAAK,IAAIjmC,EAAI,EAAGA,EAAIgmC,EAAQ5sC,OAAQ4G,IAAK,CACvC,MAAMuK,EAAUy7B,EAAQhmC,GAEpBuK,IADay7B,EAAQhmC,EAAI,GACF,IACzBimC,EAAO17B,IAAW,EAEtB,CACA,IAAKlK,OAAOD,KAAK6lC,GAAQ7sC,OACvB,OAEF,MAAM8sC,EAAYF,EAAQzpC,IAAImX,GACXtW,QAAQ6oC,EAAOvyB,IACd,MAAMA,KAAW,GAAGA,KACrCxT,KAAK,MACiB,eA3kF3B,0BA2kFcgL,UAA4BiG,GAAQ,wGAK5C+0B,QAEN,CAIIC,CAD0BrtB,GAA6B2K,EAAShM,UAAU1d,GAAImpB,EAAWvK,YAG7F,EAuCEytB,CAAmB3iB,EAAUP,GAC7B6I,EAtJ8B,CAC9BjnB,KAAM,kBACN2gB,QAoJwB,CACtBhC,WACAP,aACAF,kBACAwB,eACAnJ,eA4qB0HkiB,CAAK0E,GAAmBpW,GAAgBwC,GAA+BC,GAAsCE,GA5C1N+U,IAAgB5W,GAAStuB,GAAQmnB,IAChD,GAFiBA,IAAUyE,GAAMzE,EAAQ,kBAAoByE,GAAMzE,EAAQ,iBAAmByE,GAAMzE,EAAQ,SAExG6gB,CAAW7gB,GAGb,OAFA+d,EAAalW,YACbhvB,EAAKmnB,GAGP,GAAIyE,GAAMzE,EAAQ,mBAAoB,CACpCnnB,EAAKmnB,GACL,MAAM7E,EAAQgM,EAAMb,WAGpB,MAFkB,aAAhBnL,EAAMC,QAAiD,eA9wG7D,0BA8wGgD1V,SAA4B5N,GAAU,EAAO,uDAAyDA,WAClJimC,EAAazlC,MAAM6iB,EAErB,CACAtiB,EAAKmnB,GACL+d,EAAap1B,OAAOwe,EAAMb,aA8B4Nwa,CAAW/C,GAAe7W,GA3EtQkW,KACV,IAAI2D,GAAa,EACjB,MAAO,IAAMloC,GAAQmnB,IACnB,GAAIyE,GAAMzE,EAAQ,mBAKhB,OAJA+gB,GAAa,EACb3D,EAAQ4C,eAAehgB,EAAOC,QAAQhC,SAAS1K,UAAUhf,IACzDsE,EAAKmnB,QACLod,EAAQ0C,0BAIV,GADAjnC,EAAKmnB,GACA+gB,EAAL,CAGA,GAAItc,GAAMzE,EAAQ,SAGhB,OAFA+gB,GAAa,OACb3D,EAAQ0C,0BAGV,GAAIrb,GAAMzE,EAAQ,iBAAkB,CAClC+gB,GAAa,EACb,MAAMjgC,EAASkf,EAAOC,QAAQJ,UAAU/e,OACpCA,EAAO4N,SACT0uB,EAAQwC,eAAe9+B,EAAO6N,YAAa7N,EAAO4N,QAAQC,aAE5DyuB,EAAQ0C,yBACV,CAbA,IA8D8RN,CAAML,GAzKvR6B,EAACjH,EAAe3R,KAC/B,MAAMwU,EAnGWqE,EAAClH,EAAe3R,KACjC,MAAM8Y,EAzFcC,MACpB,MAAMrR,EAAU,GA0BhB,MAAO,CACLr8B,IApBUgE,IACV,MAAM2pC,EAAU1Y,WAAW,IAPb0Y,KACd,MAAMlzB,EAAQ4hB,EAAQx7B,UAAUyf,GAAQA,EAAKqtB,UAAYA,IAC5C,IAAXlzB,IAAyC,eAl9F/C,0BAk9FkCxI,SAA4B5N,GAAU,EAAO,wBAA0BA,MACrG,MAAOmyB,GAAS6F,EAAQW,OAAOviB,EAAO,GACtC+b,EAAMpa,YAG2BqY,CAAQkZ,IAKzCtR,EAAQr1B,KAJM,CACZ2mC,UACAvxB,SAAUpY,KAiBZ4pC,MAbYA,KACZ,IAAKvR,EAAQl8B,OACX,OAEF,MAAM0tC,EAAU,IAAIxR,GACpBA,EAAQl8B,OAAS,EACjB0tC,EAAQ50B,QAAQud,IACdtB,aAAasB,EAAMmX,SACnBnX,EAAMpa,gBAiEWsxB,GACrB,IAAInX,EAAW,KACf,MAmEM1E,EAAOxkB,IACVkpB,IAAoC,eA7mGzC,0BA6mG4BtkB,SAA4B5N,GAAU,EAAO,+DAAiEA,MACtIkyB,EAAW,KACXhC,GAAY,EAAa,IAAME,GAAQ6R,IAAgBM,UAAWv5B,EAAQsnB,EAAUvZ,MActF,MAAO,CACL0yB,cArFoBA,CAAC5yB,EAAa6L,KAChCwP,IAAoC,eA1iG1C,0BA0iG6BtkB,SAA4B5N,GAAU,EAAO,0EAA4EA,MAClJkwB,GAAY,EAAmB,KAC7B,MAAMvwB,EAAKsiC,IAAgBC,gBACvBviC,GAKFA,EAJe,CACbkX,cACA6L,YA+ENgnB,YAzEkBA,CAACvjB,EAAUzD,KAC3BwP,IAAoC,eAvjG1C,0BAujG6BtkB,SAA4B5N,GAAU,EAAO,4EAA8EA,MACpJkwB,GAAY,EAAqB,KAC/B,MAAMvwB,EAAKsiC,IAAgBI,kBACvB1iC,GACFA,EAAGwwB,GAAahK,EAAUzD,OAqE9BliB,MAjEYA,CAAC2lB,EAAUzD,KACrBwP,IAAoC,eAhkG1C,0BAgkG6BtkB,SAA4B5N,GAAU,EAAO,4EAA8EA,MACpJ,MAAMjD,EAAOozB,GAAahK,EAAUzD,GACpCwP,EAAW,CACTxP,OACAinB,aAAcxjB,EACdyjB,aAAc7sC,EAAKuD,OACnBupC,YAAa,MAEfT,EAAaztC,IAAI,KACfu0B,GAAY,EAAe,IAAME,GAAQ6R,IAAgBK,YAAavlC,EAAMuzB,EAAUvZ,QAwDxFC,OArDaA,CAACmP,EAAUxK,KACxB,MAAM1E,EAAWyE,GAAkBC,GAC7B/E,EAAUiF,GAAcF,GAC7BuW,IAAoC,eA/kGzC,0BA+kG4BtkB,SAA4B5N,GAAU,EAAO,+DAAiEA,MACtI,MAAM8pC,KA/Ee1yB,EA+EuB+O,MA/EhBxrB,EA+E0Bu3B,EAASyX,eA3ExCvyB,EAAMqE,UAAUhf,KAAO9B,EAAO8gB,UAAUhf,IAAM2a,EAAMqE,UAAUjF,cAAgB7b,EAAO8gB,UAAUjF,aAAeY,EAAMqE,UAAUjU,OAAS7M,EAAO8gB,UAAUjU,MAAQ4P,EAAMqE,UAAUrF,QAAUzb,EAAO8gB,UAAUrF,OAC3MgB,EAAM+C,UAAU1d,KAAO9B,EAAOwf,UAAU1d,IAAM2a,EAAM+C,UAAU3S,OAAS7M,EAAOwf,UAAU3S,MAL3FuiC,IAAC3yB,EAAOzc,EAgFxBmvC,IACF5X,EAASyX,aAAexjB,GAE1B,MAAM6jB,GArGgBC,EAAC7yB,EAAOzc,IACnB,MAATyc,GAA2B,MAAVzc,GAGR,MAATyc,GAA2B,MAAVzc,GAGdyc,EAAMZ,cAAgB7b,EAAO6b,aAAeY,EAAMhB,QAAUzb,EAAOyb,MA8F5C6zB,CAAkB/X,EAAS0X,aAAc3yB,GACjE+yB,IACF9X,EAAS0X,aAAe3yB,GAE1B,MAAMizB,GAhGaC,EAAC/yB,EAAOzc,IAChB,MAATyc,GAA2B,MAAVzc,GAGR,MAATyc,GAA2B,MAAVzc,GAGdyc,EAAMP,cAAgBlc,EAAOkc,aAAeO,EAAMZ,cAAgB7b,EAAO6b,YAyFlD2zB,CAAejY,EAAS2X,YAAajzB,GAIjE,GAHIszB,IACFhY,EAAS2X,YAAcjzB,IAEpBkzB,IAAuBE,IAAuBE,EACjD,OAEF,MAAMntC,EAAO,IACRozB,GAAahK,EAAU+L,EAASxP,MACnC9L,UACAN,YAAaW,GAEfmyB,EAAaztC,IAAI,KACfu0B,GAAY,EAAgB,IAAME,GAAQ6R,IAAgBO,aAAczlC,EAAMuzB,EAAUvZ,QA6B1FwyB,MA1BYA,KACXrX,IAAoC,eAzmGzC,0BAymG4BtkB,SAA4B5N,GAAU,EAAO,4CAA8CA,MACnHopC,EAAaG,SAyBb/b,OACA+P,MAnBYA,KACZ,IAAKrL,EACH,OAEF,MAAMlpB,EAAS,IACVmnB,GAAa+B,EAASyX,aAAczX,EAASxP,MAChD9L,QAAS,KACTN,YAAa,KACbY,OAAQ,UAEVsW,EAAKxkB,MAcWmgC,CAAalH,EAAe3R,GAC9C,OAAOjB,GAAStuB,GAAQmnB,IACtB,GAAIyE,GAAMzE,EAAQ,0BAEhB,YADA4c,EAAU2E,cAAcvhB,EAAOC,QAAQtR,YAAaqR,EAAOC,QAAQjB,cAGrE,GAAIyF,GAAMzE,EAAQ,mBAAoB,CACpC,MAAM/B,EAAW+B,EAAOC,QAAQhC,SAIhC,OAHA2e,EAAU4E,YAAYvjB,EAAU+B,EAAOC,QAAQjB,cAC/CnmB,EAAKmnB,QACL4c,EAAUtkC,MAAM2lB,EAAU+B,EAAOC,QAAQjB,aAE3C,CACA,GAAIyF,GAAMzE,EAAQ,iBAAkB,CAClC,MAAMlf,EAASkf,EAAOC,QAAQJ,UAAU/e,OAIxC,OAHA87B,EAAUyE,QACVxoC,EAAKmnB,QACL4c,EAAUtX,KAAKxkB,EAEjB,CAEA,GADAjI,EAAKmnB,GACDyE,GAAMzE,EAAQ,SAEhB,YADA4c,EAAUvH,QAGZ,MAAMla,EAAQgM,EAAMb,WACA,aAAhBnL,EAAMC,OACRwhB,EAAU9tB,OAAOqM,EAAM8C,SAAU9C,EAAM1H,UA6I0QutB,CAAWjH,EAAe3R,MAxqBrUgV,OAyyGkB+C,CAAY,CACtC/X,WACA2V,eACAtB,mBACA0C,eACApF,gBACAqB,iBACE,CAAChT,EAAU2V,EAActB,EAAkB0C,EAAcpF,EAAeqB,IAC/C,eA17L/B,0BA07LkB11B,UACVwzB,EAAan0B,SAAWm0B,EAAan0B,UAAYoiB,GAC1B,eA57L/B,0BA47LkBzhB,UAA4BiG,GAAQ,2BAGpDutB,EAAan0B,QAAUoiB,EACvB,MAAM+a,EAAgBtyB,GAAY,KAChC,MAAM7K,EAAU8zB,GAASK,GAEL,SADNn0B,EAAQuhB,WACZlL,OACRrW,EAAQwhB,SAt6GO,CACnBjnB,KAAM,QACN2gB,QAAS,QAs6GN,IACG5S,EAAauC,GAAY,KAC7B,MAAMuL,EAAQ0d,GAASK,GAAc5S,WACrC,MAAoB,mBAAhBnL,EAAMC,OAGU,SAAhBD,EAAMC,OAGHD,EAAM9N,YACZ,IAKHI,EAJqBlJ,GAAQ,KAAO,CAClC8I,aACAC,SAAU40B,IACR,CAAC70B,EAAY60B,KAEjB,MAAMC,EAAavyB,GAAYrb,GAAM41B,GAAa0O,GAASK,GAAc5S,WAAY/xB,GAAK,IACpF6tC,EAAuBxyB,GAAY,IAAMsL,GAAkB2d,GAASK,GAAc5S,YAAa,IAC/F+b,EAAa99B,GAAQ,KAAO,CAChC64B,QAASX,EACT+C,MAAOL,EACPhR,YACAmU,QAASH,EACTjnB,kBAAmBknB,EACnBrH,gCACAhR,aACE,CAACoE,EAAWsO,EAAkB1B,EAA+BoE,EAAcgD,EAAYC,EAAsBrY,IAWjH,OAVA4M,GAAiB,CACfxI,YACAhH,QACA4C,WACA6M,cAAeoC,GAAW,KAC1BnC,sBAAqD,IAA/B9oB,EAAM8oB,uBAE9BvyB,EAAAA,UAAU,IACD49B,EACN,CAACA,IACG7sC,UAAMC,cAAc67B,GAAWoR,SAAU,CAC9C/sC,MAAO6sC,GACNhtC,EAAK,QAACC,cAAcitC,GAAU,CAC/BlH,QAAS3K,GACTvJ,MAAOA,GACNpZ,EAAMC,UACX,CAMA,SAASw0B,GAAgBz0B,GACvB,MAAMogB,EAJC94B,EAAAA,QAAM67B,QAKP+H,EAA8BlrB,EAAMkrB,6BA33LR,8NA43LlC,OAAO5jC,EAAK,QAACC,cAAcwX,GAAe,KAAMW,GAAgBpY,EAAK,QAACC,cAAcyjC,GAAK,CACvFhK,MAAOhhB,EAAMghB,MACbZ,UAAWA,EACX1gB,aAAcA,EACdwrB,4BAA6BA,EAC7BpC,qBAAsB9oB,EAAM8oB,qBAC5BmC,QAASjrB,EAAMirB,QACfgB,gBAAiBjsB,EAAMisB,gBACvBG,kBAAmBpsB,EAAMosB,kBACzBC,YAAarsB,EAAMqsB,YACnBE,aAAcvsB,EAAMusB,aACpBD,UAAWtsB,EAAMssB,UACjBzO,oBAAqB7d,EAAM6d,qBAC1B7d,EAAMC,UACX,CAEA,MAIMy0B,GAAwBA,CAACC,EAA2BvG,IACpDA,EACKtW,GAAYP,KAAK6W,EAASnW,UAE/B0c,EACK7c,GAAYE,KAEdF,GAAYC,MAEf6c,GAAqBA,CAACC,EAAaC,KACvC,GAAKD,EAGL,OAAOC,EA/3GC,EACK,IA8+Gf,IAAIC,GAAmBztC,EAAK,QAACs7B,cAAc,MAE3C,SAASoS,GAAqBj5B,GAC1BA,GAAMylB,GAAczlB,KAAgC,eA9oMxD,0BA8oM2CpE,SAA4B5N,GAAU,EAAO,oOAKjFA,KACP,CA8BA,SAASkrC,GAAmBC,GAC1B,MAAMniC,EAASoiC,aAAWD,GAE1B,OADCniC,IAAkC,eAprMrC,0BAorMwB4E,SAA4B5N,GAAU,EAAO,mCAAqCA,MACjGgJ,CACT,CAEA,SAASqiC,GAAgBh2B,GACvBA,EAAMK,gBACR,CA4FA,IAAI41B,GAAgBA,CAAC1xC,EAAGC,IAAMD,IAAMC,EAEhC0xC,GAA8BviC,IAChC,MAAM4N,QACJA,EAAON,YACPA,GACEtN,EACJ,OAAIsN,EACKA,EAAYE,YAEjBI,EACKA,EAAQJ,YAEV,MAsFT,SAASg1B,GAAqBC,EAAmB,MAC/C,MAAO,CACLl2B,YAAY,EACZw1B,iBAAiB,EACjBW,SAAS,EACTC,cAAe,KACfjpB,KAAM,KACNkpB,aAAc,KACdH,mBACA1qB,YAAa,KAEjB,CACA,MAAM8qB,GAAS,CACbC,OAAQ,CACNtkC,KAAM,YACN+I,OAAQyH,GACRyzB,iBAAkB,KAClBM,2BAA2B,EAC3BC,SAAUR,GAAqB,QAuE7BS,GAAqBC,GATGC,KAC5B,MAAMC,EA9JR,WACE,MAAMC,EAAiB7xB,GAAW,CAAC5O,EAAGS,KAAO,CAC3CT,IACAS,OAEIigC,EAAsB9xB,GAAW,CAACkI,EAAMgpB,EAASE,EAAe,KAAM7qB,EAAc,KAAMsjB,EAAW,QAAU,CACnH9uB,YAAY,EACZm2B,UACAX,gBAAiBjrC,QAAQukC,GACzBsH,cAAetH,EACf3hB,OACAkpB,eACA7qB,cACA0qB,iBAAkB,QAEdc,EAAmB/xB,GAAW,CAACjK,EAAQmS,EAAMI,EAAW4oB,EAASE,EAAe,KAAM7qB,EAAc,KAAMtC,EAAqB,QAAU,CAC7IqtB,OAAQ,CACNtkC,KAAM,WACN68B,SAAU,KACVuH,eACA7qB,cACA2B,OACAnS,SACAuS,YACArE,qBACAutB,SAAUM,EAAoB5pB,EAAMgpB,EAASE,EAAc7qB,EAAa,UAkD5E,MA/CiBjU,CAACuW,EAAOmpB,KACvB,GAAIj3B,GAAW8N,GAAQ,CACrB,GAAIA,EAAM8C,SAAS1K,UAAUhf,KAAO+vC,EAAS31B,YAC3C,OAAO,KAET,MAAMtG,EAAS8S,EAAMpW,QAAQyU,OAAOnR,OAC9BuS,EAAYO,EAAMuC,WAAWvK,WAAWmxB,EAAS31B,aACjD+0B,EAAezoB,GAAkBE,EAAM1H,QACvCoF,GAvCqBpF,EAuCkB0H,EAAM1H,QAtCzCC,IAAyB,YAAnBD,EAAOC,GAAGpU,KAAqBmU,EAAOC,GAAGhF,QAAQC,YAAc,KAuCzE4H,EAAqB4E,EAAM5E,mBACjC,OAAO8tB,EAAiBF,EAAe97B,EAAO3E,EAAG2E,EAAOlE,GAAIgX,EAAM6D,aAAcpE,EAAW0pB,EAASd,QAASE,EAAc7qB,EAAatC,EAC1I,CA1C6B9C,MA2C7B,GAAoB,mBAAhB0H,EAAMC,MAA4B,CACpC,MAAMyE,EAAY1E,EAAM0E,UACxB,GAAIA,EAAU/e,OAAO6N,cAAgB21B,EAAS31B,YAC5C,OAAO,KAET,MAAM60B,EAAUc,EAASd,QACnB5oB,EAAYO,EAAMuC,WAAWvK,WAAWmxB,EAAS31B,aACjD7N,EAAS+e,EAAU/e,OACnB0Z,EAAO1Z,EAAO0Z,KACdkpB,EAAeL,GAA4BviC,GAC3C+X,EAxDqB/X,IACxBA,EAAO4N,QAAU5N,EAAO4N,QAAQC,YAAc,KAuD7B41B,CAAyBzjC,GAEvCq7B,EAAW,CACfnW,SAFe7K,EAAMoJ,aAGrBigB,MAAOjf,GACPW,OAAQ/K,EAAMqJ,oBACdigB,QAAS5rB,EAxsHP,EAwsH4C,KAC9C6rB,MAAO7rB,EArsHL,IAqsHwC,MAE5C,MAAO,CACL+qB,OAAQ,CACNtkC,KAAM,WACN+I,OAAQ8S,EAAMqJ,oBACd5J,YACAuhB,WACAuH,eACA7qB,cACA2B,OACAjE,mBAAoB,KACpButB,SAAUM,EAAoB5pB,EAAMgpB,EAASE,EAAc7qB,EAAasjB,IAG9E,CACA,OAAO,KAGX,CAkF2BwI,GACnBC,EA7DR,WACE,MAAMT,EAAiB7xB,GAAW,CAAC5O,EAAGS,KAAO,CAC3CT,IACAS,OAEIigC,EAAsB9xB,GAAWgxB,IACjCe,EAAmB/xB,GAAW,CAACjK,EAAQk7B,EAAmB,KAAMM,KAA+B,CACnGD,OAAQ,CACNtkC,KAAM,YACN+I,SACAk7B,mBACAM,4BACAC,SAAUM,EAAoBb,OAG5BsB,EAActB,GACXA,EAAmBc,EAAiBv0B,GAAQyzB,GAAkB,GAAQ,KAEzEuB,EAAWA,CAACC,EAAOC,EAAYvxB,EAAQ+D,KAC3C,MAAMytB,EAAqBxxB,EAAOc,UAAUH,QAAQ2wB,GAC9CG,EAA+BttC,QAAQ4f,EAAc8H,eAAiB9H,EAAcC,SAASstB,IAC7Fr2B,EAAUiF,GAAcF,GACxB8vB,EAAmB70B,GAAWA,EAAQC,cAAgBo2B,EAAQC,EAAa,KACjF,IAAKC,EAAoB,CACvB,IAAKC,EACH,OAAOL,EAAYtB,GAErB,GAAI9vB,EAAOc,UAAUJ,UAAU4wB,GAC7B,OAAO,KAET,MAAMx8B,EAAS2H,GAAOsH,EAAchD,YAAYrE,OAC1C9H,EAAS87B,EAAe57B,EAAO7E,EAAG6E,EAAOpE,GAC/C,OAAOkgC,EAAiBh8B,EAAQk7B,GAAkB,EACpD,CACA,GAAI2B,EACF,OAAOL,EAAYtB,GAErB,MAAMzqB,EAAarF,EAAOe,YAAYrE,MAChC9H,EAAS87B,EAAerrB,EAAWpV,EAAGoV,EAAW3U,GACvD,OAAOkgC,EAAiBh8B,EAAQk7B,EAAkB0B,EAAmBtuB,gBAkBvE,MAhBiB/R,CAACuW,EAAOmpB,KACvB,GAAIj3B,GAAW8N,GACb,OAAIA,EAAM8C,SAAS1K,UAAUhf,KAAO+vC,EAAS31B,YACpC,KAEFm2B,EAASR,EAAS31B,YAAawM,EAAM8C,SAAS1K,UAAUhf,GAAI4mB,EAAM1H,OAAQ0H,EAAM3D,eAEzF,GAAoB,mBAAhB2D,EAAMC,MAA4B,CACpC,MAAMyE,EAAY1E,EAAM0E,UACxB,OAAIA,EAAU/e,OAAO6N,cAAgB21B,EAAS31B,YACrC,KAEFm2B,EAASR,EAAS31B,YAAakR,EAAU/e,OAAO6N,YAAakR,EAAUpM,OAAQoM,EAAUrI,cAClG,CACA,OAAO,KAGX,CAG4B2tB,GAE1B,MADiBvgC,CAACuW,EAAOmpB,IAAaJ,EAAiB/oB,EAAOmpB,IAAaM,EAAkBzpB,EAAOmpB,IAAaX,IAGtF,CAC3ByB,sBA95H4BA,KAAO,CACnC9lC,KAAM,0BACN2gB,QAAS,QA85HqE,KAAM,CACpFob,QAAS3K,GACT2U,mBAAoBjC,IAFKY,CAvRTj2B,IAChB,MAAM+jB,EAAMztB,SAAO,MACbihC,EAAS11B,GAAY,CAAC9F,EAAK,QAC/BgoB,EAAI/sB,QAAU+E,GACb,IACGy7B,EAAS31B,GAAY,IAAMkiB,EAAI/sB,QAAS,KACxCopB,UACJA,EAAS4M,8BACTA,EAA6BhR,SAC7BA,GACEiZ,GAAmB7R,KACjB7xB,KACJA,EAAIgP,YACJA,GACE00B,GAAmBF,IACjB7vB,EAAa1O,GAAQ,KAAO,CAChChQ,GAAIwZ,EAAMY,YACVT,MAAOH,EAAMG,MACb5O,OACAgP,gBACE,CAACP,EAAMY,YAAaZ,EAAMG,MAAO5O,EAAMgP,KACrCN,SACJA,EAAQW,YACRA,EAAWmN,UACXA,EAASmZ,wBACTA,EAAuB0C,2BACvBA,EAA0B6L,QAC1BA,EAAOI,OACPA,EACAwB,sBAAuBI,GACrBz3B,GAnEN,SAAyBA,EAAOogB,EAAWoX,GACzC3T,GAAmB,KACjB,SAAS9xB,EAAOvL,GACd,MAAO,iBAAiBA,MAC1B,CACA,MAAMA,EAAKwZ,EAAMY,YAChBpa,IAA8B,eA5pMnC,0BA4pMsBmR,SAA4B5N,GAAU,EAAO,oCAAsCA,MACrF,iBAAPvD,IAA4C,eA7pMzD,0BA6pM4CmR,SAA4B5N,GAAU,EAAO,6EACzDvD,cAAeA,MAASuD,MACnDqQ,OAAOs9B,UAAU13B,EAAMG,SAAkC,eA/pM9D,0BA+pMiDxI,SAA4B5N,GAAU,EAAO,GAAGgI,EAAOvL,qCAAwCuD,MAClH,aAAtBiW,EAAM61B,OAAOtkC,OAGjByjC,GAAqBwC,KACjBx3B,EAAM+N,YACP2T,GAAetB,EAAW55B,KAA+B,eArqMhE,0BAqqMmDmR,SAA4B5N,GAAU,EAAO,GAAGgI,EAAOvL,iCAAoCuD,SAG9I,EAkDE4tC,CAAgB33B,EAAOogB,EAAWoX,GAjDpC,SAAgC/B,GAC9B9R,GAAO,KACL,MAAMiU,EAAathC,SAAOm/B,GAC1B5R,GAAmB,KACf4R,IAAYmC,EAAW5gC,UAAoC,eA7qMnE,0BA6qMsDW,SAA4B5N,GAAU,EAAO,8DAAgEA,OAC5J,CAAC0rC,KAER,CA2CEoC,CAAuBpC,GAClBA,GA5HP,SAA+B5jC,GAC7B,MAAMwwB,EAAWa,GAAY,cACvBhe,WACJA,EAAU8W,SACVA,EAAQ8b,gBACRA,EAAelO,2BACfA,EAA0B1C,wBAC1BA,EAAuBnZ,UACvBA,GACElc,EACEuM,EAAU5H,GAAQ,KAAO,CAC7BozB,6BACA1C,0BACAnZ,cACE,CAAC6b,EAA4B7b,EAAWmZ,IACtC8H,EAAentB,GAAY+tB,IAC/B,MAAM7zB,EAAK+7B,IAEX,OADC/7B,IAA8B,eAjnMnC,0BAinMsBpE,SAA4B5N,GAAU,EAAO,2CAA6CA,MAzChH,SAAwBmb,EAAYnJ,EAAI6zB,EAAe7tB,IACrD,MAAMg2B,EAAiBl9B,OAAOoB,iBAAiBF,GACzCxC,EAAYwC,EAAGC,wBACfyP,EAASzQ,GAAazB,EAAWw+B,GACjCz0B,EAAO3I,GAAW8Q,EAAQmkB,GAiBhC,MAPkB,CAChB1qB,aACAmO,YAXkB,CAClB5H,SACAsZ,QAAShpB,EAAGgpB,QAAQC,cACpBmI,QAAS4K,EAAe5K,SASxBpiB,WAPiB,CACjBpV,EAAG8V,EAAO3R,UAAUjB,MACpBzC,EAAGqV,EAAO3R,UAAUhB,QAMpB2S,SACAnI,OAGJ,CAoBW00B,CAAe9yB,EAAYnJ,EAAI6zB,IACrC,CAAC1qB,EAAY4yB,IACV5b,EAAQ1lB,GAAQ,KAAO,CAC3B6rB,WACAnd,aACA9G,UACA4wB,iBACE,CAAC9pB,EAAY8pB,EAAc5wB,EAASikB,IAClC4V,EAAe3hC,SAAO4lB,GACtBgc,EAAoB5hC,UAAO,GACjCoqB,GAA0B,KACxB1E,EAASxW,UAAU4c,SAAS6V,EAAajhC,SAClC,IAAMglB,EAASxW,UAAU8c,WAAW2V,EAAajhC,UACvD,CAACglB,EAASxW,YACbkb,GAA0B,KACxB,GAAIwX,EAAkBlhC,QAEpB,YADAkhC,EAAkBlhC,SAAU,GAG9B,MAAMyR,EAAOwvB,EAAajhC,QAC1BihC,EAAajhC,QAAUklB,EACvBF,EAASxW,UAAUzE,OAAOmb,EAAOzT,IAChC,CAACyT,EAAOF,EAASxW,WACtB,CA4FI2yB,CARqB3hC,GAAQ,KAAO,CAClC0O,aACA8W,WACA8b,gBAAiBN,EACjB5N,6BACA1C,0BACAnZ,cACE,CAAC7I,EAAY8W,EAAUwb,EAAQ5N,EAA4B1C,EAAyBnZ,KAG1F,MAAMqqB,EAAkB5hC,GAAQ,IAAMuX,EAAY,CAChDsqB,SAAU,EACVC,KAAM,SACN,mBAAoBtL,EACpB,oCAAqCpsB,EACrC,kCAAmCwf,EACnC5a,WAAW,EACX6mB,YAAa+I,IACX,KAAM,CAAChV,EAAW4M,EAA+BpsB,EAAamN,IAC5DwqB,EAAY12B,GAAYzC,IACR,aAAhBy2B,EAAOtkC,MAGNskC,EAAOzH,UAGe,cAAvBhvB,EAAMo5B,cAGVtM,EAASA,UAACuL,IACT,CAACA,EAA6B5B,IAC3Bt9B,EAAW/B,GAAQ,KACvB,MAAMm2B,EAzLV,SAAoBkJ,GAClB,MAAuB,aAAhBA,EAAOtkC,KAlChB,SAA0B0qB,GACxB,MACMrS,EADYqS,EAASpP,UACLpB,QAChBnR,OACJA,EAAMwQ,YACNA,EAAWsjB,SACXA,GACEnS,EACE4Y,EAAchrC,QAAQihB,GACtBlC,EAfyBqT,IACI,MAA/BA,EAASzT,mBACJyT,EAASzT,mBAEO,SAAlByT,EAASxP,KAWMgsB,CAAyBxc,GACzC6Y,EAAkBjrC,QAAQukC,GAC1BsK,EAAY5D,EAx3GZvd,EAACjd,EAAQu6B,KACb,MAAM8D,EAAYxgB,GAAO7d,GACzB,GAAKq+B,EAGL,OAAK9D,EAGE,GAAG8D,gBAFDA,GAk3GyBvgB,CAAgB9d,EAAQu6B,GAAezc,GAAkB9d,GAc7F,MAbc,CACZ4F,SAAU,QACVzH,IAAKmR,EAAI9P,UAAUrB,IACnBG,KAAMgR,EAAI9P,UAAUlB,KACpBggC,UAAW,aACX//B,MAAO+Q,EAAIrQ,UAAUV,MACrBC,OAAQ8Q,EAAIrQ,UAAUT,OACtB80B,WAAY8G,GAAsB9rB,EAAewlB,GACjDsK,YACAhC,QAAS9B,GAAmBC,EAAaC,GACzC+D,OAAQ/D,EA7CK,KADL,IA+CRgE,cAAe,OAGnB,CAQsCC,CAAiBlD,GAN9C,CACL6C,UAAWtgB,IAFY4gB,EAOwDnD,GALxCv7B,QACvCszB,WAAYoL,EAAUlD,+BAA4BvsC,EAAY,QAHlE,IAA2ByvC,CAQ3B,CAuLkBC,CAAWpD,GAYzB,MAVe,CACbqD,SAAU3B,EACV4B,eAAgB,CACd,gCAAiC/Y,EACjC,wBAAyBxf,EACzB+rB,QACAyM,gBAPoC,aAAhBvD,EAAOtkC,MAAuBskC,EAAOzH,SAAWmK,OAAYhvC,GASlF6uC,oBAGD,CAAChY,EAAWgY,EAAiBx3B,EAAai1B,EAAQ0C,EAAWhB,IAC1D8B,EAAS7iC,GAAQ,KAAO,CAC5BoK,YAAasE,EAAW1e,GACxB+K,KAAM2T,EAAW3T,KACjBlH,OAAQ,CACN8V,MAAO+E,EAAW/E,MAClBI,YAAa2E,EAAW3E,eAExB,CAAC2E,EAAW3E,YAAa2E,EAAW1e,GAAI0e,EAAW/E,MAAO+E,EAAW3T,OACzE,OAAOjK,UAAMC,cAAcD,EAAK,QAACgyC,SAAU,KAAMr5B,EAAS1H,EAAUs9B,EAAOE,SAAUsD,MAoMvF,SAASE,GAAiBv5B,GAGxB,OAFyBi1B,GAAmBF,IACHyE,kBACjBx5B,EAAMY,aAAgBZ,EAAMy1B,QAG7CnuC,UAAMC,cAAcyuC,GAAoBh2B,GAFtC,IAGX,CACA,SAASy5B,GAAgBz5B,GACvB,MAAM+N,EAA4C,kBAAzB/N,EAAM05B,iBAAgC15B,EAAM05B,eAC/D9P,EAA6B//B,QAAQmW,EAAM25B,mCAC3CzS,EAA0Br9B,QAAQmW,EAAMknB,yBAC9C,OAAO5/B,EAAAA,QAAMC,cAAcgyC,GAAkB38B,GAAS,CAAA,EAAIoD,EAAO,CAC/Dy1B,SAAS,EACT1nB,UAAWA,EACX6b,2BAA4BA,EAC5B1C,wBAAyBA,IAE7B,CAEA,MAAMpwB,GAAUqpB,GAAQ14B,GAAS04B,IAAS14B,EACpCmyC,GAAW9iC,GAAQ,UACnB+iC,GAAS/iC,GAAQ,QACjBgjC,GAAYhjC,GAAQ,WACpBijC,GAAWA,CAAC/W,EAAUt5B,IAAOA,EAAGs5B,EAASgX,YAActwC,EAAGs5B,EAASiX,WAEnEC,GAAsBn+B,IAC1B,MAAM4wB,EAAQ9xB,OAAOoB,iBAAiBF,GAChCinB,EAAW,CACfgX,UAAWrN,EAAMqN,UACjBC,UAAWtN,EAAMsN,WAEnB,OAAOF,GAAS/W,EAAU4W,KAAaG,GAAS/W,EAAU6W,KAgCtDM,GAAuBp+B,GACjB,MAANA,EACK,KAELA,IAAO4d,SAASmJ,KAlCGsX,MACvB,GAA6B,eA1/M/B,0BA0/MkBziC,SACd,OAAO,EAET,MAAMmrB,EAAOD,KACPwX,EAAO1gB,SAASgC,gBAEtB,GADC0e,GAA+CtwC,MAC3CmwC,GAAoBpX,GACvB,OAAO,EAET,MAAMwX,EAAYz/B,OAAOoB,iBAAiBo+B,GAK1C,OAxBwB3wC,EAwBCowC,KAxBX9W,EAoBO,CACnBgX,UAAWM,EAAUN,UACrBC,UAAWK,EAAUL,YAtBoBD,YAActwC,EAAGs5B,EAASiX,YA2B5C,eA3gN3B,0BA2gNctiC,UAA4BiG,GAAQ,6jBAFvC,EAzBI28B,IAACvX,EAAUt5B,GA4Cf0wC,GAAqBr+B,EAAK,KAE/BA,IAAO4d,SAASgC,gBACX,KAEJue,GAAoBn+B,GAGlBA,EAFEo+B,GAAqBp+B,EAAGmpB,eAKnC,IAiBIsV,GAAYz+B,IAAO,CACrBpG,EAAGoG,EAAG0+B,WACNrkC,EAAG2F,EAAG2+B,YAGR,MAAMC,GAAa5+B,KACZA,IAIkB,UADTlB,OAAOoB,iBAAiBF,GAC5BmE,UAGHy6B,GAAW5+B,EAAGmpB,gBA8IjB0V,GAAY,CAChBnhB,SAAS,GAELohB,GAAU,CACdphB,SAAS,GAEX,IAAIqhB,GAAqB18B,GAAWA,EAAQo0B,yBAA2BoI,GAAYC,GAEnF,MAAME,GAA+B9e,GAAYA,GAAYA,EAAS+e,IAAIC,mBAAqB,KAgJ/F,SAASC,KAAQ,CACjB,MAAMC,GAAQ,CACZtiC,MAAO,EACPC,OAAQ,EACRW,OA1iNgB,CAChBhB,IAAK,EACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,IAyoNR,IAAIwiC,GAAgB9zC,EAAK,QAAC+zC,KAvDNr7B,IAClB,MAAMs7B,EAAsBhlC,SAAO,MAC7BilC,EAA2B15B,GAAY,KACtCy5B,EAAoBtkC,UAGzB4jB,aAAa0gB,EAAoBtkC,SACjCskC,EAAoBtkC,QAAU,OAC7B,KACGwkC,QACJA,EAAOpC,gBACPA,EAAeqC,QACfA,EAAOrb,UACPA,GACEpgB,GACG07B,EAAwBC,GAA6B10C,EAAQA,SAAmB,SAAlB+Y,EAAMw7B,SAC3EjlC,EAAAA,UAAU,IACHmlC,EAGW,SAAZF,GACFD,IACAI,GAA0B,GACnBT,IAELI,EAAoBtkC,QACfkkC,IAETI,EAAoBtkC,QAAU2jB,WAAW,KACvC2gB,EAAoBtkC,QAAU,KAC9B2kC,GAA0B,KAErBJ,GAdEL,GAeR,CAACM,EAASE,EAAwBH,IACrC,MAAMK,EAAkB/5B,GAAYzC,IACP,WAAvBA,EAAMo5B,eAGVY,IACgB,UAAZoC,GACFC,MAED,CAACD,EAASC,EAASrC,IAChBzM,EApESkP,GACfH,yBACAroB,cACAmoB,cAEA,MAAMj0B,EAtBQu0B,GACdJ,yBACAroB,cACAmoB,aAEIE,GAGY,UAAZF,EAFKL,GAKF,CACLriC,OAAQua,EAAY5H,OAAOlS,UAAUT,OACrCD,MAAOwa,EAAY5H,OAAOlS,UAAUV,MACpCY,OAAQ4Z,EAAY5H,OAAOhS,QAQhBqiC,CAAQ,CACnBJ,yBACAroB,cACAmoB,YAEF,MAAO,CACLrO,QAAS9Z,EAAY8Z,QACrByL,UAAW,aACX//B,MAAO0O,EAAK1O,MACZC,OAAQyO,EAAKzO,OACboC,UAAWqM,EAAK9N,OAAOhB,IACvB0C,YAAaoM,EAAK9N,OAAOf,MACzB0C,aAAcmM,EAAK9N,OAAOd,OAC1B0C,WAAYkM,EAAK9N,OAAOb,KACxBmjC,WAAY,IACZC,SAAU,IACVlD,cAAe,OACflL,WAAwB,SAAZ4N,EAAqB1jB,GAAYzE,YAAc,OA8C/CwoB,CAAS,CACrBH,yBACAF,QAASx7B,EAAMw7B,QACfnoB,YAAarT,EAAMqT,cAErB,OAAO/rB,EAAK,QAACC,cAAcyY,EAAMqT,YAAY0R,QAAS,CACpD4H,QACA,kCAAmCvM,EACnCgZ,gBAAiBwC,EACjB7X,IAAK/jB,EAAMk5B,aAKf,SAAS+C,GAAUx0C,GACjB,MAAwB,kBAAVA,CAChB,CACA,SAASy0C,GAAUrqC,EAAMsqC,GACvBA,EAAOx9B,QAAQy9B,GAASA,EAAMvqC,GAChC,CACA,MAAMwM,GAAS,CAAC,UAAkB2B,MAChCA,IAECA,EAAMO,cAAuC,eA79NhD,0BA69NmC5I,SAA4B5N,GAAU,EAAO,2CAA6CA,MAC5F,iBAAtBiW,EAAMO,cAAqD,eA99NtE,0BA89NyD5I,SAA4B5N,GAAU,EAAO,kEAAkEiW,EAAMO,gBAAkBxW,KAChM,EAAG,UAAiBiW,MAClBA,IAECi8B,GAAUj8B,EAAMq8B,kBAA2C,eAl+N9D,0BAk+NiD1kC,SAA4B5N,GAAU,EAAO,oCAAsCA,MACjIkyC,GAAUj8B,EAAM8O,oBAA6C,eAn+NhE,0BAm+NmDnX,SAA4B5N,GAAU,EAAO,sCAAwCA,MACrIkyC,GAAUj8B,EAAMs8B,2BAAoD,eAp+NvE,0BAo+N0D3kC,SAA4B5N,GAAU,EAAO,6CAA+CA,KACtJ,EAAG,UAAawyC,gBACdA,IAEAvH,GAAqBuH,IACvB,GACMC,GAAW,CAAC,UAAqBx8B,MACrCA,EAAKy8B,kBACLA,IAEKz8B,EAAMqT,cAGCopB,KAIa,eAr/N3B,0BAq/Nc9kC,UAA4BiG,GAAQ,gDACLoC,EAAMO,mRAMnD,GACMm8B,GAAU,CAAC,UAAkB18B,MACjCA,IAECA,EAAM28B,cAAuC,eAhgOhD,0BAggOmChlC,SAA4B5N,GAAU,EAAO,wEAA0EA,KAC1J,EAAG,UAA0B0yC,kBAC3BA,IAEEA,MAA+C,eApgOnD,0BAogOsC9kC,SAA4B5N,GAAU,EAAO,mDAAqDA,KACxI,GAaA,MAAM6yC,WAAqBt1C,EAAK,QAACu1C,cAC/BzxC,WAAAA,IAAeyG,GACboN,SAASpN,GACTvH,KAAK8iB,MAAQ,CACX0sB,UAAWjwC,QAAQS,KAAK0V,MAAM88B,IAC9Bh2C,KAAMwD,KAAK0V,MAAM88B,GACjBtB,QAASlxC,KAAK0V,MAAM4I,eAAiBte,KAAK0V,MAAM88B,GAAK,OAAS,QAEhExyC,KAAKmxC,QAAU,KACc,UAAvBnxC,KAAK8iB,MAAMouB,SAGflxC,KAAKuV,SAAS,CACZi6B,WAAW,IAGjB,CACA,+BAAOiD,CAAyB/8B,EAAOoN,GACrC,OAAKpN,EAAM4I,cAOP5I,EAAM88B,GACD,CACLhD,WAAW,EACXhzC,KAAMkZ,EAAM88B,GACZtB,QAAS,QAGTpuB,EAAM0sB,UACD,CACLA,WAAW,EACXhzC,KAAMsmB,EAAMtmB,KACZ00C,QAAS,SAGN,CACL1B,WAAW,EACX0B,QAAS,QACT10C,KAAM,MAvBC,CACLgzC,UAAWjwC,QAAQmW,EAAM88B,IACzBh2C,KAAMkZ,EAAM88B,GACZtB,QAAS,OAsBf,CACAz7B,MAAAA,GACE,OAAKzV,KAAK8iB,MAAM0sB,UAQTxvC,KAAK0V,MAAMC,SALD,CACfw7B,QAASnxC,KAAKmxC,QACd30C,KAAMwD,KAAK8iB,MAAMtmB,KACjB00C,QAASlxC,KAAK8iB,MAAMouB,UALb,IAQX,EAgHF,MAAMwB,GAAe,CACnBvwB,KAAM,WACNlb,KAAM,UACNvL,UAAW,WACXq2C,gBAAgB,EAChBvtB,kBAAkB,EAClBwtB,yBAAyB,EACzBK,YAAa,KACbM,qBAZF,WAEE,OADCtjB,SAASmJ,OAAgC,eAtrO5C,0BAsrO+BnrB,SAA4B5N,GAAU,EAAO,8BAAgCA,MACnG4vB,SAASmJ,IAClB,GAWMoa,GAA+B3G,IACnC,IAGI4G,EAHAC,EAAc,IACb7G,GAGL,IAAK4G,KAAkBH,QACYzzC,IAA7BgtC,EAAS4G,KACXC,EAAc,IACTA,EACHD,CAACA,GAAiBH,GAAaG,KAIrC,OAAOC,GAEHC,GAAiBA,CAAC9rC,EAAM2e,IAAa3e,IAAS2e,EAAShM,UAAU3S,KACjE+rC,GAAeA,CAACptB,EAAUP,IAAeA,EAAWvK,WAAW8K,EAAS1K,UAAUhf,IA+GlF+2C,GAAqBtH,GA9GCuH,KAC1B,MAAMC,EAAoB,CACxBpqB,YAAa,KACbqqB,0BAA0B,EAC1B3H,SAAU,CACR4H,gBAAgB,EAChBC,iBAAkB,KAClBC,qBAAsB,KACtBC,oBAAoB,GAEtBC,SAAU,MAENC,EAAuB,IACxBP,EACHC,0BAA0B,GAEtBO,EAAqB15B,GAAWW,IAAe,CACnDtE,YAAasE,EAAW1e,GACxB+K,KAAM2T,EAAW3T,KACjBlH,OAAQ,CACN8V,MAAO+E,EAAW/E,MAClBI,YAAa2E,EAAW3E,gBAGtB29B,EAAc35B,GAAW,CAAC/d,EAAIunB,EAAWowB,EAA2BC,EAAyBniB,EAAU0gB,KAC3G,MAAM/7B,EAAcqb,EAAS/W,WAAW1e,GAExC,GADey1B,EAAS/W,WAAW3E,cAAgB/Z,EACvC,CACV,MAAMu3C,EAAWpB,EAAc,CAC7B58B,OAAQ48B,EACR1gB,SAAUgiB,EAAmBhiB,EAAS/W,aACpC,KAOJ,MAAO,CACLmO,YAAa4I,EAAS5I,YACtBqqB,0BAA0B,EAC1B3H,SATe,CACf4H,eAAgBQ,EAChBP,iBAAkBO,EAA4Bv9B,EAAc,KAC5Di9B,qBAAsBj9B,EACtBk9B,oBAAoB,GAMpBC,WAEJ,CACA,OAAKhwB,EAGAqwB,EASE,CACL/qB,YAAa4I,EAAS5I,YACtBqqB,0BAA0B,EAC1B3H,SATe,CACf4H,eAAgBQ,EAChBP,iBAAkBh9B,EAClBi9B,qBAAsB,KACtBC,oBAAoB,GAMpBC,SAAU,MAZHN,EAHAO,IA2DX,MAzCiBnnC,CAACuW,EAAOmpB,KACvB,MAAM8H,EAA2BnB,GAA6B3G,GACxD/vC,EAAK63C,EAAyB99B,YAC9BhP,EAAO8sC,EAAyB9sC,KAChCwc,GAAaswB,EAAyBhC,eACtCM,EAAc0B,EAAyB1B,YAC7C,GAAIr9B,GAAW8N,GAAQ,CACrB,MAAM8C,EAAW9C,EAAM8C,SACvB,IAAKmtB,GAAe9rC,EAAM2e,GACxB,OAAO8tB,EAET,MAAM/hB,EAAWqhB,GAAaptB,EAAU9C,EAAMuC,YACxCguB,EAAiBzwB,GAAkBE,EAAM1H,UAAYlf,EAC3D,OAAO03C,EAAY13C,EAAIunB,EAAW4vB,EAAgBA,EAAgB1hB,EAAU0gB,EAC9E,CACA,GAAoB,mBAAhBvvB,EAAMC,MAA4B,CACpC,MAAMyE,EAAY1E,EAAM0E,UACxB,IAAKurB,GAAe9rC,EAAMugB,EAAU5B,UAClC,OAAO8tB,EAET,MAAM/hB,EAAWqhB,GAAaxrB,EAAU5B,SAAU9C,EAAMuC,YACxD,OAAOuuB,EAAY13C,EAAIunB,EAAWunB,GAA4BxjB,EAAU/e,UAAYvM,EAAI0mB,GAAkB4E,EAAUpM,UAAYlf,EAAIy1B,EAAU0gB,EAChJ,CACA,GAAoB,SAAhBvvB,EAAMC,OAAoBD,EAAM0E,YAAc1E,EAAM2E,YAAa,CACnE,MAAMD,EAAY1E,EAAM0E,UACxB,IAAKurB,GAAe9rC,EAAMugB,EAAU5B,UAClC,OAAO8tB,EAET,MAAMxqB,EAAUtG,GAAkB4E,EAAUpM,UAAYlf,EAClD83C,EAAez0C,QAAQioB,EAAUpM,OAAOC,IAAmC,YAA7BmM,EAAUpM,OAAOC,GAAGpU,MAExE,OAAIiiB,EACK8qB,EAAeb,EAAoBO,EAF7BlsB,EAAU5B,SAAShM,UAAU1d,KAAOA,EAK1Ci3C,EAEFO,CACT,CACA,OAAOA,IAIgB,CACzBO,wBAtzJ8B1sC,IAAS,CACvCN,KAAM,6BACN2gB,QAASrgB,KAszJiE,CAAC2sC,EAAYC,EAAelI,KAC/F,IACF2G,GAA6B3G,MAC7BiI,KACAC,IAEJ,CACDnR,QAAS3K,GACT2U,mBAAoBjC,IARKY,CAtPTj2B,IAChB,MAAMs0B,EAAaa,aAAW/R,IAC7BkR,IAAsC,eA9kOzC,0BA8kO4B38B,SAA4B5N,GAAU,EAAO,8BAAgCA,MACvG,MAAMq2B,UACJA,EAASjT,kBACTA,GACEmnB,EACEoK,EAAepoC,SAAO,MACtBqoC,EAAiBroC,SAAO,OACxB2J,SACJA,EAAQM,YACRA,EAAWhP,KACXA,EAAIkb,KACJA,EAAIzmB,UACJA,EAASs2C,wBACTA,EAAuBD,eACvBA,EAAcvtB,iBACdA,EAAgBinB,SAChBA,EAAQgI,SACRA,EAAQQ,wBACRA,EAAuBtB,qBACvBA,GACEj9B,EACEu8B,EAAkB16B,GAAY,IAAM68B,EAAa1nC,QAAS,IAC1D4nC,EAAkB/8B,GAAY,CAACpa,EAAQ,QAC3Ci3C,EAAa1nC,QAAUvP,GACtB,IACGg1C,EAAoB56B,GAAY,IAAM88B,EAAe3nC,QAAS,IAC9D6nC,EAAoBh9B,GAAY,CAACpa,EAAQ,QAC7Ck3C,EAAe3nC,QAAUvP,GACxB,IApGL,IAAuBoK,IAqGP,CACZmO,QACAu8B,kBACAE,qBAvGF5Y,GAAmB,KACjBqY,GAAUrqC,EAAMwM,IACQ,aAApBxM,EAAKmO,MAAMyM,MACbyvB,GAAUrqC,EAAM2qC,IAEM,YAApB3qC,EAAKmO,MAAMyM,MACbyvB,GAAUrqC,EAAM6qC,MAmGpB,MAAMoC,EAA6Bj9B,GAAY,KACzCsL,KACFoxB,EAAwB,CACtBvxB,UAAW4O,QAGd,CAACzO,EAAmBoxB,KA1ZzB,SAA+B1sC,GAC7B,MAAMktC,EAAmBzoC,SAAO,MAC1Bg+B,EAAaW,GAAmB7R,IAChCf,EAAWa,GAAY,cACvBlH,SACJA,EAAQqT,QACRA,GACEiF,EACEzJ,EAAc/G,GAAYjyB,GAC1BqT,EAAa1O,GAAQ,KAAO,CAChChQ,GAAIqL,EAAK0O,YACThP,KAAMM,EAAKN,KACXkb,KAAM5a,EAAK4a,OACT,CAAC5a,EAAK0O,YAAa1O,EAAK4a,KAAM5a,EAAKN,OACjCytC,EAAyB1oC,SAAO4O,GAChC+5B,EAAuBzoC,GAAQ,IAAM+N,GAAW,CAAC5O,EAAGS,KACvD2oC,EAAiB/nC,UAAmC,eA5uNzD,0BA4uN4CW,SAA4B5N,GAAU,EAAO,wCAA0CA,MAK/HslC,EAAQvY,sBAAsB5R,EAAW1e,GAJ1B,CACbmP,IACAS,QAGA,CAAC8O,EAAW1e,GAAI6oC,IACd6P,EAAmBr9B,GAAY,KACnC,MAAMoa,EAAW8iB,EAAiB/nC,QAClC,OAAKilB,GAAaA,EAAS+e,IAAIC,kBAGxBT,GAAUve,EAAS+e,IAAIC,mBAFrBl5B,IAGR,IACGo9B,EAAet9B,GAAY,KAC/B,MAAMjH,EAASskC,IACfD,EAAqBrkC,EAAOjF,EAAGiF,EAAOxE,IACrC,CAAC8oC,EAAkBD,IAChBG,EAAuB5oC,GAAQ,IAAMgjB,GAAQ2lB,GAAe,CAACA,IAC7DE,EAAkBx9B,GAAY,KAClC,MAAMoa,EAAW8iB,EAAiB/nC,QAC5B2T,EAAUowB,GAA6B9e,GAC3CA,GAAYtR,IAAoC,eAlwNtD,0BAkwNyChT,SAA4B5N,GAAU,EAAO,iDAAmDA,MACrHkyB,EAASyT,cACb8C,yBACV2M,IAGFC,KACC,CAACA,EAAsBD,IACpBtP,EAA6BhuB,GAAY,CAAC+tB,EAAcxxB,KAC1D2gC,EAAiB/nC,UAAmC,eA3wN1D,0BA2wN6CW,SAA4B5N,GAAU,EAAO,wDAA0DA,MAChJ,MAAMkb,EAAW4lB,EAAY7zB,QACvB+sB,EAAM9e,EAASs3B,kBACpBxY,IAA+B,eA9wNpC,0BA8wNuBpsB,SAA4B5N,GAAU,EAAO,0CAA4CA,MAC5G,MAAMixC,EArMD,CACLC,kBAHwBd,GADf5vC,EAwMUw5B,GAnMnB1R,cAHoBsoB,GAAWpwC,IAFtBA,MAyMT,MAAM0xB,EAAW,CACf8H,MACA7e,aACA81B,MACAtL,cAAetxB,GAEjB2gC,EAAiB/nC,QAAUilB,EAC3B,MAAMpP,EA/GSmiB,GACjBjL,MACA7e,aACA81B,MACApL,eACA5pC,YACAq2C,iBACAvtB,mBACA9L,wBAEA,MAAMi4B,EAAoBD,EAAIC,kBACxBxvB,EAtCU6zB,EAACC,EAAWtE,KAC5B,MAAM9a,EAAOrkB,GAAOyjC,GACpB,IAAKtE,EACH,OAAO9a,EAET,GAAIof,IAActE,EAChB,OAAO9a,EAET,MAAM1nB,EAAM0nB,EAAKpmB,WAAWtB,IAAMwiC,EAAkBP,UAC9C9hC,EAAOunB,EAAKpmB,WAAWnB,KAAOqiC,EAAkBR,WAShDlhC,EAAYP,GANC,CACjBP,MACAC,MAHYE,EAAOqiC,EAAkBzf,YAIrC7iB,OALaF,EAAMwiC,EAAkB1f,aAMrC3iB,QAEmCunB,EAAKxmB,QAO1C,OANeL,GAAU,CACvBC,YACAE,OAAQ0mB,EAAK1mB,OACbE,OAAQwmB,EAAKxmB,OACbE,QAASsmB,EAAKtmB,WAeDylC,CAAUvb,EAAKkX,GACxB33B,EAAO3I,GAAW8Q,EAAQmkB,GAC1BjlB,EAAU,MACd,IAAKswB,EACH,OAAO,KAET,MAAMuE,EAAc1jC,GAAOm/B,GACrBwE,EAAa,CACjBlkB,aAAc0f,EAAkB1f,aAChCC,YAAayf,EAAkBzf,aAEjC,MAAO,CACL/P,OAAQ+zB,EACRl8B,KAAM3I,GAAW6kC,EAAa5P,GAC9Bh1B,OAAQ4/B,GAAUS,GAClBwE,aACAz8B,oBAEH,EAhBe,GAiBV6J,EAtHoB6yB,GAC1Bx6B,aACA6I,YACAe,mBACAuD,gBACArsB,YACAylB,SACAnI,OACAqH,cAEA,MAAM5H,EAAQ,MACZ,IAAK4H,EACH,OAAO,KAET,MAAM80B,WACJA,EACAh0B,OAAQ+zB,GACN70B,EACEqC,EAAYsO,GAAa,CAC7BC,aAAckkB,EAAWlkB,aACzBC,YAAaikB,EAAWjkB,YACxB1iB,OAAQ0mC,EAAYzlC,WAAWjB,OAC/BD,MAAO2mC,EAAYzlC,WAAWlB,QAEhC,MAAO,CACLuK,cAAeuH,EAAQrH,KAAKxJ,UAC5B0lC,cACAC,aACAz8B,kBAAmB2H,EAAQ3H,kBAC3BpI,OAAQ,CACN6G,QAASkJ,EAAQ/P,OACjB5D,QAAS2T,EAAQ/P,OACjBuI,IAAK6J,EACLrJ,KAAM,CACJlc,MAAOsa,GACP6B,aAAc7B,KAIrB,EA7Ba,GA8BRyB,EAAqB,aAAdxd,EAA2BqhB,GAAWM,GAkBnD,MAXkB,CAChBzC,aACA4J,mBACAuD,gBACA7O,OACAuK,YACAtC,SACAnI,OACAP,QACAG,QAfcG,GAAW,CACzBC,OACAC,gBAAiB,KACjBC,OACAT,YAyEgB28B,CAAsB,CACtCx6B,aACA6I,WAAYsuB,EACZvtB,mBACAuD,cAAe2oB,EAAI3oB,cACnBrsB,YACAylB,SACAnI,OACAqH,YAEF,OAAOkC,GAuEamiB,CAAa,CAC7BjL,MACA7e,aACA81B,MACApL,eACA5pC,UAAWif,EAASjf,UACpBq2C,eAAgBp3B,EAASo3B,eACzBvtB,iBAAkB7J,EAAS6J,iBAC3B9L,mBAAoBiC,EAASq3B,0BAEzBl4B,EAAa42B,EAAIC,kBAQvB,OAPI72B,IACFA,EAAW6c,aAAaZ,GAAgBD,UAAWkU,EAAWlU,WAC9Dhc,EAAW5F,iBAAiB,SAAU6gC,EAAiBvE,GAAmB7e,EAASyT,gBACtD,eAryNnC,0BAqyNsB/3B,UA9PeyM,KAC9BA,GAGuB+1B,GAAqB/1B,EAAW8gB,gBAInC,eA/iN3B,0BA+iNcvtB,UAA4BiG,GAAQ,8TAuP1C+hC,CAA+Bv7B,IAG5ByI,GACN,CAACynB,EAAWlU,UAAWlb,EAAYm6B,EAAiBxU,IACjDoE,EAAyBptB,GAAY,KACzC,MAAMoa,EAAW8iB,EAAiB/nC,QAC5B2T,EAAUowB,GAA6B9e,GAE7C,OADEA,GAAYtR,IAAoC,eA9yNtD,0BA8yNyChT,SAA4B5N,GAAU,EAAO,mFAAqFA,MAChKywC,GAAU7vB,IAChB,IACGolB,EAAcluB,GAAY,KAC9B,MAAMoa,EAAW8iB,EAAiB/nC,QACjCilB,IAAoC,eAnzNzC,0BAmzN4BtkB,SAA4B5N,GAAU,EAAO,wCAA0CA,MAC/G,MAAM4gB,EAAUowB,GAA6B9e,GAC7C8iB,EAAiB/nC,QAAU,KACtB2T,IAGLy0B,EAAqB1iC,SACrBiO,EAAQi1B,gBAAgBvf,GAAgBD,WACxCzV,EAAQjM,oBAAoB,SAAU2gC,EAAiBvE,GAAmB7e,EAASyT,kBAClF,CAAC2P,EAAiBD,IACfxkC,EAASiH,GAAYrH,IACzB,MAAMyhB,EAAW8iB,EAAiB/nC,QACjCilB,IAAoC,eA/zNzC,0BA+zN4BtkB,SAA4B5N,GAAU,EAAO,uCAAyCA,MAC9G,MAAM4gB,EAAUowB,GAA6B9e,GAC5CtR,IAAmC,eAj0NxC,0BAi0N2BhT,SAA4B5N,GAAU,EAAO,wDAA0DA,MAC9H4gB,EAAQ+vB,WAAalgC,EAAOpE,EAC5BuU,EAAQ8vB,YAAcjgC,EAAO7E,GAC5B,IACGuJ,EAAY1I,GAAQ,KACjB,CACLq5B,6BACAZ,yBACAc,cACAn1B,WAED,CAACm1B,EAAaF,EAA4BZ,EAAwBr0B,IAC/DshB,EAAQ1lB,GAAQ,KAAO,CAC3B6rB,WACAnd,aACAhG,cACE,CAACA,EAAWgG,EAAYmd,IAC5B3B,GAA0B,KACxBse,EAAuBhoC,QAAUklB,EAAMhX,WACvC8W,EAAS9X,UAAUke,SAASlG,GACrB,KACD6iB,EAAiB/nC,UACM,eAv1NjC,0BAu1NoBW,UAA4BiG,GAAQ,8EAChDmyB,KAEF/T,EAAS9X,UAAUoe,WAAWpG,KAE/B,CAAChd,EAAWgG,EAAY6qB,EAAa7T,EAAOmT,EAASrT,EAAS9X,YACjEwc,GAA0B,KACnBqe,EAAiB/nC,SAGtBq4B,EAAQtY,yBAAyBioB,EAAuBhoC,QAAQxQ,IAAKqL,EAAKwqC,iBACzE,CAACxqC,EAAKwqC,eAAgBhN,IACzB3O,GAA0B,KACnBqe,EAAiB/nC,SAGtBq4B,EAAQrY,gCAAgCgoB,EAAuBhoC,QAAQxQ,GAAIqL,EAAKid,mBAC/E,CAACjd,EAAKid,iBAAkBugB,GAC7B,CA8QEwQ,CAAsB,CACpBt/B,cACAhP,OACAkb,OACAzmB,YACAq2C,iBACAvtB,mBACAwtB,0BACAC,oBAEF,MAAMlpB,EAAc7c,GAAQ,IAAMlP,EAAAA,QAAMC,cAAcq1C,GAAc,CAClEE,GAAI98B,EAAMqT,YACVzK,cAAe5I,EAAM09B,0BACpB,EACDjC,UACA30C,OACA00C,aACIl0C,EAAK,QAACC,cAAc6zC,GAAe,CACvC/nB,YAAavsB,EACb20C,QAASA,EACTvC,SAAU2F,EACVrD,QAASA,EACTpb,UAAWA,EACXgZ,gBAAiB0F,KACd,CAAC1e,EAAW0e,EAA4B9+B,EAAMqT,YAAarT,EAAM09B,yBAA0BmB,IAC1FtmC,EAAW/B,GAAQ,KAAO,CAC9B0iC,SAAU0F,EACVvrB,cACAysB,eAAgB,CACd,wBAAyBv/B,EACzB,gCAAiC6f,KAEjC,CAACA,EAAW7f,EAAa8S,EAAaurB,IACpCpF,EAAkBuE,EAAWA,EAAS9hB,SAASrb,YAAc,KAC7Dm/B,EAAmBvpC,GAAQ,KAAO,CACtC+J,cACAhP,OACAioC,oBACE,CAACj5B,EAAai5B,EAAiBjoC,IAmBnC,OAAOjK,UAAMC,cAAcwtC,GAAiBP,SAAU,CACpD/sC,MAAOs4C,GACN9/B,EAAS1H,EAAUw9B,GApBtB,WACE,IAAKgI,EACH,OAAO,KAET,MAAM9hB,SACJA,EAAQlc,OACRA,GACEg+B,EACEltC,EAAOvJ,EAAAA,QAAMC,cAAcgyC,GAAkB,CACjD34B,YAAaqb,EAASrb,YACtBT,MAAO8b,EAAS5xB,OAAO8V,MACvBs1B,SAAS,EACT1nB,WAAW,EACXmZ,yBAAyB,EACzB0C,4BAA4B,GAC3B,CAACoW,EAAmBC,IAAsBlgC,EAAOigC,EAAmBC,EAAmBhkB,IAC1F,OAAOikB,EAAQ,QAACC,aAAatvC,EAAMosC,IACrC,CAGiCmD,aCjrOnCC,GCAAA,GCIaC,KAAiBC,OAC3BC,EAAkBA,mBAACC,SAAU,wBAAuBF,GACpDC,EAAAA,mBAAmBE,YAAa,2BAA0BH,GAC1DC,qBAAmBG,kBAAmB,iCAAgCJ,IAoCnEK,GAAmB,aAEZC,GAAyB,SAACjgC,GAAiC,OAAAA,EAAYkgC,WAAWF,GAAiB,EAEnGG,GAAgB,SAACngC,GAAmB,OAC/CigC,GAAuBjgC,GAAeA,EAAYzG,MAAMymC,IAA2BhgC,CAAW,EF9C1FogC,KAAcX,GAAA,CAAA,GACjBG,EAAAA,mBAAmBC,SAAU,eAAcJ,GAC3CG,EAAAA,mBAAmBE,YAAa,aAAYL,GAC5CG,EAAAA,mBAAmBG,kBAAmB,eAAcN,IAWjDplC,GAAyC,CAC7CgmC,WAAY,CACVC,IAAK,SAACC,GAAU,OAAAA,EAAMv+B,QAAQ,GAAI,GAEpC4d,SAAU,CACRnlB,WAAY,SAAC8lC,GAAK,OAAKA,EAAMv+B,QAAQ,EAAE,GAEzCw+B,cAAe,CACbhmC,aAAc,SAAC+lC,GAAK,OAAKA,EAAMv+B,QAAQ,GAAI,EAC3Cy+B,WAAY,QAEdC,cAAe,CACbC,SAAU,SAACJ,GAAK,OAAKA,EAAMK,WAAWC,QAAQ,GAAG,EACjDC,MAAO,gBAETC,eAAgB,CACdJ,SAAU,SAACJ,GAAU,OAAAA,EAAMK,WAAWC,QAAQ,GAAG,EACjDJ,WAAY,IACZK,MAAO,gBAETE,mBAAoB,CAClB7F,WAAY,EACZljC,MAAO,GACPC,OAAQ,GACR+oC,aAAc,MACdC,gBAAiB,gBAEnBC,aAAc,CACZ7mC,UAAW,SAACimC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAE,GAExCnN,UAAW,CACToD,MAAO,OACPC,OAAQ,MACRW,OAAQ,SAAC0nC,UAAUA,EAAMv+B,QAAQ,EAAG,EAAE,EACtCo/B,WAAY,yFGZVC,GAA0C,SAA/Br7C,OAZT2D,EAEA23C,EACAC,EACAC,EHtBoCC,EG8BOC,EAAM17C,EAAN07C,OAAQx7C,EAAIF,EAAJE,KAAMy7C,EAAU37C,EAAV27C,WAAYC,EAAS57C,EAAT47C,UAAWC,EAAmB77C,EAAnB67C,oBAC9Er7C,EAAMC,EAAcA,iBAApBD,EACRJ,EAAsCC,EAAQA,SAAgB,MAAvDy7C,EAAW17C,EAAE27C,GAAAA,EAAc37C,KAClC47C,EAA4D37C,EAAAA,SAAwB,MAA7E47C,EAAsBD,EAAA,GAAEE,EAAyBF,EACxD,GAAAG,EAAkC97C,EAAAA,UAAS,GAApC+7C,EAASD,EAAEE,GAAAA,EAAYF,EAAA,GAExBzV,EDzB2B,SAACxmC,EAAkBw7C,GACpD,IAAAY,IAAgCC,EAAhCD,EAAAE,EAAiBt8C,EAAKu8C,cAAUF,EAAAD,KAAAI,MAAE,CAAvB,IAAAC,EAAEJ,EAAA17C,MACL+7C,EAAWD,EAAGE,kBAAkBx/C,KAAK,SAAC8M,UAAOA,EAAG2yC,KAAKl9C,KAAO87C,CAAM,GACxE,GAAIkB,EACF,MAAO,CACLG,eAAgBH,EAASG,eACzBC,sBAAuBL,EAAGM,UAAU7/C,KAG1C,CAEA,IAAA,IAAgC8/C,EAAhCC,EAAAX,EAAiBt8C,EAAKu8C,cAAUS,EAAAC,KAAAT,MAAE,KAAvBC,EAAEO,EAAAr8C,MAEX,GADkB87C,EAAGS,mBAAmB//C,KAAK,SAAC8M,GAAO,OAAAA,EAAG2yC,KAAKl9C,KAAO87C,IAAWvxC,EAAGkzC,gBAAgB,GAEhG,MAAO,CACLC,aAAa,EACbC,mBAAoBZ,EAAGM,UAG7B,CAEA,MAAO,CAAE,CACX,CCGkBO,CAAoBt9C,EAAMw7C,GACpC+B,EACJ/W,EAAQ4W,aACR5W,EAAQqW,iBAAmBnD,EAAkBA,mBAACC,SAC9CnT,EAAQqW,iBAAmBnD,EAAAA,mBAAmBG,iBAkChD,OA3BApqC,EAAAA,UAAU,WACH8tC,GAAc9B,EAAW+B,aAE9BrB,GAAa,GACRV,EAAW+B,WACbC,eAAe,CACd7uC,OAAQ,CACN8uC,WAAYlC,EACZmC,YAAajC,EAAUn+C,MAAMmC,GAC7Bk+C,iBAAkB,UAGrBC,KAAK,SAAAlzC,GAAG,IAAA8yC,EAAc9yC,EAAd8yC,eACP,GAAIA,EAAe1+C,OAAS,EAAG,CAC7B,IAAM++C,EAASL,EAAeA,EAAe1+C,OAAS,GACtD88C,EAAeiC,EAAO/gD,WACtB,IAAM0/C,EAAKz8C,EAAKu8C,WAAWp/C,KAAK,SAAC4gD,GAAC,OAAKA,EAAEhB,UAAUr9C,KAAOo+C,EAAOE,WAAW,GACxEvB,GACFT,EAA0BS,EAAGM,UAAU7/C,KAE3C,CAEF,GACM,MAAC,WAAe,GAAC,QACd,WAAM,OAAAi/C,GAAa,EAAM,GACtC,EAAG,CAACX,EAAQ+B,EAAW9B,EAAW+B,WAAY9B,EAAUn+C,MAAMmC,GAAIM,EAAKu8C,aAGrE/7C,wBAACy9C,EAAAA,MAAK,CAACp9C,GAAIsT,GAAOgmC,YAChB35C,EAAA,QAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOulB,UACdl5B,EAAA,QAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,mBACzCE,EAAA,QAAAC,cAACw9C,EAAAA,MAAK,CAAC/+C,UAAU,MAAM4c,QAAS,EAAGqiC,WAAW,UAC3C3X,EAAQ4W,aAAe58C,wBAACI,EAAAA,IAAG,CAACw9C,MAAO99C,EAAE,uBAAwBO,GAAIsT,GAAO2mC,sBACvEtU,EAAQ4W,aAAe5W,EAAQqW,gBAC/Br8C,EAAC,QAAAC,cAAAG,MACC,CAAAw9C,MAAO99C,EAAEk5C,GAAkBhT,EAAQqW,iBACnCh8C,IHnF8B06C,EGmFE/U,EAAQqW,eHnFsC,CAC1F5H,WAAY,EACZljC,MAAO,GACPC,OAAQ,GACR+oC,aAAc,MACdC,gBAAiBd,GAAeqB,OGiFxB/6C,EAAA,QAAAC,cAACy9C,aAAU,CAACr9C,GAAIsT,GAAOqmC,eACpBhU,EAAQ4W,YAAc98C,EAAE,uBA3EZ,SAACA,EAA4Bi7C,GACpD,OACOj7C,EADFi7C,EACI/B,GAAkB+B,GADL,qBAExB,CAwE8D8C,CAAiB/9C,EAAGkmC,EAAQqW,mBAKnFrW,EAAQ4W,aAAe5W,EAAQ6W,oBAC9B78C,EAAA,QAAAC,cAACD,EAAK,QAACgyC,SAAQ,KACbhyC,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAA,QAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOulB,UACdl5B,EAAAA,QAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,sBACzCE,EAAA,QAAAC,cAACy9C,EAAUA,WAAC,CAAAr9C,GAAIsT,GAAOqmC,eAAgBhU,EAAQ6W,mBAAmBngD,QAKvEspC,EAAQsW,uBACPt8C,EAAAA,QAACC,cAAAD,EAAK,QAACgyC,SAAQ,KACbhyC,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOulB,UACdl5B,EAAAA,QAAAC,cAACy9C,EAAUA,WAAA,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,sBACzCE,EAAA,QAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAOqmC,eAAgBhU,EAAQsW,yBAKpDZ,GACC17C,EAAAA,QAACC,cAAAD,EAAK,QAACgyC,SAAQ,KACbhyC,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAAA,QAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOulB,SAAU2M,QAAQ,OAAOiY,eAAe,SAASC,GAAI,GACnE/9C,UAACC,cAAA+9C,EAAAA,kBAAiB/9B,KAAM,QAK5By7B,GAAaN,GACbp7C,EAAC,QAAAC,cAAAD,UAAMgyC,SAAQ,KACZhM,EAAQqW,iBAAmBnD,qBAAmBG,kBAAoBkC,GACjEv7C,EAAC,QAAAC,cAAAD,UAAMgyC,SAAQ,KACbhyC,EAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOulB,UACdl5B,EAAAA,QAAAC,cAACy9C,EAAUA,WAAA,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,sBACzCE,EAAA,QAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAO0mC,gBAAiBkB,KAI9Cv7C,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAA,QAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOulB,UACdl5B,EAAAA,QAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,kBACzCE,EAAA,QAAAC,cAACy9C,EAAUA,WAAC,CAAAr9C,GAAIsT,GAAOqmC,eAAgB/8C,EAAK,QAACm+C,GAAa/9C,OAAO,WAEnE2C,UAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAA,QAAAC,cAACG,MAAI,CAAAC,GAAIsT,GAAOulB,UACdl5B,UAAAC,cAACy9C,EAAAA,WAAU,CAACr9C,GAAIsT,GAAOmmC,eAAgBh6C,EAAE,eACzCE,EAAA,QAAAC,cAACy9C,EAAUA,WAAA,CAACr9C,GAAIsT,GAAOqmC,gBA1H3B/2C,EAAQhG,EAAK,QA0H6Cm+C,GAtH1DN,GAFAF,EADM39C,EAAAA,UACaof,KAAKpZ,EAAO,WAEN,IADzB43C,EAAQ91C,KAAKk5C,MAAMrD,EAAe,KAG5B,EACAC,OAAUC,EAAO,IAEnBA,EAAO,QAqHZ9U,EAAQ4W,aAAe5W,EAAQ6W,oBAC9B78C,EAAAA,QAAAC,cAACD,EAAK,QAACgyC,SAAQ,KACbhyC,EAAAA,QAAAC,cAACG,EAAAA,IAAI,CAAAC,GAAIsT,GAAOxF,YAChBnO,EAAA,QAAAC,cAACG,EAAAA,IAAG,CAACC,GAAIsT,GAAOulB,SAAU2M,QAAQ,OAAOiY,eAAe,YACtD99C,EAAA,QAAAC,cAACi+C,EAAMA,OAAA,CAAC98C,QAAQ,YAAY6e,KAAK,QAAQm6B,MAAM,OAAO/5C,GAAIsT,GAAO8mC,aAAc0D,QA1GhE,WAClBnY,EAAQ6W,oBAAuB1B,GACpCA,EAAoBH,EAAQhV,EAAQ6W,mBAAmB39C,GACzD,GAwGaY,EAAE,iBAOjB,ECxJMs+C,GAAoC,SAA5B9+C,GAAA,IAA4CqZ,EAAQrZ,EAARqZ,SAAqB,OAC7E3Y,UAAAC,cAACo+C,GAAS,CAACplC,YAD2C3Z,EAAX2Z,YACNo8B,YADwC/1C,EAAX+1C,aAE/D,SAACpkC,EAAUw9B,GAAQ,OAClBzuC,wBAACI,EAAAA,IAAGkV,EAAA,CAACmnB,IAAKxrB,EAAS2gC,UAAc3gC,EAASunC,eAAgBn4C,CAAAA,ICd7Bg2C,EDcoD5H,EAAS4H,eCdhB,CAC9E7kC,OAAQ,OACR80B,WAAY,6BACZkU,gBAAiBnE,EAAiB,kBAAoB,kBDY/C19B,EAAS1H,GACTA,EAAS8a,aChBgB,IAACsqB,CDiBvB,EAEE,EHlBRqD,KAAcX,GAAA,CAAA,GACjBG,EAAAA,mBAAmBC,SAAU,eAAcJ,GAC3CG,EAAAA,mBAAmBE,YAAa,aAAYL,GAC5CG,EAAAA,mBAAmBG,kBAAmB,eAAcN,IAG1CuF,GAAiB,SAAC3pB,EAAoB4pB,eAAAA,IAAAA,IAAAA,GAAY,GAAIjpC,EAAA,CACjEuwB,QAAS,OACT8X,WAAY,SACZ/D,IAAK,SAACC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAE,EAChCkjC,OAAQD,EAAY,UAAY,UAChChsC,QAAS,SAACsnC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAE,EACpChb,aAAc,sCACdm+C,UAAW,OACX,iBAAkB,CAChBn+C,aAAc,SAEZi+C,GAAa,CACf,UAAW,CACT/D,gBAAiB,8BAGjB7lB,GAAY,CACdya,QAAS,IAEX,EAUWsP,GAAqC,CAChDjK,WAAY,EACZljC,MAAO,GACPC,OAAQ,GACR+oC,aAAc,MACdC,gBAAiB,gBAGb7mC,GAAyC,CAC7CjX,KAAM,CACJg4C,SAAU,EACVhZ,SAAU,SACVijB,aAAc,WACdC,WAAY,UAEdC,aAAc,CACZpK,WAAY,EACZrF,QAAS,GACT78B,QAAS,SAACsnC,GAAU,OAAAA,EAAMv+B,QAAQ,IAAK,EACvCvH,WAAY,OACZ,UAAW,CACTq7B,QAAS,KK7BF0P,GAA4D,SAAxCx/C,GAA2C,IAAA2R,EAAQ3R,EAAR2R,SAAUmrC,EAAI98C,EAAJ88C,YACpFp8C,EAAA,QAAAC,cAAC8+C,EAAAA,KAAIzpC,EAAA,CAACmnB,IAAKxrB,EAAS2gC,UAAc3gC,EAAS4gC,eAAoB5gC,EAAS6/B,gBAAe,CAAEzwC,GAAIi+C,IAAe,KAC1Gt+C,EAAAA,QAAAC,cAACy9C,aAAU,CAACr9C,GAAIsT,GAAOjX,MAAO0/C,EAAK1/C,MAC9B,EAGHsiD,GAA4C,SAAhC70C,OAChBiyC,EAAIjyC,EAAJiyC,KACAvjC,EAAK1O,EAAL0O,MACAS,EAAWnP,EAAXmP,YACA2lC,EAAY90C,EAAZ80C,aACA5C,EAAclyC,EAAdkyC,eACAO,EAAWzyC,EAAXyyC,YACAuB,EAAOh0C,EAAPg0C,QACAe,EAAQ/0C,EAAR+0C,SAEQp/C,EAAMC,mBAAND,EAER,OACEE,EAAC,QAAAC,cAAAk/C,GAAU,CAAA7lC,YAAaA,EAAaT,MAAOA,GACzC,SAAC5H,EAAUw9B,UACVzuC,UAACC,cAAA8+C,EAAIA,KAAAzpC,EAAA,CACHmnB,IAAKxrB,EAAS2gC,UACV3gC,EAAS4gC,eACT5gC,EAAS6/B,gBAAe,CAC5BzwC,GAAIi+C,GAAe7P,EAASz2B,aAAcmmC,GAC1CA,QAAS,YACF1P,EAASz2B,YAAcmmC,GAC1BA,GAEJ,IAECvB,GAAe58C,EAAA,QAAAC,cAACG,EAAAA,IAAG,CAACw9C,MAAO99C,EAAE,uBAAwBO,GAAIq+C,MACxD9B,GAAeqC,GAAgB5C,GAC/Br8C,EAAC,QAAAC,cAAAG,EAAAA,IAAI,CAAAw9C,MAAO99C,EAAEk5C,GAAkBqD,IAAkBh8C,ILlCxB06C,EKkCkDsB,ELlCF,CACpF5H,WAAY,EACZljC,MAAO,GACPC,OAAQ,GACR+oC,aAAc,MACdC,gBAAiBd,GAAeqB,OK+BxB/6C,UAAAC,cAACy9C,EAAUA,WAAC,CAAAE,MAAOxB,EAAK1/C,KAAM2D,GAAIsT,GAAOjX,MACtC0/C,EAAK1/C,MAEPwiD,GACCl/C,UAAAC,cAACm/C,EAAUA,WAAA,CACTxB,MAAO99C,EAAE,kBACTmgB,KAAK,QACLm6B,MAAM,QACN+D,QAAS,SAACzoC,GACRA,EAAE2pC,kBACFH,GACF,EACA7+C,GAAIsT,GAAOkrC,cAEX7+C,EAAAA,QAAAC,cAACq/C,UAAS,CAACrF,SAAS,YLlDG,IAACc,CKqDvB,EAIf,ECrFMpnC,GAAyC,CAC7C4rC,KAAM,CACJ1Z,QAAS,OACT2Z,cAAe,SACf/K,WAAY,EACZljC,MAAO,IACPC,OAAQ,QAEViuC,OAAQ,CACN5Z,QAAS,OACTtzB,QAAS,SAACsnC,GAAK,OAAKA,EAAMv+B,QAAQ,GAAK,EAAE,GAE3CqP,OAAQ,CACNkb,QAAS,OACT6Z,UAAW,SACXvtC,OAAQ,SAAC0nC,GAAK,OAAKA,EAAMv+B,QAAQ,EAAG,EAAG,EAAG,EAAE,GAE9CqkC,OAAQ,CACNxtC,OAAQ,SAAC0nC,GAAK,OAAKA,EAAMv+B,QAAQ,EAAG,EAAG,EAAG,EAAE,EAC5C,wBAAyB,CACvBnJ,OAAQ,GAEV,qCAAsC,CACpCE,OAAQ,QAEV,4BAA6B,CAC3B+nC,MAAO,iBAGXwF,QAAS,CACPlL,SAAU,EACVniC,QAAS,SAACsnC,GAAU,OAAAA,EAAMv+B,QAAQ,GAAI,EACtCogB,SAAU,SCfRmkB,GAAwC,SAA9BvgD,GAAiC,IAAAwgD,EAASxgD,EAATwgD,UAAWC,EAAgBzgD,EAAhBygD,iBAAkBC,EAAe1gD,EAAf0gD,gBAC5EtgD,EAAsCC,EAAQA,SAAC,IAAxCsgD,EAAWvgD,EAAEwgD,GAAAA,EAAcxgD,EAClC,GAAQI,EAAMC,EAAAA,iBAAND,EAEFqgD,EAAgBjxC,UACpB,WAAO,OAAA6wC,EAAmBD,EAAU1xC,OAAO,SAACguC,GAAI,OAAM2D,EAAiBK,IAAIhE,EAAKl9C,GAAG,GAAI4gD,CAAS,EAChG,CAACA,EAAWC,IAGRM,EAAoBnxC,EAAAA,QAAQ,WAChC,IAAK+wC,EAAYhqC,OAAQ,OAAOkqC,EAChC,IAAMG,EAAQL,EAAYviB,cAC1B,OAAOyiB,EAAc/xC,OAAO,SAACguC,GAC3B,OAAAA,EAAK1/C,KACFghC,cACA6iB,MAAM,KACN9xC,KAAK,SAAC+xC,GAAS,OAAAA,EAAKhH,WAAW8G,EAAM,EAAC,EAE7C,EAAG,CAACH,EAAeF,IAEnB,OACEjgD,EAAAA,sBAAC++C,EAAAA,KAAI,CAAC1+C,GAAIsT,GAAO4rC,MACfv/C,EAAA,QAAAC,cAACwgD,EAAUA,WACT,CAAA7C,MAAO99C,EAAE,kBACT6qB,OAAQw1B,EAAc5hD,OACtBmiD,UAAW,CAAE9C,MAAO,CAAEx8C,QAAS,aAAeupB,OAAQ,CAAEtqB,GAAIsT,GAAOgX,SACnEtqB,GAAIsT,GAAO8rC,SAEbz/C,EAAAA,QAAAC,cAAC0gD,EAASA,UACR,CAAA1gC,KAAK,QACLpf,MAAOf,EAAE,mBACTK,MAAO8/C,EACPx/C,SAAU,SAACiV,GAAC,OAAKwqC,EAAexqC,EAAE/D,OAAOxR,MAAM,EAC/CE,GAAIsT,GAAOgsC,OACXe,UAAW,CACTE,MAAO,CACLC,eACE7gD,EAAAA,QAAAC,cAAC6gD,EAAAA,eAAe,CAAAloC,SAAS,SACvB5Y,EAAAA,QAAAC,cAAC8gD,EAAU,QAAC,CAAA9G,SAAS,eAM/Bj6C,EAAAA,QAAAC,cAAC+gD,EAAAA,YAAY,CAAA3gD,GAAIsT,GAAOisC,SACtB5/C,EAAC,QAAAC,cAAAm+C,GACC,CAAAnlC,YAAY,OACZo8B,YAAa,SAACpkC,EAAUvQ,EAAGqxC,GAAM,OAC/B/xC,EAAA,QAAAC,cAAC6+C,GAAoB,CAAC7tC,SAAUA,EAAUmrC,KAAMiE,EAAkBtO,EAAOhvC,OAAO8V,QAAU,GAG3F,WACC,OAAA7Y,EAAAA,sBAACA,EAAAA,QAAMgyC,SAAQ,KACZqO,EAAkB3+C,IAAI,SAAC06C,EAAMvjC,GAAK,OACjC7Y,EAAA,QAAAC,cAAC++C,GAAY,CACXp9C,IAAKw6C,EAAKl9C,GACVk9C,KAAMA,EACNvjC,MAAOA,EACPS,YAAa8iC,EAAKl9C,GAClBi/C,QAAS6B,EAAkB,WAAA,OAAMA,EAAgB5D,EAAKl9C,GAAIk9C,EAAK1/C,KAAK,OAAGuF,GACvE,GAEW,IAM7B,ECnFMg/C,GAGF,CACFC,aAAc,CAAE3gD,YAAa,aAAc4gD,WAAY,qBAAsBC,QAAS,cACtFC,UAAW,CAAE9gD,YAAa,eAAgB4gD,WAAY,uBAAwBC,QAAS,iBAG5EE,GAAiB,SAC5BC,EACAC,EACAC,GAAoB,OAAAnsC,EAAA,CAEpBuwB,QAAS,OACT2Z,cAAe,SACf/K,WAAY,EACZ77B,SAAU,WACVrH,MAAO,IACPmwC,UAAW,IACXrvC,OAAyB,WAAjBkvC,EAA4B,EAAI,EACxChhD,YAA8B,WAAjBghD,EAA4BN,GAAaM,GAAchhD,YAAc,WAC7D,WAAjBghD,GAA6B,CAC/B,WAAY,CACV3B,QAAa6B,IAAAA,EAAc,IAC3B7oC,SAAU,WACVvH,QAAS,EACTC,MAAO,EACPiB,QAAS,SAACsnC,GAAiB,OAAAA,EAAMv+B,QAAQ,IAAM,IAAK,EACpD2+B,SAAU,SAACJ,GAAiB,OAAAA,EAAMK,WAAWC,QAAQ,GAAG,EACxDC,MAAO6G,GAAaM,GAAcJ,WAClC3G,gBAAiByG,GAAaM,GAAcH,QAC5C7G,aAAc,YACdoH,WAAY,+BACZnQ,cAAe,cAGEvvC,IAAjBu/C,GAA8B,CAChC9lB,SAAU,SACVkmB,UAAWJ,GACZ,EAGG7tC,GAAyC,CAC7C8rC,OAAQ,CACN5Z,QAAS,OACTtzB,QAAS,SAACsnC,GAAK,OAAKA,EAAMv+B,QAAQ,GAAK,EAAE,EACzC,2BAA4B,CAC1Bo3B,UAAW,WAGfkL,MAAO,CACLliB,SAAU,SACVijB,aAAc,WACdC,WAAY,UAEdj0B,OAAQ,CACNkb,QAAS,OACT6Z,UAAW,SACX9F,IAAK,SAACC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAE,EAChCnJ,OAAQ,SAAC0nC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAG,EAAG,EAAG,EAAE,GAE9CskC,QAAS,CACPlL,SAAU,EACVniC,QAAS,SAACsnC,GAAU,OAAAA,EAAMv+B,QAAQ,GAAI,GAExCumC,eAAgB,CACdhc,QAAS,QACT1zB,OAAQ,SAAC0nC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAG,EAAE,EACtC/I,QAAS,SAACsnC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAG,GAAI,EACzC8+B,MAAO,eACPhL,QAAS,GACT0S,UAAW,UAEbC,mBAAoB,CAClBvwC,OAAQ,MACRgpC,gBAAiB,eACjBpL,QAAS,KAIP4S,GAA0E,CAC9EC,GAAI,CAAE7H,MAAO,uBAAwBI,gBAAiB,gBACtD0H,QAAS,CAAE9H,MAAO,qBAAsBI,gBAAiB,cACzD0G,aAAc,CAAE9G,MAAO,qBAAsBI,gBAAiB,cAC9DlkC,QAAS,CAAE8jC,MAAO,uBAAwBI,gBAAiB,iBClCvD2H,GAAkD,SAAnC7iD,GAOhB,IAAA8iD,ED8BiCrH,ECpCpCsH,EAAU/iD,EAAV+iD,WACAnH,EAAS57C,EAAT47C,UACAoH,EAAWhjD,EAAXgjD,YACAd,EAAYliD,EAAZkiD,aACAxB,EAAe1gD,EAAf0gD,gBACAuC,EAAgBjjD,EAAhBijD,iBAEQziD,EAAMC,EAAAA,iBAAND,EACA9B,EAAmBk9C,EAAnBl9C,eAEFwkD,EAAkBtzC,UACtB,WAAM,MAAA,GAAA/S,OAAIkmD,EAAWlG,mBAAmB//C,KAAK,SAACC,EAAGC,UAAMD,EAAE+/C,KAAK1/C,KAAKF,cAAcF,EAAE8/C,KAAK1/C,UAAMuF,EAAW,CAAEwgD,SAAS,GAAO,EAAC,EAC5H,CAACJ,EAAWlG,oBAGRuG,EAAkBxzC,EAAOA,QAC7B,kBACElR,EACIqkD,EAAW3F,mBACRtuC,OAAO,SAAC3E,UAAQA,EAAGkzC,gBAAgB,GACnCvgD,KAAK,SAACC,EAAGC,GAAM,OAAAD,EAAE+/C,KAAK1/C,KAAKF,cAAcF,EAAE8/C,KAAK1/C,UAAMuF,EAAW,CAAEwgD,SAAS,GAAO,GACtF,EAAE,EACR,CAACJ,EAAW3F,mBAAoB1+C,IAGlC2kD,EAA+CzzC,EAAOA,QAAC,WACrD,OAAKlR,EAGE,CACL4kD,eAAgBJ,EAAgBp0C,OAAO,SAAC3E,UAAOA,EAAG4yC,iBAAmBnD,EAAkBA,mBAACG,gBAAgB,GACxGwJ,mBAAoBL,EAAgBp0C,OAAO,SAAC3E,GAAO,OAAAA,EAAG4yC,iBAAmBnD,EAAAA,mBAAmBG,gBAAgB,IAJrG,CAAEuJ,eAAgBJ,EAAiBK,mBAAoB,GAMlE,EAAG,CAACL,EAAiBxkD,IARb4kD,EAAcD,EAAdC,eAAgBC,EAAkBF,EAAlBE,mBAUlBC,EAAQ9kD,EA5EO,SAACqkD,EAA8DU,GACpF,IAGMC,EAHeX,EAAWlG,kBAAkB/tC,OAChD,SAAC3E,UAAOA,EAAG4yC,iBAAmBnD,EAAkBA,mBAACC,OAAO,GACxD56C,OACwCwkD,EAE1C,OAAIC,EAAqBX,EAAWY,qBAE3B,CAAEtd,UADIqd,EAAqBX,EAAWY,sBAClBlI,OAAQ,eAAyBmI,SAAU,qBAAsBF,mBAAAA,GAE1FA,EAAqBX,EAAWY,qBAE3B,CAAEtd,KAAI,IADAqd,EAAqBX,EAAWY,sBACnBlI,OAAQ,UAAoBmI,SAAU,gBAAiBF,mBAAAA,GAE5D,IAAnBD,EACK,CAAEpd,KAAM,KAAMoV,OAAQ,KAAemI,SAAU,WAAYF,mBAAAA,GAE7D,CAAErd,KAAM,KAAMoV,OAAQ,UAAoBmI,SAAU,kBAAmBF,mBAAAA,EAChF,CA0DiCG,CAAed,EAAYK,EAAgBnkD,QAAU,KAC9E6kD,EAAiBplD,EAAgD,KAzDhD,SAACqkD,GACxB,IAAMhmC,EAAOgmC,EAAWgB,cAAgBhB,EAAWY,qBACnD,OAAI5mC,EAAO,EACF,CAAEspB,SAAUtpB,EAAQ0+B,OAAQ,eAAyBmI,SAAU,sBAEpE7mC,EAAO,EACF,CAAEspB,KAAStpB,GAAAA,EAAQ0+B,OAAQ,UAAoBmI,SAAU,iBAE3D,CAAEvd,KAAM,KAAMoV,OAAQ,KAAemI,SAAU,WACxD,CAgD0CI,CAAiBjB,GACnDkB,EAAcT,GAASM,EAavB/wC,GAXiBrU,EACnBqkD,EAAWgB,cAAgBhB,EAAWY,8BACtCb,EAAM,MAALU,OAAK,EAALA,EAAOE,oBAAkBZ,EAAI,GAAKC,EAAWY,qBAC9CZ,EAAWgB,cAAgBhB,EAAWY,sBAGb,CAAElI,OAAQ,eAAyBl6C,MAAOf,EAAE,iBACnE9B,GAAkB0kD,EAAgBnkD,OAAS,EACtC,CAAEw8C,OAAQ,YAAsBl6C,MAAOf,EAAE,sBAC3C,CAAEi7C,OAAQ,SAAmBl6C,MAAO,IAIvC2iD,EAAeV,EAAQA,EAAME,mBAAqBX,EAAWgB,cAEnE,OACErjD,wBAAC++C,EAAAA,KAAI,CAACtiB,IAAK6lB,EAAajiD,GAAIihD,GAAejvC,EAAO0oC,OAAQyG,EAAcnvC,EAAOxR,QAC7Eb,EAAA,QAAAC,cAACwgD,EAAAA,WAAU,CACT7C,MAAOyE,EAAW9F,UAAU7/C,KAC5BiuB,OACE3qB,EAAC,QAAAC,cAAAD,EAAAA,QAAMgyC,SAAQ,KACbhyC,EAAAA,QAACC,cAAAy9C,kBAAe8F,MAAgBnB,EAAWY,sBAC3CjjD,EAAA,QAAAC,cAACy9C,EAAAA,WAAU,CACTE,MAAO99C,EAAEyjD,EAAYL,UACrB9hD,QAAQ,UACRf,ID5BwB06C,EC4BEwI,EAAYxI,OD5BuCzlC,EAAA,CACzF/C,QAAS,SAACsnC,GAAa,OAAAA,EAAMv+B,QAAQ,KAASu+B,IAAAA,EAAMv+B,QAAQ,EAAE,EAC9Di/B,aAAc,GACXyH,GAAYjH,MC2BFwI,EAAY5d,OAInB+a,UAAW,CACT9C,MAAO,CAAEx8C,QAAS,YAAaw8C,MAAOyE,EAAW9F,UAAU7/C,KAAM2D,GAAIsT,GAAOiqC,OAC5EjzB,OAAQ,CAAEtqB,GAAIsT,GAAOgX,SAEvBtqB,GAAIsT,GAAO8rC,SAEbz/C,EAAAA,QAAAC,cAAC+gD,cAAY,CAAA3gD,GAAIsT,GAAOisC,SACtB5/C,EAAA,QAAAC,cAACm+C,GACC,CAAAnlC,YAAaopC,EAAW9F,UAAUr9C,GAClCm2C,YAAa,SAACpkC,EAAUvQ,EAAGqxC,GACzB,IAEIqK,EAC6BqH,EAH3BC,EAAM3R,EAAOhvC,OAAO8V,MACpBwqC,EAAgBT,EAAerkD,OAASskD,EAAmBtkD,OAEjE,GAAImlD,EAAMd,EAAerkD,OACvB69C,EAA0B,OAAtBqH,EAAGb,EAAec,SAAI,EAAnBD,EAAqBrH,aACnBsH,EAAML,EAAe,CAAA,IAAAM,EAC9BvH,EAAsD,OAAlDuH,EAAGd,EAAmBa,EAAMd,EAAerkD,cAAO,EAA/ColD,EAAiDvH,IAC1D,KAAO,KAAAwH,EACLxH,EAAOwH,OAAHA,EAAGlB,EAAgBgB,EAAML,SAAtBO,EAAAA,EAAsCxH,IAC/C,CACA,OAAKA,EACEp8C,EAAAA,QAAAC,cAAC6+C,GAAoB,CAAC7tC,SAAUA,EAAUmrC,KAAMA,IADrCp8C,wBAAC++C,EAAAA,KAAIzpC,EAAA,CAACmnB,IAAKxrB,EAAS2gC,UAAc3gC,EAAS4gC,eAAoB5gC,EAAS6/B,iBAE5F,GAEC,WACC,IAAM+S,EAAkBjB,EAAerkD,OACjCulD,EAAkBD,EAAkBhB,EAAmBtkD,OAC7D,OACEyB,UAAAC,cAACD,EAAK,QAACgyC,SAAQ,KACZ4Q,EAAelhD,IAAI,SAACqiD,EAAUlrC,UAC7B7Y,wBAACg/C,GAAY,CACXp9C,IAAKmiD,EAAS3H,KAAKl9C,GACnBk9C,KAAM2H,EAAS3H,KACfvjC,MAAOA,EACPS,YAAayqC,EAAS3H,KAAKl9C,GAC3B+/C,aAAcjhD,EACdq+C,eAAgB0H,EAAS1H,eACzB8B,QAAS6B,EAAkB,WAAA,OAAMA,EAAgB+D,EAAS3H,KAAKl9C,GAAI6kD,EAAS3H,KAAK1/C,KAAK,OAAGuF,EACzFi9C,SAAUqD,EAAmB,WAAM,OAAAA,EAAiBwB,EAAS3H,KAAKl9C,GAAG,OAAG+C,GACxE,GAEH4gD,EAAmBtkD,OAAS,GAC3ByB,UAAAC,cAACD,EAAK,QAACgyC,SAAQ,KACbhyC,EAAA,QAAAC,cAACy9C,EAAAA,WAAW,CAAAt8C,QAAQ,UAAUf,GAAIsT,GAAOkuC,gBACtC/hD,EAAE,0BAELE,EAAAA,QAACC,cAAAG,OAAIC,GAAIsT,GAAOouC,sBAGnBc,EAAmBnhD,IAAI,SAACqiD,EAAUlrC,GACjC,OAAA7Y,EAAAA,sBAACg/C,GAAY,CACXp9C,IAAKmiD,EAAS3H,KAAKl9C,GACnBk9C,KAAM2H,EAAS3H,KACfvjC,MAAOgrC,EAAkBhrC,EACzBS,YAAayqC,EAAS3H,KAAKl9C,GAC3B+/C,gBACA5C,eAAgB0H,EAAS1H,eACzB8B,QAAS6B,EAAkB,WAAA,OAAMA,EAAgB+D,EAAS3H,KAAKl9C,GAAI6kD,EAAS3H,KAAK1/C,KAAK,OAAGuF,EACzFi9C,SAAUqD,EAAmB,WAAM,OAAAA,EAAiBwB,EAAS3H,KAAKl9C,GAAG,OAAG+C,GACxE,GAEHygD,EAAgBnkD,OAAS,GACxByB,EAAAA,QAAAC,cAACD,UAAMgyC,SAAQ,KACbhyC,UAAAC,cAACy9C,EAAUA,WAAC,CAAAt8C,QAAQ,UAAUf,GAAIsT,GAAOkuC,gBACtC/hD,EAAE,0BAELE,UAACC,cAAAG,EAAGA,KAACC,GAAIsT,GAAOouC,sBAGnBW,EAAgBhhD,IAAI,SAAC2/C,EAAWxoC,GAC/B,OAAA7Y,EAAC,QAAAC,cAAA++C,GACC,CAAAp9C,IAAKy/C,EAAUjF,KAAKl9C,GACpBk9C,KAAMiF,EAAUjF,KAChBvjC,MAAOirC,EAAkBjrC,EACzBS,aRpJqB0hC,EQoJiBqG,EAAUjF,KAAKl9C,MRpJFo6C,GAAmB0B,GQqJtE4B,eACAuB,QACE6B,EAAkB,WAAM,OAAAA,EAAgBqB,EAAUjF,KAAKl9C,GAAImiD,EAAUjF,KAAK1/C,KAAK,OAAGuF,IRvJhE,IAAC+4C,CQyJrB,GAIV,IAKV,ECnNMrnC,GAAS,CACbqwC,KAAM,SAACnK,SAAkB,CACvBhU,QAAS,OACT2Z,cAAe,SACfyE,SAAU,OACVC,aAAc,aACdtK,IAAKC,EAAMv+B,QAAQ,GACnB9J,OAAQ,OACRkhC,UAAW,OACZ,GCeGyR,GAAkD,SAAnC7kD,GAOhB,IANHE,EAAIF,EAAJE,KACA07C,EAAS57C,EAAT47C,UACAD,EAAU37C,EAAV27C,WACAmJ,EAAU9kD,EAAV8kD,WACAC,EAAoB/kD,EAApB+kD,qBACAC,EAAkBhlD,EAAlBglD,mBAEQtH,EAAe/B,EAAf+B,WACRt9C,EAA0CC,EAAAA,SAAiC,CAAE,GAAtE4kD,EAAa7kD,KAAE8kD,EAAgB9kD,EAGtC,GAAM+kD,EAAaz1C,EAAAA,OAA8C,CAAE,GAG7D01C,EAAU11C,EAAAA,OAAOxP,GACvBklD,EAAQh1C,QAAUlQ,EAElB,IAAMugD,EAAmB7wC,UAAQ,WAE/B,IADA,IACgC2sC,EAD1B/3B,EAAM,IAAI6gC,IAChB/I,EAAAE,EAAiBt8C,EAAKu8C,cAAUF,EAAAD,KAAAI,MAC9B,IADgC,IACMQ,EAAtCC,EAAAX,EADWD,EAAA17C,MACSu8C,sBAAkBF,EAAAC,KAAAT,MACpCl4B,EAAI1lB,IADOo+C,EAAAr8C,MACAi8C,KAAKl9C,IAGpB,OAAO4kB,CACT,EAAG,CAACtkB,EAAKu8C,aAEH6I,EAAoBrqC,cAAY,SAACrb,EAAYuV,GACjDgwC,EAAW/0C,QAAQxQ,GAAMuV,CAC3B,EAAG,IAEGowC,EAAkBtqC,cAAY,SAAC7Z,GACnC,IAAMokD,EAAkC,CAAE,EAC1Ct/C,OAAOi1B,QAAQgqB,EAAW/0C,SAAS2H,QAAQ,SAAAlN,OAAMsK,EAAEtK,EACjD,GAAIsK,IACFqwC,EAF2C36C,EAAA,IAE7BsK,EAAGC,wBAAwBlD,OAE7C,GACAgzC,EAAiBM,EACnB,EAAG,IAEGC,EAAuBxqC,EAAWA,YACtC,SAACygC,EAAgBwC,GACf,GAAKR,EAAL,CAEA,IAAMT,EAAY/8C,EAAKu8C,WAAWp/C,KAAK,SAAC4gD,UAAMA,EAAEhB,UAAUr9C,KAAOs+C,CAAW,GACtEuG,QAAWxH,SAAAA,EAAWJ,kBAAkBx/C,KAAK,SAACqoD,GAAM,OAAAA,EAAE5I,KAAKl9C,KAAO87C,CAAM,GACzEuB,GAAcwH,IAEnBK,EAAW,CACTrI,WAAYv8C,EAAKu8C,WAAWr6C,IAAI,SAAC67C,GAAC,OAChCA,EAAEhB,UAAUr9C,KAAOs+C,EAAWloC,EAAA,CAAA,EAErBioC,EAAC,CACJpB,kBAAmBoB,EAAEpB,kBAAkB/tC,OAAO,SAAC42C,GAAC,OAAKA,EAAE5I,KAAKl9C,KAAO87C,CAAM,GACzEqI,cAAe9F,EAAE8F,cAAgB,IAEnC9F,CAAC,GAEP0H,qBAAsBlB,EAAS3H,MAAIjgD,OAAKqD,EAAKylD,uBAG/CjI,EACGkI,iBAAiB,CAChBtE,MAAO,CACL5F,OAAAA,EACAmK,QAASjK,EAAUn+C,MAAMmC,GACzBkmD,UAAW9nD,EAAY49C,EAAUp+C,eAG9B,WAAO,GA3BC,CA4BnB,EACA,CAACkgD,EAAYx9C,EAAM07C,EAAWkJ,IAG1BiB,EAAwB9qC,EAAAA,YAC5B,SAACygC,EAAgBwC,GACVR,IAELoH,EAAW,CACTrI,WAAYv8C,EAAKu8C,WAAWr6C,IAAI,SAAC67C,GAC/B,IAAM+H,EAAW/H,EAAEhB,UAAUr9C,KAAOs+C,EAC9B6D,EAAY9D,EAAEb,mBAAmB//C,KAAK,SAAC8M,GAAE,OAAKA,EAAG2yC,KAAKl9C,KAAO87C,CAAM,GACzE,OAAA1lC,EACKioC,GAAAA,GACHb,mBAAoBa,EAAEb,mBAAmBtuC,OAAO,SAAC3E,UAAOA,EAAG2yC,KAAKl9C,KAAO87C,CAAM,IACzEsK,GAAYjE,EACZ,CACElF,kBAAmB,GAAAhgD,OACdohD,EAAEpB,kBAAiB,CACtB,CAAEC,KAAMiF,EAAUjF,KAAMC,eAAgBnD,qBAAmBC,WAC3D/8C,KAAK,SAACC,EAAGC,GAAM,OAAAD,EAAE+/C,KAAK1/C,KAAKF,cAAcF,EAAE8/C,KAAK1/C,UAAMuF,EAAW,CAAEwgD,SAAS,GAAO,GACrFY,cAAe9F,EAAE8F,cAAgB,GAEnC,CAAE,EAEV,GACA4B,oBAAqBzlD,EAAKylD,oBAAoB72C,OAAO,SAAC3E,GAAE,OAAKA,EAAGvK,KAAO87C,CAAM,KAG/EqJ,EAAqB,CAAEkB,MAAM,IAE7BvI,EACGwI,eAAe,CACd5E,MAAO,CACL5F,OAAAA,EACAwC,YAAAA,EACA2H,QAASjK,EAAUn+C,MAAMmC,GACzBkmD,UAAW9nD,EAAY49C,EAAUp+C,SAGpCugD,KAAKiH,GACA,MAAC,cACX,EACA,CAACtH,EAAYx9C,EAAM07C,EAAWkJ,EAAYC,EAAsBC,IAG5DmB,EAAsBlrC,EAAAA,YAC1B,SAACygC,EAAgB0K,GACfrB,EAAqB,CACnBkB,MAAM,EACN3H,MAAO8H,EACPn0C,MAAO,MACPo0C,YACE3lD,UAAAC,cAAC06C,GAAW,CACVK,OAAQA,EACRx7C,KAAMA,EACNy7C,WAAYA,EACZC,UAAWA,EACXC,oBAAqBkK,KAI7B,EACA,CAAC7lD,EAAMy7C,EAAYC,EAAWmJ,EAAsBgB,IAyEtD,OACErlD,EAAAA,QAACC,cAAAktC,GAAgB,CAAApI,YAAa8f,EAAiB7f,UAvE3B,SAACv5B,GAErB,GADA+4C,EAAiB,CAAA,GACZxH,EAAL,CAEA,IAAM4I,EVnHoB,SAC5BpmD,EACAiM,GAEA,IAAQ1I,EAAqC0I,EAArC1I,OAAQgW,EAA6BtN,EAA7BsN,YAAaO,EAAgB7N,EAAhB6N,YAE7B,IAAKP,EAAa,YAClB,GAAIhW,EAAOkW,cAAgBF,EAAYE,aAAelW,EAAO8V,QAAUE,EAAYF,MAAO,OAAW,KAErG,IAOIgtC,EAPEjJ,EAAcrD,GAAuBjgC,GACrC0hC,EAASvB,GAAcngC,GACvBwsC,EAAkC,SAAvB/iD,EAAOkW,YAClB8sC,EAAqC,SAA5BhtC,EAAYE,YAE3B,GAAI2jC,GAAemJ,EAAQ,OAAW,KAGtC,IAAIC,EAAsB9M,EAAAA,mBAAmBE,WAEvC6M,KAAsB9pD,OAAOqD,EAAKylD,qBAClCiB,EAAgB1mD,EAAKu8C,WAAWr6C,IAAI,SAACu6C,GAAE3mC,OAAAA,KACxC2mC,EAAE,CACLE,kBAAiBhgD,GAAAA,OAAM8/C,EAAGE,mBAC1BO,mBAAkB,GAAAvgD,OAAM8/C,EAAGS,qBAC3B,GAEF,GAAIE,EAAa,CACf,IAAMuJ,EAAWD,EAAcvpD,KAAK,SAACs/C,GAAE,OAAKA,EAAGM,UAAUr9C,KAAO6D,EAAOkW,WAAW,GAClF,GAAIktC,EAAU,CACZ,IAAMzC,EAAMyC,EAASzJ,mBAAmBz9C,UAAU,SAACwK,GAAE,OAAKA,EAAG2yC,KAAKl9C,KAAO87C,CAAM,IAClE,IAAT0I,IACFmC,EAAYM,EAASzJ,mBAAmBgH,GAAKtH,KAC7C4J,EAAsB9M,EAAAA,mBAAmBG,iBACzC8M,EAASzJ,mBAAmBthB,OAAOsoB,EAAK,GAE5C,CACA,IAAM0C,EAAUH,EAAuBhnD,UAAU,SAACwK,UAAOA,EAAGvK,KAAO87C,CAAM,IACxD,IAAboL,GACFH,EAAuB7qB,OAAOgrB,EAAS,EAE3C,MAAO,GAAIN,EAAU,CACnB,IAAMpC,EAAMuC,EAAuBhnD,UAAU,SAACwK,GAAE,OAAKA,EAAGvK,KAAO87C,CAAM,IACxD,IAAT0I,IACFmC,EAAYI,EAAuBvC,GACnCuC,EAAuB7qB,OAAOsoB,EAAK,GAEvC,KAAO,CACL,IAAMyC,EAAWD,EAAcvpD,KAAK,SAACs/C,GAAE,OAAKA,EAAGM,UAAUr9C,KAAO6D,EAAOkW,WAAW,GAClF,GAAIktC,EAAU,CACZ,IAAMzC,EAAMyC,EAAShK,kBAAkBl9C,UAAU,SAACwK,GAAE,OAAKA,EAAG2yC,KAAKl9C,KAAO87C,CAAM,IACjE,IAAT0I,IACFmC,EAAYM,EAAShK,kBAAkBuH,GAAKtH,KAC5C4J,EAAsBG,EAAShK,kBAAkBuH,GAAKrH,eACtD8J,EAAShK,kBAAkB/gB,OAAOsoB,EAAK,GACvCyC,EAAS9C,eAAiB,EAE9B,CACF,CAEA,IAAKwC,EAAW,YAEhB,GAAIE,EACFE,EAAuB7qB,OAAOriB,EAAYF,MAAO,EAAGgtC,OAC/C,CACL,IAAMQ,EAASH,EAAcvpD,KAAK,SAACs/C,UAAOA,EAAGM,UAAUr9C,KAAO6Z,EAAYE,WAAW,GACjFotC,IACFA,EAAOlK,kBAAkB/gB,OAAOriB,EAAYF,MAAO,EAAG,CACpDujC,KAAMyJ,EACNxJ,eAAgB2J,IAElBK,EAAOhD,eAAiB,EAE5B,CAEA,MAAO,CAAEtH,WAAYmK,EAAejB,oBAAqBgB,EAC3D,CUwCwBK,CAAe9mD,EAAMiM,GACzC,GAAKm6C,EAAL,CAEAxB,EAAWwB,GAEX,IAAQ7sC,EAA6BtN,EAA7BsN,YACFiiC,EAASvB,GADsBhuC,EAAhB6N,aAIrB,GAF4C,SAA7BP,EAAaE,YAG1B+jC,EACGkI,iBAAiB,CAChBtE,MAAO,CACL5F,OAAAA,EACAmK,QAASjK,EAAUn+C,MAAMmC,GACzBkmD,UAAW9nD,EAAY49C,EAAUp+C,SAG/B,MAAC,kBACJ,CACL,IAAM0gD,EAAczkC,EAAaE,YAC3BstC,EAAgBvJ,EAAWwI,eAAe,CAC9C5E,MAAO,CACL5F,OAAAA,EACAwC,YAAAA,EACA2H,QAASjK,EAAUn+C,MAAMmC,GACzBkmD,UAAWlK,EAAUp+C,QAIrBo+C,EAAUl9C,eACZuoD,EACGlJ,KAAK,WAAA,OACJL,EAAWC,eAAe,CACxB7uC,OAAQ,CACN8uC,WAAYlC,EACZmC,YAAajC,EAAUn+C,MAAMmC,GAC7Bk+C,iBAAkB,SAEpB,GAEHC,KAAK,SAAA/yC,GAAG,IAAA2yC,EAAc3yC,EAAd2yC,eACP,GAA8B,IAA1BA,EAAe1+C,OAAnB,CACA,IACM89C,EADSY,EAAeA,EAAe1+C,OAAS,GAE7Ci/C,cAAgBA,EAActE,EAAkBA,mBAACC,QAAUD,qBAAmBG,iBACvF,OAAO+K,EAAW,CAChBrI,WAAY2I,EAAQh1C,QAAQqsC,WAAWr6C,IAAI,SAAC67C,GAAC,OAC3CA,EAAEhB,UAAUr9C,KAAOs+C,EAAWloC,EAAA,CAAA,EAErBioC,EACHpB,CAAAA,kBAAmBoB,EAAEpB,kBAAkBz6C,IAAI,SAAC+H,GAC1C,OAAAA,EAAG2yC,KAAKl9C,KAAO87C,EAAM1lC,EAAQ7L,CAAAA,EAAAA,EAAI4yC,CAAAA,eAAAA,IAAmB5yC,CAAE,KAG1D8zC,CAAC,IAbwC,CAgBnD,GAAE,MACK,WAAQ,GAEjBgJ,EAAmB,MAAC,WAAO,EAE/B,EAjEiB,CAkEnB,GAIIvmD,EAAAA,QAAAC,cAACG,EAAGA,IAAC,CAAAC,GAAIsT,GAAOqwC,MACdhkD,UAAAC,cAAC4/C,GAAU,CACTC,UAAWtgD,EAAKylD,oBAChBlF,iBAAkB7E,EAAUl9C,eAAiB+hD,OAAmB99C,EAChE+9C,gBAAiB9E,EAAUl9C,eAAiBynD,OAAsBxjD,IAEnEzC,EAAKu8C,WAAWr6C,IAAI,SAAC2gD,GAAU,OAC9BriD,EAAAA,QAACC,cAAAkiD,IACCvgD,IAAKygD,EAAW9F,UAAUr9C,GAC1BmjD,WAAYA,EACZnH,UAAWA,EACXoH,YAAa,SAAC7tC,GAAO,OAAAmwC,EAAkBvC,EAAW9F,UAAUr9C,GAAIuV,EAAG,EACnE+sC,aAAc+C,EAAclC,EAAW9F,UAAUr9C,IACjD8gD,gBAAiB9E,EAAUl9C,eAAiBynD,OAAsBxjD,EAClEsgD,iBAAkB,SAACvH,UAAW+J,EAAqB/J,EAAQqH,EAAW9F,UAAUr9C,GAAG,GACnF,IAKZ,EC9PMyU,GAAyC,CAC7C4rC,KAAM,CACJ1Z,QAAS,OACT8X,WAAY,SACZG,eAAgB,SAChBlE,IAAK,SAACC,GAAU,OAAAA,EAAMv+B,QAAQ,EAAE,EAChCxH,aAAc,SAAC+lC,GAAK,OAAKA,EAAMv+B,QAAQ,EAAE,EACzC/I,QAAS,SAACsnC,GAAK,OAAKA,EAAMv+B,QAAQ,EAAE,EACpChb,aAAc,oBACdo6C,WAAY,WAEd75C,MAAO,CACL2lD,SAAU,IACV1E,UAAW,SACX1H,MAAO,8BCyBLqM,GAAwC,SAA9BnnD,GACd,IAAA47C,EAAS57C,EAAT47C,UACAwL,EAAcpnD,EAAdonD,eAAcC,EAAArnD,EACdsnD,QAAcC,EAAAvnD,EACdwnD,QAAAA,WAAOD,GAAOA,EACdE,EAAUznD,EAAVynD,kBAEA/mD,EAAC,QAAAC,cAAAG,EAAAA,IAAI,CAAAC,GAAIsT,GAAO4rC,MACdv/C,EAAA,QAAAC,cAACm/C,EAAAA,WAAW,CAAAhF,MAAM,YAAYzkB,gBALtB,IAAHgxB,GAAOA,GAKsCxI,QAAS,kBAAM4I,EAAW,OAAO,GACjF/mD,UAACC,cAAA+mD,EAAe,eAElBhnD,EAAAA,QAAAC,cAACy9C,aAAW,CAAAr9C,GAAIsT,GAAO9S,OA3BP,SAACq6C,GACnB,IAAQn+C,EAAUm+C,EAAVn+C,MACFkqD,EAAYhqD,EAAK,QAACi+C,EAAUp+C,MAElC,GAVuB,SAACC,GACxB,IAAMkG,EAAQhG,UAAMF,EAAMR,WACpB2G,EAAMjG,EAAAA,QAAMF,EAAMmqD,YACxB,OAAsB,GAAfjkD,EAAM/F,OAAc+F,EAAM9F,SAAwB,GAAb+F,EAAIhG,OAAcgG,EAAI/F,QACpE,CAMMgqD,CAAiBpqD,GAAQ,CAC3B,IAAMqqD,EAAUH,EAAU7oD,IAAI,EAAG,OAC3BpB,EAAaC,EAAAA,QAAMF,EAAMR,WACzB8qD,EAAWpqD,EAAK,QAACF,EAAMmqD,YAC7B,OAAUD,EAAU5pD,OAAO,SAAQ,MAAM+pD,EAAQ/pD,OAAO,SAAQ,KAAKL,EAAWK,OAC9E,SACKgqD,MAAAA,EAAShqD,OAAO,YACzB,CAEA,OAAU4pD,EAAU5pD,OAAO,SAAcN,MAAAA,EAAML,IACjD,CAcO4qD,CAAYpM,GACZwL,SAAwBA,GAE3B1mD,EAAAA,QAAAC,cAACm/C,aAAW,CAAAhF,MAAM,YAAYzkB,UAAWmxB,EAAS3I,QAAS,WAAM,OAAA4I,EAAW,OAAO,GACjF/mD,UAAAC,cAACsnD,EAAgB,QAAA,OAEf,ECzDF5zC,GAAyC,CAC7C4rC,KAAM,CACJ1Z,QAAS,OACT2Z,cAAe,SACfhuC,OAAQ,QAEVg2C,OAAQ,CACN3hB,QAAS,OACTiY,eAAgB,SAChBH,WAAY,SACZjJ,SAAU,ICWR+S,GAAwC,SAA9BnoD,GAAiC,IAAAE,EAAIF,EAAJE,KAAM4kD,EAAU9kD,EAAV8kD,WAAYnJ,EAAU37C,EAAV27C,WAAYyM,EAAQpoD,EAARooD,SAAUrD,EAAoB/kD,EAApB+kD,qBAC/EvkD,EAAMC,EAAAA,iBAAND,EACRJ,EAAkCC,EAAAA,SAA2B,MAAtDu7C,EAASx7C,EAAEioD,GAAAA,EAAYjoD,EAC9B,GAAA47C,EAAkC37C,EAAQA,UAAC,GAApC+7C,EAASJ,EAAEK,GAAAA,EAAYL,EAC9B,GAAAG,EAA8C97C,EAAQA,UAAC,GAAhDioD,EAAenM,EAAEoM,GAAAA,EAAkBpM,EAE1C,GAAMiL,EAAiBx3C,EAAOA,QAAC,WAC7B,GAAKw4C,MAAAA,GAAAA,EAAUpmD,aAAf,CACA,IAAMK,EAAanC,EAAKiC,YAAY9E,KAAK,SAACwwB,GAAC,OAAKA,EAAEjuB,KAAOwoD,EAASpmD,YAAY,GAC9E,OAAiB,MAAVK,OAAU,EAAVA,EAAYjF,IAF0B,CAG/C,EAAG,CAACgrD,MAAAA,OAAAA,EAAAA,EAAUpmD,aAAc9B,EAAKiC,cAEzBu7C,EAA4B/B,EAA5B+B,WAAY8K,EAAgB7M,EAAhB6M,YACdC,EAAY/4C,EAAMA,OAACxP,EAAKtD,QAC9B6rD,EAAUr4C,QAAUlQ,EAAKtD,OAEzB+S,EAAAA,UAAU,WACR,GAAIzP,EAAKtD,OAAOqC,OAAS,IAAM28C,EAAW,CACxC,IAAM8M,EAAexqD,EAAgBgC,EAAKtD,QAEtC8rD,GACFL,EAAaK,EAEjB,CACF,EAAG,CAACxoD,EAAKtD,OAAQg/C,IAEjBjsC,EAAAA,UAAU,WAAK,IAAAg5C,EACRH,GAAoBG,MAAJzoD,GAAAyoD,OAAIA,EAAJzoD,EAAMu8C,aAANkM,EAAkB1pD,SAAUqpD,IAEjDpoD,EAAKu8C,WAAW1kC,QAAQ,SAAAlN,GAAG,IAAAoyC,EAASpyC,EAAToyC,UAAS,OAClCuL,EAAY14C,U5ByFX,SAAemwC,EAAMz2C,GAC1B,IAAIo/C,EAAc19C,UAAUjM,OAAS,QAAsB0D,IAAjBuI,UAAU,GAAmBA,UAAU,GAAKzE,EAGlFoiD,OAAQlmD,EACRmmD,EAAUzjD,MAAMC,QAAQ26C,GACxBh6C,EAAO,CAACg6C,GACR1mC,GAAS,EACTwvC,EAAQ,GACR9+C,OAAOtH,EACPL,OAAMK,EACNs7B,OAASt7B,EACTqmD,EAAO,GACPC,EAAY,GACZC,EAAUjJ,EAGd,EAAG,CAED,IAAIx2C,IADJ8P,IAC0BtT,EAAKhH,OAC3BkqD,EAAW1/C,GAA8B,IAAjBs/C,EAAM9pD,OAElC,GAAIwK,EAAW,CAKb,GAJAnH,EAA2B,IAArB2mD,EAAUhqD,YAAe0D,EAAYqmD,EAAKA,EAAK/pD,OAAS,GAC9DgL,EAAOg0B,EACPA,EAASgrB,EAAUG,MAEfD,EAAU,CACZ,GAAIL,EACF7+C,EAAOA,EAAKsJ,YACP,CAGL,IAFA,IAAI81C,EAAQ,CAAA,EAEHC,EAAM,EAAGC,EAAgBrjD,OAAOD,KAAKgE,GAAOq/C,EAAMC,EAActqD,OAAQqqD,IAAO,CACtF,IAAIE,EAAID,EAAcD,GACtBD,EAAMG,GAAKv/C,EAAKu/C,EAClB,CAEAv/C,EAAOo/C,CACT,CAIA,IAFA,IAAII,EAAa,EAERC,EAAK,EAAGA,EAAKX,EAAM9pD,OAAQyqD,IAAM,CACxC,IAAIC,EAAUZ,EAAMW,GAAI,GACpBE,EAAYb,EAAMW,GAAI,GAEtBZ,IACFa,GAAWF,GAGTX,GAAyB,OAAdc,GACb3/C,EAAK6xB,OAAO6tB,EAAS,GACrBF,KAEAx/C,EAAK0/C,GAAWC,CAEpB,CACF,CAEArwC,EAAQsvC,EAAMtvC,MACdtT,EAAO4iD,EAAM5iD,KACb8iD,EAAQF,EAAME,MACdD,EAAUD,EAAMC,QAChBD,EAAQA,EAAM5kD,IAChB,KAAO,CAIL,GAHA3B,EAAM27B,EAAS6qB,EAAUvvC,EAAQtT,EAAKsT,QAAS5W,EAG3CsH,OAFJA,EAAOg0B,EAASA,EAAO37B,GAAO4mD,GAG5B,SAGEjrB,GACF+qB,EAAKljD,KAAKxD,EAEd,CAEA,IA2CMunD,EA3CF19C,OAAc,EAElB,IAAK9G,MAAMC,QAAQ2E,GAAO,CACxB,IAAK9F,EAAO8F,GACV,MAAM,IAAI/G,MAAM,qBAAqBrG,OAAOuG,EAAQ6G,GAAO,MAG7D,IAAI6/C,EAAUvgD,EAAWC,EAASS,EAAKnG,KAAM2F,GAE7C,GAAIqgD,EAAS,CAGX,IAFA39C,EAAS29C,EAAQ1kD,KAAKoE,EAASS,EAAM3H,EAAK27B,EAAQ+qB,EAAMC,MAEzC5/C,EACb,MAGF,IAAe,IAAX8C,GACF,IAAK1C,EAAW,CACdu/C,EAAKI,MACL,QACF,OACK,QAAezmD,IAAXwJ,IACT48C,EAAMjjD,KAAK,CAACxD,EAAK6J,KAEZ1C,GAAW,CACd,IAAItF,EAAOgI,GAEJ,CACL68C,EAAKI,MACL,QACF,CAJEn/C,EAAOkC,CAKX,CAEJ,CACF,MAEexJ,IAAXwJ,GAAwBg9C,GAC1BJ,EAAMjjD,KAAK,CAACxD,EAAK2H,IAGfR,EACFu/C,EAAKI,OAILP,EAAQ,CACNC,QAASA,EACTvvC,MAAOA,EACPtT,KAAMA,EACN8iD,MAAOA,EACP9kD,KAAM4kD,GAGR5iD,GADA6iD,EAAUzjD,MAAMC,QAAQ2E,IACPA,EAA4D,QAApD4/C,EAAwBjB,EAAY3+C,EAAKnG,aAAkD,IAA/B+lD,EAAmCA,EAAwB,GAChJtwC,GAAS,EACTwvC,EAAQ,GAEJ9qB,GACFgrB,EAAUnjD,KAAKm4B,GAGjBA,EAASh0B,cAEMtH,IAAVkmD,GAMT,OAJqB,IAAjBE,EAAM9pD,SACRiqD,EAAUH,EAAMA,EAAM9pD,OAAS,GAAG,IAG7BiqD,CACT,CC1RSa,C2B8CKC,EAAAA,uB3B9CM,CAChBpgD,MAAOI,I2B8CH,CAAEpK,GAAIq9C,EAAUr9C,IAChB,SAAAoL,GAAuB,IAAbsR,EAAOtR,EAAPsR,QACR,GADMtR,EAALwN,QACayxC,EAAcA,eAACC,qBAAuB5tC,EAAS,CAC3D,IAAM6tC,EAAW7tC,EACXle,EAAMT,EAAK,UACX8pB,EAAS,GAAA5qB,OAAI4rD,EAAUr4C,SAAStT,KAAK,SAACC,EAAGC,GAAM,OAAAD,EAAEE,UAAUC,cAAcF,EAAEC,UAAU,GACrFmtD,EAAa7rD,EAAeA,gBAACkpB,EAAQrpB,GACrCgS,EAAU3R,EAAeA,gBAACL,EAAKgsD,GAC/BC,EAAgBj6C,EAClBA,EAAQnT,UAAUc,OAAO,wBACzBR,EAAkBa,EAAIL,OAAO,cAAeosD,GAEhD9B,EAAa,SAACpkD,GACZ,OAAS,MAAJA,GAAAA,EAAMvF,eACJ,CAAElB,KAAM6sD,EAAe5sD,MAAO0sD,EAAUzrD,gBAAgB,GAD7BuF,CAEpC,EACF,CACF,EACD,GAGHskD,GAAmB,GACrB,EAAG,CAACC,EAAatoD,MAAAA,OAAAA,EAAAA,EAAMu8C,WAAY6L,IAEnC,IAAMgC,EAAsB56C,EAAAA,OAAwC,MAEpE46C,EAAoBl6C,QAAU,SAACm6C,QAAW,IAAXA,IAAAA,GAAc,GACtC7M,GAAe9B,GAAckJ,IAE9ByF,GAAalO,GAAa,GACzBqB,EACF8M,qBAAqB,CACpBlJ,MAAO,CACL9jD,KAAMo+C,EAAUp+C,KAChBqoD,QAASjK,EAAUn+C,MAAMmC,GACzBoC,cAAsB,MAARomD,OAAQ,EAARA,EAAUpmD,oBAAgBW,KAG3Co7C,KAAK,SAAAxyC,GACJ,OAAOu5C,EADoBv5C,EAApBi/C,qBAET,GAAE,MACK,WAAQ,GAAC,QACP,WACHD,GAAalO,GAAa,EAChC,GACJ,EAEA1sC,EAAAA,UAAU,WACR,GAAKisC,GAAc8B,EAAnB,CAE2B,MAA3B4M,EAAoBl6C,SAApBk6C,EAAoBl6C,SAAU,GAE9B,IACMq6C,EAAaC,YAAY,WAAA,OAAMJ,MAAAA,EAAoBl6C,aAApBk6C,EAAAA,EAAoBl6C,SAAW,EADR,MAAnCg4C,MAAAA,OAAAA,EAAAA,EAAU7lD,kBAAmB,KAGtD,OAAO,WAAA,OAAMooD,cAAcF,EAAW,CALtCH,CAMF,EAAG,CAAC1O,EAAW8B,EAAoB,MAAR0K,OAAQ,EAARA,EAAUpmD,aAAsB,MAARomD,OAAQ,EAARA,EAAU7lD,kBAE7D,IAAMqoD,EAAiB3vC,EAAWA,YAChC,SAAC7b,GACC,GAAKw8C,EAAL,CACA,IAAMiP,EpC9BiB,SAAC1rD,EAAyBvC,EAAiBwC,GACtE,IAAMjB,EAAexB,EAAWC,GAChC,IAAKsC,EAAYC,EAAchB,EAAciB,GAC3C,OAAOD,EAGT,IAAME,EAAcrB,EAAYmB,EAAa3B,MACvCkC,EAAevB,EAAawB,UAAU,SAACrC,GAAC,OAAKA,EAAEsC,KAAOT,EAAa1B,MAAMmC,EAAE,GAE3EkrD,EAAiB,SAACttD,EAAcC,GACpC,IAAMW,EAAMT,EAAAA,UACNW,EAAmBC,EAAAA,gBAAgBJ,EAAcC,GACjD2sD,EAAoBtsD,EAAAA,gBAAgBL,EAAKE,GAC/C,SAAKysD,GAAqBA,EAAkB3tD,OAASK,EAAML,OACpD2tD,EAAkB9tD,UAAUc,OAAO,gBAAkBJ,EAAAA,QAAMH,GAAMO,OAAO,aACjF,EAEA,GAAkB,SAAdqB,EAAsB,CACxB,GAAIM,EAAevB,EAAac,OAAS,EAAG,CAC1C,IAAMxB,EAAQU,EAAauB,EAAe,GACpClC,EAAOD,EAAkB8B,EAAa5B,GAC5C,MAAO,CAAED,KAAAA,EAAMC,MAAAA,EAAOiB,eAAgBosD,EAAettD,EAAMC,GAC7D,CACA,IAAMutD,EAAWrtD,EAAK,QAAC0B,GAAaP,IAAI,EAAG,OAAOf,OAAO,cACnDN,EAAQU,EAAa,GAC3B,MAAO,CAAEX,KAAMD,EAAkBytD,EAAUvtD,GAAQA,MAAAA,EAAOiB,gBAAgB,EAC5E,CAEA,GAAIgB,EAAe,EAAG,CACpB,IAAMjC,EAAQU,EAAauB,EAAe,GACpClC,EAAOD,EAAkB8B,EAAa5B,GAC5C,MAAO,CAAED,KAAAA,EAAMC,MAAAA,EAAOiB,eAAgBosD,EAAettD,EAAMC,GAC7D,CACA,IAAMwtD,EAAWttD,EAAK,QAAC0B,GAAaQ,SAAS,EAAG,OAAO9B,OAAO,cACxDN,EAAQU,EAAaA,EAAac,OAAS,GACjD,MAAO,CAAEzB,KAAMD,EAAkB0tD,EAAUxtD,GAAQA,MAAAA,EAAOiB,gBAAgB,EAC5E,CoCNuBwsD,CAActP,EAAW17C,EAAKtD,OAAQwC,GACvDipD,EAAawC,EADb,CAEF,EACA,CAACjP,EAAW17C,EAAKtD,SAGb0qD,IAAU1L,GAAY18C,EAAY08C,EAAW17C,EAAKtD,OAAQ,QAC1D4qD,IAAU5L,GAAY18C,EAAY08C,EAAW17C,EAAKtD,OAAQ,QAEhE,OACE8D,EAAAA,QAACC,cAAAG,EAAAA,KAAIC,GAAIsT,GAAO4rC,MACbrE,EACCl7C,EAAAA,QAACC,cAAAD,EAAAA,QAAMgyC,SAAQ,KACbhyC,EAAC,QAAAC,cAAAwmD,IACCvL,UAAWA,EACXwL,eAAgBA,EAChBE,QAASA,EACTE,QAASA,EACTC,WAAYmD,IAEbxO,EACC17C,EAAAA,QAAAC,cAACG,EAAAA,IAAG,CAACC,GAAIsT,GAAO6zC,QACdxnD,EAAAA,QAAAC,cAAC+9C,EAAAA,iBAAgB,OAGnBh+C,EAAAA,QAACC,cAAAkkD,GACC,CAAA3kD,KAAMA,EACN07C,UAAWA,EACXD,WAAYA,EACZmJ,WAAYA,EACZC,qBAAsBA,EACtBC,mBAAoB,WAAM,OAA2B,MAA3BsF,EAAoBl6C,aAAO,EAA3Bk6C,EAAoBl6C,SAAW,KAK/D1P,EAAAA,QAAAC,cAACy9C,EAAAA,WAAU,KAAE59C,EAAE,sBAIvB,ECvJA,SAAS2qD,GAAMC,GACb1nD,KAAK2nD,SAAWD,EAChB1nD,KAAKua,OACP,CACAktC,GAAMpoD,UAAUkb,MAAQ,WACtBva,KAAK4nD,MAAQ,EACb5nD,KAAK6nD,QAAUrlD,OAAOw8B,OAAO,KAC/B,EACAyoB,GAAMpoD,UAAUyoD,IAAM,SAAUlpD,GAC9B,OAAOoB,KAAK6nD,QAAQjpD,EACtB,EACA6oD,GAAMpoD,UAAU0oD,IAAM,SAAUnpD,EAAKzB,GAInC,OAHA6C,KAAK4nD,OAAS5nD,KAAK2nD,UAAY3nD,KAAKua,QAC9B3b,KAAOoB,KAAK6nD,SAAU7nD,KAAK4nD,QAEzB5nD,KAAK6nD,QAAQjpD,GAAOzB,CAC9B,EAEA,IAAI6qD,GAAc,4BAChBC,GAAc,QACdC,GAAmB,MACnBC,GAAkB,yCAClBC,GAAqB,2BAGnBC,GAAY,IAAIZ,GAFD,KAGjBa,GAAW,IAAIb,GAHE,KAIjBc,GAAW,IAAId,GAJE,KAQnBe,GAAiB,CACff,MAAOA,GAEPlK,MAAOA,GAEPkL,cAAeA,GAEfC,OAAQ,SAAUpD,GAChB,IAAIqD,EAAQF,GAAcnD,GAE1B,OACEgD,GAASR,IAAIxC,IACbgD,GAASP,IAAIzC,EAAM,SAAgB1kD,EAAKzD,GAKtC,IAJA,IAAI0Y,EAAQ,EACR/T,EAAM6mD,EAAMptD,OACZiB,EAAOoE,EAEJiV,EAAQ/T,EAAM,GAAG,CACtB,IAAI07C,EAAOmL,EAAM9yC,GACjB,GACW,cAAT2nC,GACS,gBAATA,GACS,cAATA,EAEA,OAAO58C,EAGTpE,EAAOA,EAAKmsD,EAAM9yC,KACnB,CACDrZ,EAAKmsD,EAAM9yC,IAAU1Y,CAC7B,EAEG,EAEDyrD,OAAQ,SAAUtD,EAAMuD,GACtB,IAAIF,EAAQF,GAAcnD,GAC1B,OACEiD,GAAST,IAAIxC,IACbiD,GAASR,IAAIzC,EAAM,SAAgB9oD,GAGjC,IAFA,IAAIqZ,EAAQ,EACV/T,EAAM6mD,EAAMptD,OACPsa,EAAQ/T,GAAK,CAClB,GAAY,MAARtF,GAAiBqsD,EAChB,OADsBrsD,EAAOA,EAAKmsD,EAAM9yC,KAE9C,CACD,OAAOrZ,CACf,EAEG,EAED6F,KAAM,SAAUymD,GACd,OAAOA,EAASpuC,OAAO,SAAU4qC,EAAM9H,GACrC,OACE8H,GACCyD,GAASvL,IAASyK,GAAYe,KAAKxL,GAChC,IAAMA,EAAO,KACZ8H,EAAO,IAAM,IAAM9H,EAE3B,EAAE,GACJ,EAEDnpC,QAAS,SAAUixC,EAAMv6C,EAAIk+C,IAqB/B,SAAiBN,EAAOO,EAAMD,GAC5B,IACEzL,EACAkD,EACA9+C,EACAunD,EAJErnD,EAAM6mD,EAAMptD,OAMhB,IAAKmlD,EAAM,EAAGA,EAAM5+C,EAAK4+C,KACvBlD,EAAOmL,EAAMjI,MAGP0I,GAAe5L,KACjBA,EAAO,IAAMA,EAAO,KAItB57C,IADAunD,EAAYJ,GAASvL,KACG,QAAQwL,KAAKxL,GAErC0L,EAAKxnD,KAAKunD,EAASzL,EAAM2L,EAAWvnD,EAAS8+C,EAAKiI,GAGxD,CAzCIt0C,CAAQ1S,MAAMC,QAAQ0jD,GAAQA,EAAO/H,GAAM+H,GAAOv6C,EAAIk+C,EACvD,GAGH,SAASR,GAAcnD,GACrB,OACE+C,GAAUP,IAAIxC,IACd+C,GAAUN,IACRzC,EACA/H,GAAM+H,GAAM5mD,IAAI,SAAU8+C,GACxB,OAAOA,EAAK76C,QAAQylD,GAAoB,KACzC,GAGP,CAEA,SAAS7K,GAAM+H,GACb,OAAOA,EAAKvmC,MAAMipC,KAAgB,CAAC,GACrC,CAyBA,SAASe,GAASx9C,GAChB,MACiB,iBAARA,GAAoBA,IAA8C,IAAvC,CAAC,IAAK,KAAKnK,QAAQmK,EAAI89C,OAAO,GAEpE,CAUA,SAASD,GAAe5L,GACtB,OAAQuL,GAASvL,KATnB,SAA0BA,GACxB,OAAOA,EAAKz+B,MAAMmpC,MAAsB1K,EAAKz+B,MAAMkpC,GACrD,CAO6BqB,CAAiB9L,IAL9C,SAAyBA,GACvB,OAAO2K,GAAgBa,KAAKxL,EAC9B,CAGuD+L,CAAgB/L,GACvE,CC7JA,MAAMgM,GAAU,o9DAEVC,GAASl+C,GAAQA,EAAIwT,MAAMyqC,KAAY,GA2B7C,IAAAE,GArBmBn+C,GACjBk+C,GAAMl+C,GAAKmP,OACT,CAACivC,EAAKnpD,IACJ,GAAGmpD,IACAA,EAEGnpD,EAAK,GAAGopD,cAAgBppD,EAAKqP,MAAM,GAAG6qB,cADtCl6B,EAAKk6B,gBAGb,IAaJgvB,GARmBn+C,GAfNlJ,CAACkJ,GAAWk+C,GAAMl+C,GAAKlJ,KAeC,KAfOq4B,cAejBr4B,CAAKkJ,GCblBs+C,GAAG,SAASC,GACxB,OAAOC,GA6DT,SAAqBC,GAEnB,IADA,IAAIC,EAAM,IAAItI,IACLx/C,EAAI,EAAGL,EAAMkoD,EAAIzuD,OAAQ4G,EAAIL,EAAKK,IAAK,CAC9C,IAAI+nD,EAAOF,EAAI7nD,GACf8nD,EAAI7uD,IAAI8uD,EAAK,IACbD,EAAI7uD,IAAI8uD,EAAK,GACd,CACD,OAAOvoD,MAAMm1B,KAAKmzB,EACpB,CArEkBE,CAAYL,GAAQA,EACtC,EAIA,SAASC,GAASK,EAAON,GACvB,IAAItO,EAAS4O,EAAM7uD,OACfwoB,EAAS,IAAIpiB,MAAM65C,GACnB6O,EAAU,CAAE,EACZloD,EAAIq5C,EAEJ8O,EA4DN,SAA2BN,GAEzB,IADA,IAAIF,EAAQ,IAAIS,IACPpoD,EAAI,EAAGL,EAAMkoD,EAAIzuD,OAAQ4G,EAAIL,EAAKK,IAAK,CAC9C,IAAI+nD,EAAOF,EAAI7nD,GACV2nD,EAAM1M,IAAI8M,EAAK,KAAKJ,EAAM/B,IAAImC,EAAK,GAAI,IAAIvI,KAC3CmI,EAAM1M,IAAI8M,EAAK,KAAKJ,EAAM/B,IAAImC,EAAK,GAAI,IAAIvI,KAChDmI,EAAMhC,IAAIoC,EAAK,IAAI9uD,IAAI8uD,EAAK,GAC7B,CACD,OAAOJ,CACT,CArEsBU,CAAkBV,GAClCW,EAsEN,SAAuBT,GAErB,IADA,IAAIC,EAAM,IAAIM,IACLpoD,EAAI,EAAGL,EAAMkoD,EAAIzuD,OAAQ4G,EAAIL,EAAKK,IACzC8nD,EAAIlC,IAAIiC,EAAI7nD,GAAIA,GAElB,OAAO8nD,CACT,CA5EkBS,CAAcN,GAS9B,IANAN,EAAMz1C,QAAQ,SAAS61C,GACrB,IAAKO,EAAUrN,IAAI8M,EAAK,MAAQO,EAAUrN,IAAI8M,EAAK,IACjD,MAAM,IAAI1qD,MAAM,gEAEtB,GAES2C,KACAkoD,EAAQloD,IAAIkkD,EAAM+D,EAAMjoD,GAAIA,EAAG,IAAIw/C,KAG1C,OAAO59B,EAEP,SAASsiC,EAAM9/C,EAAMpE,EAAGwoD,GACtB,GAAGA,EAAavN,IAAI72C,GAAO,CACzB,IAAIqkD,EACJ,IACEA,EAAU,cAAgB3pD,KAAKC,UAAUqF,EAC1C,CAAC,MAAMmM,GACNk4C,EAAU,EACX,CACD,MAAM,IAAIprD,MAAM,oBAAsBorD,EACvC,CAED,IAAKH,EAAUrN,IAAI72C,GACjB,MAAM,IAAI/G,MAAM,+EAA+EyB,KAAKC,UAAUqF,IAGhH,IAAI8jD,EAAQloD,GAAZ,CACAkoD,EAAQloD,IAAK,EAEb,IAAI0oD,EAAWP,EAAcxC,IAAIvhD,IAAS,IAAIo7C,IAG9C,GAAIx/C,GAFJ0oD,EAAWlpD,MAAMm1B,KAAK+zB,IAELtvD,OAAQ,CACvBovD,EAAavvD,IAAImL,GACjB,EAAG,CACD,IAAIoe,EAAQkmC,IAAW1oD,GACvBkkD,EAAM1hC,EAAO8lC,EAAU3C,IAAInjC,GAAQgmC,EACpC,OAAQxoD,GACTwoD,EAAaG,OAAOvkD,EACrB,CAEDwd,IAASy3B,GAAUj1C,CAfH,CAgBjB,CACH,UAxDuBwjD,GCRvB,MAAMrnD,GAAWF,OAAOnD,UAAUqD,SAC5BqoD,GAAgBvrD,MAAMH,UAAUqD,SAChCsoD,GAAiBC,OAAO5rD,UAAUqD,SAClCwoD,GAAmC,oBAAXnsD,OAAyBA,OAAOM,UAAUqD,SAAW,IAAM,GACnFyoD,GAAgB,uBAMtB,SAASC,GAAiBC,EAAKC,GAAe,GAC5C,GAAW,MAAPD,IAAuB,IAARA,IAAwB,IAARA,EAAe,MAAO,GAAKA,EAC9D,MAAME,SAAgBF,EACtB,GAAe,WAAXE,EAAqB,OAR3B,SAAqBF,GACnB,OAAIA,IAAQA,EAAY,MACO,IAARA,GAAa,EAAIA,EAAM,EACtB,KAAO,GAAKA,CACtC,CAIkCG,CAAYH,GAC5C,GAAe,WAAXE,EAAqB,OAAOD,EAAe,IAAID,KAASA,EAC5D,GAAe,aAAXE,EAAuB,MAAO,cAAgBF,EAAI3xD,MAAQ,aAAe,IAC7E,GAAe,WAAX6xD,EAAqB,OAAOL,GAAexpD,KAAK2pD,GAAK1oD,QAAQwoD,GAAe,cAChF,MAAM1oD,EAAMC,GAAShB,KAAK2pD,GAAKx7C,MAAM,GAAI,GACzC,MAAY,SAARpN,EAAuBsN,MAAMs7C,EAAII,WAAa,GAAKJ,EAAMA,EAAIK,YAAYL,GACjE,UAAR5oD,GAAmB4oD,aAAe7rD,MAAc,IAAMurD,GAAcrpD,KAAK2pD,GAAO,IACxE,WAAR5oD,EAAyBuoD,GAAetpD,KAAK2pD,GAC1C,IACT,CACA,SAASM,GAAWxuD,EAAOmuD,GACzB,IAAI7iD,EAAS2iD,GAAiBjuD,EAAOmuD,GACrC,OAAe,OAAX7iD,EAAwBA,EACrBxH,KAAKC,UAAU/D,EAAO,SAAUyB,EAAKzB,GAC1C,IAAIsL,EAAS2iD,GAAiBprD,KAAKpB,GAAM0sD,GACzC,OAAe,OAAX7iD,EAAwBA,EACrBtL,CACR,EAAE,EACL,CAEA,SAASyuD,GAAQzuD,GACf,OAAgB,MAATA,EAAgB,GAAK,GAAGhE,OAAOgE,EACxC,CAEA,IAAI0uD,GAAqBC,GAAqBC,GAC1CC,GAAS,qBACbH,GAAsB9sD,OAAOktD,YAC7B,MAAMC,GACJprD,WAAAA,CAAYqrD,EAAehvD,EAAOivD,EAAOnlD,GACvCjH,KAAKtG,UAAY,EACjBsG,KAAKgO,aAAe,EACpBhO,KAAK7C,WAAa,EAClB6C,KAAKslD,UAAY,EACjBtlD,KAAKiH,UAAY,EACjBjH,KAAKqsD,YAAc,EACnBrsD,KAAKooC,YAAc,EACnBpoC,KAAKssD,WAAa,EAClBtsD,KAAK6rD,IAAuB,QAC5B7rD,KAAKtG,KAAO,kBACZsG,KAAK7C,MAAQA,EACb6C,KAAKslD,KAAO8G,EACZpsD,KAAKiH,KAAOA,EACZjH,KAAKooC,OAAS,GACdpoC,KAAKssD,MAAQ,GACbV,GAAQO,GAAe93C,QAAQa,IACzBq3C,GAAgBC,QAAQt3C,IAC1BlV,KAAKooC,OAAOhmC,QAAQ8S,EAAIkzB,QAExBpoC,KAAKssD,MAAMlqD,QADS8S,EAAIo3C,MAAM/wD,OAAS2Z,EAAIo3C,MAAQ,CAACp3C,KAGpDlV,KAAKooC,OAAOhmC,KAAK8S,KAGrBlV,KAAKgO,QAAUhO,KAAKooC,OAAO7sC,OAAS,EAAI,GAAGyE,KAAKooC,OAAO7sC,yBAA2ByE,KAAKooC,OAAO,EAChG,EAEF0jB,GAAsB/sD,OAAO0tD,YAC7BV,GAAuBhtD,OAAOktD,YAC9B,MAAMM,WAAwB/sD,MAC5B,kBAAOktD,CAAY1+C,EAASq+C,GAS1B,OAJAA,EAAS7pD,OAAO+P,OAAO,CAAA,EAAI85C,EAAQ,CACjC/G,KAJW+G,EAAOxuD,OAASwuD,EAAO/G,MAAQ,OAK1CqH,aAAcN,EAAO/G,OAEA,iBAAZt3C,EAA6BA,EAAQrL,QAAQqpD,GAAQ,CAACtuD,EAAGkB,IAAQ+sD,GAAWU,EAAOztD,KACvE,mBAAZoP,EAA+BA,EAAQq+C,GAC3Cr+C,CACT,CACA,cAAOw+C,CAAQt3C,GACb,OAAOA,GAAoB,oBAAbA,EAAIxb,IACpB,CACAoH,WAAAA,CAAYqrD,EAAehvD,EAAOivD,EAAOnlD,EAAM2lD,GAC7C,MAAMC,EAAe,IAAIX,GAAuBC,EAAehvD,EAAOivD,EAAOnlD,GAC7E,GAAI2lD,EACF,OAAOC,EAETl4C,QACA3U,KAAK7C,WAAa,EAClB6C,KAAKslD,UAAY,EACjBtlD,KAAKiH,UAAY,EACjBjH,KAAKqsD,YAAc,EACnBrsD,KAAKooC,OAAS,GACdpoC,KAAKssD,MAAQ,GACbtsD,KAAK+rD,IAAwB,QAC7B/rD,KAAKtG,KAAOmzD,EAAanzD,KACzBsG,KAAKgO,QAAU6+C,EAAa7+C,QAC5BhO,KAAKiH,KAAO4lD,EAAa5lD,KACzBjH,KAAK7C,MAAQ0vD,EAAa1vD,MAC1B6C,KAAKslD,KAAOuH,EAAavH,KACzBtlD,KAAKooC,OAASykB,EAAazkB,OAC3BpoC,KAAKssD,MAAQO,EAAaP,MACtB9sD,MAAMstD,mBACRttD,MAAMstD,kBAAkB9sD,KAAMusD,GAElC,CACA,OAAQT,IAAqBn/C,GAC3B,OAAOu/C,GAAuBntD,OAAO0tD,aAAa9/C,IAASgI,MAAM5V,OAAO0tD,aAAa9/C,EACvF,EAGF,IAAIogD,GAAQ,CACVC,QAAS,qBACTx4B,SAAU,8BACVy4B,QAAS,0BACTC,QAAS,yBACTC,MAAO,yDACPC,SAAU,6DACVC,QAASA,EACP/H,OACAr+C,OACA9J,QACAmwD,oBAEA,MAAMC,EAA2B,MAAjBD,GAAyBA,IAAkBnwD,EAAQ,2BAA2BwuD,GAAW2B,GAAe,SAAc,IACtI,MAAgB,UAATrmD,EAAmB,GAAGq+C,iBAAoBr+C,wCAAgD0kD,GAAWxuD,GAAO,OAAYowD,EAAU,GAAGjI,gEAAwEqG,GAAWxuD,GAAO,OAAYowD,IAGlPC,GAAS,CACXjyD,OAAQ,+CACRyG,IAAK,6CACL6W,IAAK,4CACL40C,QAAS,+CACTC,MAAO,gCACPC,IAAK,8BACLC,KAAM,+BACNC,SAAU,wCACVC,mBAAoB,mGACpBC,gBAAiB,8DACjB96C,KAAM,mCACN+6C,UAAW,qCACXC,UAAW,uCAETC,GAAS,CACXlsD,IAAK,kDACL6W,IAAK,+CACLs1C,SAAU,oCACVC,SAAU,uCACVC,SAAU,oCACVC,SAAU,oCACVC,QAAS,8BAEPz0D,GAAO,CACTkI,IAAK,0CACL6W,IAAK,gDAKHvX,GAAS,CACXktD,UAAW,iDACXC,MAAO,6DAOLC,GAAQ,CACVrB,QAAShB,IACP,MAAM/G,KACJA,EAAInoD,MACJA,EAAKwxD,KACLA,GACEtC,EACEuC,EAAUD,EAAK1kD,MAAM1O,OAC3B,GAAIoG,MAAMC,QAAQzE,GAAQ,CACxB,GAAIA,EAAM5B,OAASqzD,EAAS,MAAO,GAAGtJ,yDAA4DsJ,aAAmBzxD,EAAM5B,uBAAuBowD,GAAWxuD,GAAO,OACpK,GAAIA,EAAM5B,OAASqzD,EAAS,MAAO,GAAGtJ,0DAA6DsJ,aAAmBzxD,EAAM5B,uBAAuBowD,GAAWxuD,GAAO,MACvK,CACA,OAAOovD,GAAgBG,YAAYK,GAAMM,QAAShB,KAGtD,IAAIwC,GAASrsD,OAAO+P,OAAO/P,OAAOw8B,OAAO,MAAO,CAC9C+tB,SACAS,UACAU,UACAp0D,QACAwH,UACAO,MA1BU,CACVG,IAAK,gDACL6W,IAAK,6DACLtd,OAAQ,qCAwBRuzD,QAlCY,CACZC,QAAS,kCAkCTL,WAGF,MAAMM,GAAWpuD,GAAOA,GAAOA,EAAIquD,gBAEnC,MAAMC,GACJ,kBAAOC,CAAYC,EAAMC,GACvB,IAAKA,EAAOhV,OAASgV,EAAOC,UAAW,MAAM,IAAIC,UAAU,sEAC3D,IAAI1jD,GACFA,EAAEwuC,KACFA,EAAIiV,UACJA,GACED,EACAvd,EAAsB,mBAAPjmC,EAAoBA,EAAK,IAAIxN,IAAWA,EAAOypB,MAAM3qB,GAASA,IAAU0O,GAC3F,OAAO,IAAIqjD,GAAUE,EAAM,CAAC/wD,EAAQmxD,KAClC,IAAIC,EACJ,IAAIC,EAAS5d,KAASzzC,GAAUg8C,EAAOiV,EACvC,OAA+D,OAAvDG,EAAoB,MAAVC,OAAsB,EAAIA,EAAOF,IAAmBC,EAAUD,GAEpF,CACA1uD,WAAAA,CAAYsuD,EAAMO,GAChB3vD,KAAKZ,QAAU,EACfY,KAAKovD,KAAOA,EACZpvD,KAAKovD,KAAOA,EACZpvD,KAAKZ,GAAKuwD,CACZ,CACAC,OAAAA,CAAQ/5B,EAAM/hB,GACZ,IAAIzV,EAAS2B,KAAKovD,KAAK1wD,IAAI+6B,GAE3BA,EAAIzG,SAAoB,MAAXlf,OAAuB,EAAIA,EAAQ3W,MAAkB,MAAX2W,OAAuB,EAAIA,EAAQymB,OAAmB,MAAXzmB,OAAuB,EAAIA,EAAQkvB,UACjIwsB,EAASxvD,KAAKZ,GAAGf,EAAQw3B,EAAM/hB,GACnC,QAAe7U,IAAXuwD,GAEJA,IAAW35B,EACT,OAAOA,EAET,IAAKm5B,GAASQ,GAAS,MAAM,IAAID,UAAU,0CAC3C,OAAOC,EAAOI,QAAQ97C,EACxB,EAUF,MAAM+7C,GACJ/uD,WAAAA,CAAYlC,EAAKkV,EAAU,IAQzB,GAPA9T,KAAKpB,SAAW,EAChBoB,KAAK8vD,eAAiB,EACtB9vD,KAAK+uD,aAAe,EACpB/uD,KAAK+vD,eAAiB,EACtB/vD,KAAKslD,UAAY,EACjBtlD,KAAK4oD,YAAc,EACnB5oD,KAAKtB,SAAW,EACG,iBAARE,EAAkB,MAAM,IAAI2wD,UAAU,8BAAgC3wD,GAEjF,GADAoB,KAAKpB,IAAMA,EAAIqU,OACH,KAARrU,EAAY,MAAM,IAAI2wD,UAAU,kCACpCvvD,KAAK8vD,UAlBE,MAkBU9vD,KAAKpB,IAAI,GAC1BoB,KAAK+uD,QAlBA,MAkBU/uD,KAAKpB,IAAI,GACxBoB,KAAK+vD,WAAa/vD,KAAK8vD,YAAc9vD,KAAK+uD,QAE1C/uD,KAAKslD,KAAOtlD,KAAKpB,IAAIiR,OADR7P,KAAK8vD,UArBX,IAqB0C9vD,KAAK+uD,QApBjD,IAoB4E,IAC/CxzD,QAClCyE,KAAK4oD,OAAS5oD,KAAKslD,MAAQsD,GAAMA,OAAC5oD,KAAKslD,MAAM,GAC7CtlD,KAAKtB,IAAMoV,EAAQpV,GACrB,CACAs0B,QAAAA,CAAS71B,EAAOo9B,EAAQyI,GACtB,IAAIv6B,EAASzI,KAAK8vD,UAAY9sB,EAAUhjC,KAAK+uD,QAAU5xD,EAAQo9B,EAG/D,OAFIv6B,KAAK4oD,SAAQngD,EAASzI,KAAK4oD,OAAOngD,GAAU,CAAA,IAC5CzI,KAAKtB,MAAK+J,EAASzI,KAAKtB,IAAI+J,IACzBA,CACT,CASAunD,IAAAA,CAAK7yD,EAAO2W,GACV,OAAO9T,KAAKgzB,SAAS71B,EAAkB,MAAX2W,OAAuB,EAAIA,EAAQymB,OAAmB,MAAXzmB,OAAuB,EAAIA,EAAQkvB,QAC5G,CACA4sB,OAAAA,GACE,OAAO5vD,IACT,CACAiwD,QAAAA,GACE,MAAO,CACLhpD,KAAM,MACNrI,IAAKoB,KAAKpB,IAEd,CACA8D,QAAAA,GACE,MAAO,OAAO1C,KAAKpB,MACrB,CACA,YAAOsxD,CAAM/yD,GACX,OAAOA,GAASA,EAAMgzD,UACxB,EAIFN,GAAUxwD,UAAU8wD,YAAa,EAEjC,MAAMC,GAAWjzD,GAAkB,MAATA,EAE1B,SAASkzD,GAAiBhB,GACxB,SAASiB,GAASnzD,MAChBA,EAAKmoD,KACLA,EAAO,GAAExxC,QACTA,EAAOw5C,cACPA,EAAakC,OACbA,GACCe,EAAO/vD,GACR,MAAM9G,KACJA,EAAIsvD,KACJA,EAAIqD,OACJA,EAAMr+C,QACNA,EAAOwiD,WACPA,GACEnB,EACJ,IAAI90B,OACFA,EAAMyI,QACNA,EAAOytB,WACPA,EAAajB,EAAOb,KAAK8B,WAAUC,kBACnCA,EAAoBlB,EAAOb,KAAK+B,mBAC9B58C,EACJ,MAAM68C,EAAiB,CACrBxzD,QACAo9B,SACAyI,WAEF,SAAS4tB,EAAYC,EAAY,IAC/B,MAAMC,EAAaC,GAAcvuD,OAAO+P,OAAO,CAC7CpV,QACAmwD,gBACAzvD,MAAO2xD,EAAOb,KAAK9wD,MACnBynD,KAAMuL,EAAUvL,MAAQA,EACxBqJ,KAAMa,EAAOb,KACb+B,kBAAmBG,EAAUH,mBAAqBA,GACjDrE,EAAQwE,EAAUxE,QAASsE,GACxBp9C,EAAQ,IAAIg5C,GAAgBA,GAAgBG,YAAYmE,EAAU7iD,SAAWA,EAAS8iD,GAAa3zD,EAAO2zD,EAAWxL,KAAMuL,EAAU5pD,MAAQvN,EAAMo3D,EAAWJ,mBAEpK,OADAn9C,EAAM84C,OAASyE,EACRv9C,CACT,CACA,MAAMy9C,EAAUP,EAAaF,EAAQ/vD,EACrC,IAAIywD,EAAM,CACR3L,OACA/qB,SACAtzB,KAAMvN,EACNo9B,KAAMhjB,EAAQgjB,KACd85B,cACAhB,QAAQl0C,GACCw1C,GAAgBx1C,EAAMi1C,GAE/B78C,UACAw5C,gBACAkC,UAEF,MAAM2B,EAAeC,IACf7E,GAAgBC,QAAQ4E,GAAeJ,EAAQI,GAAwBA,EAA0C5wD,EAAK,MAAjCwwD,EAAQJ,MAE7FS,EAAcn8C,IACdq3C,GAAgBC,QAAQt3C,GAAM87C,EAAQ97C,GAAUq7C,EAAMr7C,IAG5D,GADmBs7C,GAAcJ,GAASjzD,GAExC,OAAOg0D,GAAa,GAEtB,IAAI1oD,EACJ,IACE,IAAI6oD,EAEJ,GADA7oD,EAASugD,EAAKtnD,KAAKuvD,EAAK9zD,EAAO8zD,GACqC,mBAAlC,OAArBK,EAAU7oD,QAAuB,EAAI6oD,EAAQjX,MAAsB,CAC9E,GAAIvmC,EAAQy9C,KACV,MAAM,IAAI/xD,MAAM,6BAA6ByxD,EAAIhqD,sHAEnD,OAAOuqD,QAAQ5B,QAAQnnD,GAAQ4xC,KAAK8W,EAAcE,EACpD,CACD,CAAC,MAAOn8C,GAEP,YADAm8C,EAAYn8C,EAEd,CACAi8C,EAAa1oD,EACf,CAEA,OADA6nD,EAASmB,QAAUpC,EACZiB,CACT,CAGA,SAASS,GAAc1E,EAAQv4C,GAC7B,IAAKu4C,EAAQ,OAAOA,EACpB,IAAK,MAAMztD,KAAO4D,OAAOD,KAAK8pD,GAC5BA,EAAOztD,GAAOsyD,GAAgB7E,EAAOztD,GAAMkV,GAE7C,OAAOu4C,CACT,CACA,SAAS6E,GAAgBx1C,EAAM5H,GAC7B,OAAO+7C,GAAUK,MAAMx0C,GAAQA,EAAKsX,SAASlf,EAAQ3W,MAAO2W,EAAQymB,OAAQzmB,EAAQkvB,SAAWtnB,CACjG,CAEA,SAASg2C,GAAMlC,EAAQlK,EAAMnoD,EAAO6lC,EAAU7lC,GAC5C,IAAIo9B,EAAQo3B,EAAUC,EAGtB,OAAKtM,GAKLjxC,GAAAA,QAAQixC,EAAM,CAACuM,EAAO1I,EAAWvnD,KAC/B,IAAI47C,EAAO2L,EAAY0I,EAAMhiD,MAAM,EAAGgiD,EAAMt2D,OAAS,GAAKs2D,EAMtDC,EAA0B,WAL9BtC,EAASA,EAAOI,QAAQ,CACtB5sB,UACAzI,SACAp9B,WAEmB8J,KACjBy5C,EAAM9+C,EAAUmwD,SAASvU,EAAM,IAAM,EACzC,GAAIgS,EAAOwC,WAAaF,EAAS,CAC/B,GAAIA,IAAYlwD,EAAS,MAAM,IAAIpC,MAAM,uEAAuEoyD,wDAAoEA,SACpL,GAAIz0D,GAASujD,GAAOvjD,EAAM5B,OACxB,MAAM,IAAIiE,MAAM,oDAAoDqyD,mBAAuBvM,gDAE7F/qB,EAASp9B,EACTA,EAAQA,GAASA,EAAMujD,GACvB8O,EAASsC,EAAUtC,EAAOb,KAAK1kD,MAAMy2C,GAAO8O,EAAOwC,SACrD,CAMA,IAAKpwD,EAAS,CACZ,IAAK4tD,EAAOzmD,SAAWymD,EAAOzmD,OAAOy0C,GAAO,MAAM,IAAIh+C,MAAM,yCAAyC8lD,kBAA0BsM,uBAAmCpC,EAAOvoD,UACzKszB,EAASp9B,EACTA,EAAQA,GAASA,EAAMqgD,GACvBgS,EAASA,EAAOzmD,OAAOy0C,EACzB,CACAmU,EAAWnU,EACXoU,EAAgBzI,EAAY,IAAM0I,EAAQ,IAAM,IAAMA,IAEjD,CACLrC,SACAj1B,SACA03B,WAAYN,IAxCI,CAChBp3B,SACA03B,WAAY3M,EACZkK,SAuCJ,CAKA,MAAM0C,WAAqBvQ,IACzBsO,QAAAA,GACE,MAAMjlD,EAAc,GACpB,IAAK,MAAM0Q,KAAQ1b,KAAK3B,SACtB2M,EAAY5I,KAAKytD,GAAUK,MAAMx0C,GAAQA,EAAKu0C,WAAav0C,GAE7D,OAAO1Q,CACT,CACAmnD,UAAAA,CAAWvC,GACT,IAAInnD,EAAS,GACb,IAAK,MAAMiT,KAAQ1b,KAAK3B,SACtBoK,EAAOrG,KAAKwtD,EAAQl0C,IAEtB,OAAOjT,CACT,CACAk9C,KAAAA,GACE,OAAO,IAAIuM,GAAalyD,KAAK3B,SAC/B,CACA+zD,KAAAA,CAAMC,EAAUC,GACd,MAAM9xD,EAAOR,KAAK2lD,QAGlB,OAFA0M,EAASh+C,QAAQlX,GAASqD,EAAKpF,IAAI+B,IACnCm1D,EAAYj+C,QAAQlX,GAASqD,EAAKsqD,OAAO3tD,IAClCqD,CACT,EAIF,SAASmlD,GAAM4M,EAAKC,EAAO,IAAIjI,KAC7B,GAAIyE,GAASuD,KAASA,GAAsB,iBAARA,EAAkB,OAAOA,EAC7D,GAAIC,EAAKpV,IAAImV,GAAM,OAAOC,EAAK1K,IAAIyK,GACnC,IAAIE,EACJ,GAAIF,aAAev+B,KAEjBy+B,EAAO,IAAIz+B,KAAKu+B,EAAI9G,WACpB+G,EAAKzK,IAAIwK,EAAKE,QACT,GAAIF,aAAetH,OAExBwH,EAAO,IAAIxH,OAAOsH,GAClBC,EAAKzK,IAAIwK,EAAKE,QACT,GAAI9wD,MAAMC,QAAQ2wD,GAAM,CAE7BE,EAAO,IAAI9wD,MAAM4wD,EAAIh3D,QACrBi3D,EAAKzK,IAAIwK,EAAKE,GACd,IAAK,IAAItwD,EAAI,EAAGA,EAAIowD,EAAIh3D,OAAQ4G,IAAKswD,EAAKtwD,GAAKwjD,GAAM4M,EAAIpwD,GAAIqwD,EAC/D,MAAO,GAAID,aAAehI,IAAK,CAE7BkI,EAAO,IAAIlI,IACXiI,EAAKzK,IAAIwK,EAAKE,GACd,IAAK,MAAO3M,EAAG4M,KAAMH,EAAI96B,UAAWg7B,EAAK1K,IAAIjC,EAAGH,GAAM+M,EAAGF,GAC3D,MAAO,GAAID,aAAe5Q,IAAK,CAE7B8Q,EAAO,IAAI9Q,IACX6Q,EAAKzK,IAAIwK,EAAKE,GACd,IAAK,MAAMC,KAAKH,EAAKE,EAAKr3D,IAAIuqD,GAAM+M,EAAGF,GACzC,KAAO,MAAID,aAAe/vD,QAMxB,MAAMhD,MAAM,mBAAmB+yD,KAJ/BE,EAAO,CAAA,EACPD,EAAKzK,IAAIwK,EAAKE,GACd,IAAK,MAAO3M,EAAG4M,KAAMlwD,OAAOi1B,QAAQ86B,GAAME,EAAK3M,GAAKH,GAAM+M,EAAGF,EAG/D,CACA,OAAOC,CACT,CAOA,SAASE,GAAmBrN,GAC1B,GAAc,MAARA,IAAgBA,EAAK/pD,OACzB,OAIF,MAAMutD,EAAW,GAEjB,IAAI8J,EAAiB,GAEjBC,GAAa,EAEbC,GAAW,EACf,IAAK,IAAI3wD,EAAI,EAAGA,EAAImjD,EAAK/pD,OAAQ4G,IAAK,CACpC,MAAM4wD,EAAOzN,EAAKnjD,GACL,MAAT4wD,GAAiBD,EASR,MAATC,GAAiBD,EAcR,MAATC,EAKS,MAATA,GAAiBF,GAAeC,EAQpCF,GAAkBG,EANZH,IACF9J,EAAS1mD,KAAKwwD,GACdA,EAAiB,IAPnBE,GAAYA,GAfRF,IAEE,QAAQ5J,KAAK4J,GACf9J,EAAS1mD,KAAKwwD,GAGd9J,EAAS1mD,KAAKwwD,EAAejwD,QAAQ,SAAU,KAEjDiwD,EAAiB,IAEnBC,GAAa,IAlBTD,IACF9J,EAAS1mD,QAAQwwD,EAAerV,MAAM,KAAKnyC,OAAO7L,UAClDqzD,EAAiB,IAEnBC,GAAa,EA+BjB,CAMA,OAHID,GACF9J,EAAS1mD,QAAQwwD,EAAerV,MAAM,KAAKnyC,OAAO7L,UAE7CupD,CACT,CAQA,SAASkK,GAA0Bz/C,EAAO0+C,GACxC,IAAIgB,EACJ,IAAsC,OAA/BA,EAAe1/C,EAAM+4C,SAAkB2G,EAAa13D,SAAWgY,EAAM60B,OAAO7sC,OACjF,OAVJ,SAA8BgY,EAAO0+C,GACnC,MAAM3M,EAAO2M,EAAa,GAAGA,KAAc1+C,EAAM+xC,OAAS/xC,EAAM+xC,KAChE,OAAO/xC,EAAM60B,OAAO1pC,IAAIwW,IAAQ,CAC9BlH,QAASkH,EACTowC,KAAMqN,GAAmBrN,KAE7B,CAIW4N,CAAqB3/C,EAAO0+C,GAErC,MAAM3M,EAAO2M,EAAa,GAAGA,KAAc1+C,EAAM+xC,OAAS/xC,EAAM+xC,KAChE,OAAO/xC,EAAM+4C,MAAM6G,QAAQj+C,GAAO89C,GAA0B99C,EAAKowC,GACnE,CAIA,MAAM8N,GACJtyD,WAAAA,CAAYgT,GACV9T,KAAKiH,UAAY,EACjBjH,KAAKqzD,KAAO,GACZrzD,KAAKszD,WAAa,EAClBtzD,KAAK8tB,gBAAkB,EACvB9tB,KAAKuzD,WAAa,GAClBvzD,KAAKwzD,aAAe,EACpBxzD,KAAKyzD,cAAgB,GACrBzzD,KAAK0zD,WAAa,IAAIxB,GACtBlyD,KAAK2zD,WAAa,IAAIzB,GACtBlyD,KAAK4zD,eAAiBpxD,OAAOw8B,OAAO,MACpCh/B,KAAK6zD,gBAAkB,EACvB7zD,KAAK2uD,UAAY,EACjB3uD,KAAKszD,MAAQ,GACbtzD,KAAK8tB,WAAa,GAClB9tB,KAAK8zD,aAAa,KAChB9zD,KAAK+zD,UAAUhH,GAAMM,WAEvBrtD,KAAKiH,KAAO6M,EAAQ7M,KACpBjH,KAAK6zD,WAAa//C,EAAQg+B,MAC1B9xC,KAAK2uD,KAAOnsD,OAAO+P,OAAO,CACxByhD,OAAO,EACPC,QAAQ,EACRxD,YAAY,EACZyD,WAAW,EACXxD,mBAAmB,EACnByD,UAAU,EACVC,UAAU,EACVC,QAAQ,GACI,MAAXvgD,OAAuB,EAAIA,EAAQ66C,MACtC3uD,KAAK8zD,aAAal6D,IAChBA,EAAE06D,eAEN,CAGA,SAAIC,GACF,OAAOv0D,KAAKiH,IACd,CACA0+C,KAAAA,CAAMgJ,GACJ,GAAI3uD,KAAKwzD,QAEP,OADI7E,GAAMnsD,OAAO+P,OAAOvS,KAAK2uD,KAAMA,GAC5B3uD,KAKT,MAAMQ,EAAOgC,OAAOw8B,OAAOx8B,OAAOgyD,eAAex0D,OAgBjD,OAbAQ,EAAKyG,KAAOjH,KAAKiH,KACjBzG,EAAKqzD,WAAa7zD,KAAK6zD,WACvBrzD,EAAKkzD,WAAa1zD,KAAK0zD,WAAW/N,QAClCnlD,EAAKmzD,WAAa3zD,KAAK2zD,WAAWhO,QAClCnlD,EAAKizD,cAAgBjxD,OAAO+P,OAAO,CAAA,EAAIvS,KAAKyzD,eAC5CjzD,EAAKozD,eAAiBpxD,OAAO+P,OAAO,CAAA,EAAIvS,KAAK4zD,gBAG7CpzD,EAAK6yD,KAAO,IAAIrzD,KAAKqzD,MACrB7yD,EAAK+yD,WAAa,IAAIvzD,KAAKuzD,YAC3B/yD,EAAK8yD,MAAQ,IAAItzD,KAAKszD,OACtB9yD,EAAKstB,WAAa,IAAI9tB,KAAK8tB,YAC3BttB,EAAKmuD,KAAOhJ,GAAMnjD,OAAO+P,OAAO,CAAE,EAAEvS,KAAK2uD,KAAMA,IACxCnuD,CACT,CACA3C,KAAAA,CAAMA,GACJ,IAAI2C,EAAOR,KAAK2lD,QAEhB,OADAnlD,EAAKmuD,KAAK9wD,MAAQA,EACX2C,CACT,CACAi0D,IAAAA,IAAQltD,GACN,GAAoB,IAAhBA,EAAKhM,OAAc,OAAOyE,KAAK2uD,KAAK8F,KACxC,IAAIj0D,EAAOR,KAAK2lD,QAEhB,OADAnlD,EAAKmuD,KAAK8F,KAAOjyD,OAAO+P,OAAO/R,EAAKmuD,KAAK8F,MAAQ,CAAE,EAAEltD,EAAK,IACnD/G,CACT,CACAszD,YAAAA,CAAa10D,GACX,IAAIs1D,EAAS10D,KAAKwzD,QAClBxzD,KAAKwzD,SAAU,EACf,IAAI/qD,EAASrJ,EAAGY,MAEhB,OADAA,KAAKwzD,QAAUkB,EACRjsD,CACT,CACAtP,MAAAA,CAAOq2D,GACL,IAAKA,GAAUA,IAAWxvD,KAAM,OAAOA,KACvC,GAAIwvD,EAAOvoD,OAASjH,KAAKiH,MAAsB,UAAdjH,KAAKiH,KAAkB,MAAM,IAAIsoD,UAAU,wDAAwDvvD,KAAKiH,YAAYuoD,EAAOvoD,QAC5J,IAAI4uB,EAAO71B,KACP20D,EAAWnF,EAAO7J,QACtB,MAAMiP,EAAapyD,OAAO+P,OAAO,CAAA,EAAIsjB,EAAK84B,KAAMgG,EAAShG,MAqBzD,OApBAgG,EAAShG,KAAOiG,EAChBD,EAASlB,cAAgBjxD,OAAO+P,OAAO,CAAA,EAAIsjB,EAAK49B,cAAekB,EAASlB,eAIxEkB,EAASjB,WAAa79B,EAAK69B,WAAWtB,MAAM5C,EAAOkE,WAAYlE,EAAOmE,YACtEgB,EAAShB,WAAa99B,EAAK89B,WAAWvB,MAAM5C,EAAOmE,WAAYnE,EAAOkE,YAGtEiB,EAASrB,MAAQz9B,EAAKy9B,MACtBqB,EAASf,eAAiB/9B,EAAK+9B,eAI/Be,EAASb,aAAatzD,IACpBgvD,EAAO8D,MAAMj/C,QAAQjV,IACnBoB,EAAKwoD,KAAK5pD,EAAGqyD,aAGjBkD,EAAS7mC,WAAa,IAAI+H,EAAK/H,cAAe6mC,EAAS7mC,YAChD6mC,CACT,CACAE,MAAAA,CAAOnC,GACL,OAAS,MAALA,KACE1yD,KAAK2uD,KAAKwF,UAAkB,OAANzB,OACtB1yD,KAAK2uD,KAAKyF,eAAkBn1D,IAANyzD,GAGrB1yD,KAAK6zD,WAAWnB,EACzB,CACA9C,OAAAA,CAAQ97C,GACN,IAAI07C,EAASxvD,KACb,GAAIwvD,EAAO+D,WAAWh4D,OAAQ,CAC5B,IAAIg4D,EAAa/D,EAAO+D,WACxB/D,EAASA,EAAO7J,QAChB6J,EAAO+D,WAAa,GACpB/D,EAAS+D,EAAW74C,OAAO,CAACo6C,EAAY/mD,IAAcA,EAAU6hD,QAAQkF,EAAYhhD,GAAU07C,GAC9FA,EAASA,EAAOI,QAAQ97C,EAC1B,CACA,OAAO07C,CACT,CACAmB,cAAAA,CAAe78C,GACb,IAAIihD,EAAiBC,EAAqBC,EAAoBC,EAC9D,OAAO1yD,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CAChCgjB,KAAMhjB,EAAQgjB,MAAQ,GACtBm9B,OAA8C,OAArCc,EAAkBjhD,EAAQmgD,QAAkBc,EAAkB/0D,KAAK2uD,KAAKsF,OACjFxD,WAA0D,OAA7CuE,EAAsBlhD,EAAQ28C,YAAsBuE,EAAsBh1D,KAAK2uD,KAAK8B,WACjGyD,UAAuD,OAA3Ce,EAAqBnhD,EAAQogD,WAAqBe,EAAqBj1D,KAAK2uD,KAAKuF,UAC7FxD,kBAA0E,OAAtDwE,EAAwBphD,EAAQ48C,mBAA6BwE,EAAwBl1D,KAAK2uD,KAAK+B,mBAEvH,CAMAV,IAAAA,CAAK7yD,EAAO2W,EAAU,IACpB,IAAIqhD,EAAiBn1D,KAAK4vD,QAAQptD,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CAC3D3W,WAKEi4D,EAAsC,uBAAnBthD,EAAQuhD,OAC3B5sD,EAAS0sD,EAAeG,MAAMn4D,EAAO2W,GACzC,IAAuB,IAAnBA,EAAQuhD,SAAqBF,EAAeN,OAAOpsD,GAAS,CAC9D,GAAI2sD,GAAoBhF,GAAS3nD,GAC/B,OAAOA,EAET,IAAI8sD,EAAiB5J,GAAWxuD,GAC5Bq4D,EAAkB7J,GAAWljD,GACjC,MAAM,IAAI8mD,UAAU,gBAAgBz7C,EAAQwxC,MAAQ,yEAA8E6P,EAAeluD,+BAAoCsuD,QAAuBC,IAAoBD,EAAiB,mBAAmBC,IAAoB,IAC1R,CACA,OAAO/sD,CACT,CACA6sD,KAAAA,CAAMG,EAAU3hD,GACd,IAAI3W,OAAqB8B,IAAbw2D,EAAyBA,EAAWz1D,KAAK8tB,WAAWpT,OAAO,CAACg7C,EAAWt2D,IAAOA,EAAGsC,KAAK1B,KAAM01D,EAAWD,EAAUz1D,KAAM8T,GAAU2hD,GAI7I,YAHcx2D,IAAV9B,IACFA,EAAQ6C,KAAK21D,WAAW7hD,IAEnB3W,CACT,CACAy4D,SAAAA,CAAUC,EAAQ/hD,EAAU,CAAA,EAAIy8C,EAAO/vD,GACrC,IAAI8kD,KACFA,EAAIgI,cACJA,EAAgBuI,EAAM5B,OACtBA,EAASj0D,KAAK2uD,KAAKsF,QACjBngD,EACA3W,EAAQ04D,EACP5B,IACH92D,EAAQ6C,KAAKs1D,MAAMn4D,EAAOqF,OAAO+P,OAAO,CACtC8iD,QAAQ,GACPvhD,KAEL,IAAIgiD,EAAe,GACnB,IAAK,IAAI9M,KAAQxmD,OAAOnE,OAAO2B,KAAKyzD,eAC9BzK,GAAM8M,EAAa1zD,KAAK4mD,GAE9BhpD,KAAK+1D,SAAS,CACZzQ,OACAnoD,QACAmwD,gBACAx5C,UACAw/C,MAAOwC,GACNvF,EAAOyF,IAER,GAAIA,EAAcz6D,OAChB,OAAOiF,EAAKw1D,EAAe74D,GAE7B6C,KAAK+1D,SAAS,CACZzQ,OACAnoD,QACAmwD,gBACAx5C,UACAw/C,MAAOtzD,KAAKszD,OACX/C,EAAO/vD,IAEd,CAMAu1D,QAAAA,CAASE,EAAY1F,EAAO/vD,GAC1B,IAAI01D,GAAQ,GACR5C,MACFA,EAAKn2D,MACLA,EAAKmwD,cACLA,EAAahI,KACbA,EAAIxxC,QACJA,GACEmiD,EACAE,EAAYC,IACVF,IACJA,GAAQ,EACR3F,EAAM6F,EAAKj5D,KAETk5D,EAAWD,IACTF,IACJA,GAAQ,EACR11D,EAAK41D,EAAKj5D,KAERm5D,EAAQhD,EAAM/3D,OACdg7D,EAAe,GACnB,IAAKD,EAAO,OAAOD,EAAS,IAC5B,IAAI9uD,EAAO,CACTpK,QACAmwD,gBACAhI,OACAxxC,UACA07C,OAAQxvD,MAEV,IAAK,IAAImC,EAAI,EAAGA,EAAImxD,EAAM/3D,OAAQ4G,KAEhC6mD,EADasK,EAAMnxD,IACdoF,EAAM4uD,EAAW,SAAuBjhD,GACvCA,IACFvT,MAAMC,QAAQsT,GAAOqhD,EAAan0D,QAAQ8S,GAAOqhD,EAAan0D,KAAK8S,MAE/DohD,GAAS,GACbD,EAASE,EAEb,EAEJ,CACAC,YAAAA,EAAa53D,IACXA,EAAGiX,MACHA,EAAK0kB,OACLA,EAAM03B,WACNA,EAAUwE,eACVA,EAAc3iD,QACdA,IAEA,MAAMgyC,EAAW,MAAPlnD,EAAcA,EAAMiX,EAC9B,GAAS,MAALiwC,EACF,MAAMyJ,UAAU,wDAElB,MAAMmH,EAAuB,iBAAN5Q,EACvB,IAAI3oD,EAAQo9B,EAAOurB,GACnB,MAAM6Q,EAAcn0D,OAAO+P,OAAO,CAAA,EAAIuB,EAAS,CAI7CmgD,QAAQ,EACR15B,SACAp9B,QACAmwD,cAAemJ,EAAe3Q,GAG9BlnD,SAAKK,EAEL,CAACy3D,EAAU,QAAU,OAAQ5Q,EAC7BR,KAAMoR,GAAW5Q,EAAEtrB,SAAS,KAAO,GAAGy3B,GAAc,MAAMyE,EAAU5Q,EAAI,IAAIA,SAAWmM,EAAa,GAAGA,KAAgB,IAAMrzD,IAE/H,MAAO,CAAClB,EAAG6yD,EAAO/vD,IAASR,KAAK4vD,QAAQ+G,GAAaf,UAAUz4D,EAAOw5D,EAAapG,EAAO/vD,EAC5F,CACA8vD,QAAAA,CAASnzD,EAAO2W,GACd,IAAI8iD,EACJ,IAAIpH,EAASxvD,KAAK4vD,QAAQptD,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CACnD3W,WAEEuzD,EAAuG,OAAlFkG,EAAoC,MAAX9iD,OAAuB,EAAIA,EAAQ48C,mBAA6BkG,EAAyBpH,EAAOb,KAAK+B,kBACvJ,OAAO,IAAIc,QAAQ,CAAC5B,EAASiH,IAAWrH,EAAOoG,UAAUz4D,EAAO2W,EAAS,CAACP,EAAOujD,KAC3EvK,GAAgBC,QAAQj5C,KAAQA,EAAMpW,MAAQ25D,GAClDD,EAAOtjD,IACN,CAAC60B,EAAQ2uB,KACN3uB,EAAO7sC,OAAQs7D,EAAO,IAAItK,GAAgBnkB,EAAQ2uB,OAAW93D,OAAWA,EAAWyxD,IAAyBd,EAAQmH,KAE5H,CACAC,YAAAA,CAAa75D,EAAO2W,GAClB,IAAImjD,EACJ,IAGIxuD,EAHA+mD,EAASxvD,KAAK4vD,QAAQptD,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CACnD3W,WAGEuzD,EAAuG,OAAlFuG,EAAoC,MAAXnjD,OAAuB,EAAIA,EAAQ48C,mBAA6BuG,EAAyBzH,EAAOb,KAAK+B,kBAUvJ,OATAlB,EAAOoG,UAAUz4D,EAAOqF,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CACjDy9C,MAAM,IACJ,CAACh+C,EAAOujD,KAEV,MADIvK,GAAgBC,QAAQj5C,KAAQA,EAAMpW,MAAQ25D,GAC5CvjD,GACL,CAAC60B,EAAQ2uB,KACV,GAAI3uB,EAAO7sC,OAAQ,MAAM,IAAIgxD,GAAgBnkB,EAAQjrC,OAAO8B,OAAWA,EAAWyxD,GAClFjoD,EAASsuD,IAEJtuD,CACT,CACAyuD,OAAAA,CAAQ/5D,EAAO2W,GACb,OAAO9T,KAAKswD,SAASnzD,EAAO2W,GAASumC,KAAK,KAAM,EAAMnlC,IACpD,GAAIq3C,GAAgBC,QAAQt3C,GAAM,OAAO,EACzC,MAAMA,GAEV,CACAiiD,WAAAA,CAAYh6D,EAAO2W,GACjB,IAEE,OADA9T,KAAKg3D,aAAa75D,EAAO2W,IAClB,CACR,CAAC,MAAOoB,GACP,GAAIq3C,GAAgBC,QAAQt3C,GAAM,OAAO,EACzC,MAAMA,CACR,CACF,CACAkiD,WAAAA,CAAYtjD,GACV,IAAI5M,EAAelH,KAAK2uD,KAAK3B,QAC7B,OAAoB,MAAhB9lD,EACKA,EAEsB,mBAAjBA,EAA8BA,EAAaxF,KAAK1B,KAAM8T,GAAW6xC,GAAMz+C,EACvF,CACAyuD,UAAAA,CAAW7hD,GAIT,OADa9T,KAAK4vD,QAAQ97C,GAAW,CAAE,GACzBsjD,YAAYtjD,EAC5B,CACAk5C,QAAQqK,GACN,OAAyB,IAArB7vD,UAAUjM,OACLyE,KAAKo3D,cAEHp3D,KAAK2lD,MAAM,CACpBqH,QAASqK,GAGb,CACApD,MAAAA,CAAOqD,GAAW,GAChB,OAAOt3D,KAAK2lD,MAAM,CAChBsO,OAAQqD,GAEZ,CACAC,WAAAA,CAAYpD,EAAUnmD,GACpB,MAAMxN,EAAOR,KAAK2lD,MAAM,CACtBwO,aASF,OAPA3zD,EAAKizD,cAAcU,SAAW9D,GAAiB,CAC7CriD,UACAtU,KAAM,WACNsvD,IAAAA,CAAK7rD,GACH,OAAiB,OAAVA,GAAiB6C,KAAKwvD,OAAOb,KAAKwF,QAC3C,IAEK3zD,CACT,CACAg3D,WAAAA,CAAYpD,EAAUpmD,GACpB,MAAMxN,EAAOR,KAAK2lD,MAAM,CACtByO,aASF,OAPA5zD,EAAKizD,cAAc+D,YAAcnH,GAAiB,CAChDriD,UACAtU,KAAM,cACNsvD,IAAAA,CAAK7rD,GACH,YAAiB8B,IAAV9B,GAAsB6C,KAAKwvD,OAAOb,KAAKyF,QAChD,IAEK5zD,CACT,CACA4zD,QAAAA,GACE,OAAOp0D,KAAKw3D,aAAY,EAC1B,CACAvK,OAAAA,CAAQj/C,EAAU++C,GAAME,SACtB,OAAOjtD,KAAKw3D,aAAY,EAAOxpD,EACjC,CACAmmD,QAAAA,GACE,OAAOn0D,KAAKu3D,aAAY,EAC1B,CACAjD,WAAAA,CAAYtmD,EAAU++C,GAAMG,SAC1B,OAAOltD,KAAKu3D,aAAY,EAAOvpD,EACjC,CACAwmB,QAAAA,CAASxmB,EAAU++C,GAAMv4B,UACvB,OAAOx0B,KAAK2lD,QAAQmO,aAAatzD,GAAQA,EAAK8zD,YAAYtmD,GAASi/C,QAAQj/C,GAC7E,CACAypD,WAAAA,GACE,OAAOz3D,KAAK2lD,QAAQmO,aAAatzD,GAAQA,EAAK2zD,WAAWC,WAC3D,CACAhmB,SAAAA,CAAUhvC,GACR,IAAIoB,EAAOR,KAAK2lD,QAEhB,OADAnlD,EAAKstB,WAAW1rB,KAAKhD,GACdoB,CACT,CAgBAwoD,IAAAA,IAAQzhD,GACN,IAAImwD,EAsBJ,GAnBIA,EAFgB,IAAhBnwD,EAAKhM,OACgB,mBAAZgM,EAAK,GACP,CACLyhD,KAAMzhD,EAAK,IAGNA,EAAK,GAEW,IAAhBA,EAAKhM,OACP,CACL7B,KAAM6N,EAAK,GACXyhD,KAAMzhD,EAAK,IAGN,CACL7N,KAAM6N,EAAK,GACXyG,QAASzG,EAAK,GACdyhD,KAAMzhD,EAAK,SAGMtI,IAAjBy4D,EAAK1pD,UAAuB0pD,EAAK1pD,QAAU++C,GAAMC,SAC5B,mBAAd0K,EAAK1O,KAAqB,MAAM,IAAIuG,UAAU,mCACzD,IAAI/uD,EAAOR,KAAK2lD,QACZ2K,EAAWD,GAAiBqH,GAC5BC,EAAcD,EAAKE,WAAaF,EAAKh+D,OAA2C,IAAnC8G,EAAKozD,eAAe8D,EAAKh+D,MAC1E,GAAIg+D,EAAKE,YACFF,EAAKh+D,KAAM,MAAM,IAAI61D,UAAU,qEAWtC,OATImI,EAAKh+D,OAAM8G,EAAKozD,eAAe8D,EAAKh+D,QAAUg+D,EAAKE,WACvDp3D,EAAK8yD,MAAQ9yD,EAAK8yD,MAAMloD,OAAOhM,IAC7B,GAAIA,EAAGqyD,QAAQ/3D,OAASg+D,EAAKh+D,KAAM,CACjC,GAAIi+D,EAAa,OAAO,EACxB,GAAIv4D,EAAGqyD,QAAQzI,OAASsH,EAASmB,QAAQzI,KAAM,OAAO,CACxD,CACA,OAAO,IAETxoD,EAAK8yD,MAAMlxD,KAAKkuD,GACT9vD,CACT,CACAq3D,IAAAA,CAAKt1D,EAAMuR,GACJnS,MAAMC,QAAQW,IAAyB,iBAATA,IACjCuR,EAAUvR,EACVA,EAAO,KAET,IAAI/B,EAAOR,KAAK2lD,QACZ0N,EAAOzH,GAAQrpD,GAAM7D,IAAIE,GAAO,IAAIixD,GAAUjxD,IAMlD,OALAy0D,EAAKh/C,QAAQyjD,IAEPA,EAAI/H,WAAWvvD,EAAK6yD,KAAKjxD,KAAK01D,EAAIl5D,OAExC4B,EAAK+yD,WAAWnxD,KAAwB,mBAAZ0R,EAAyB,IAAIo7C,GAAUmE,EAAMv/C,GAAWo7C,GAAUC,YAAYkE,EAAMv/C,IACzGtT,CACT,CACAuzD,SAAAA,CAAU/lD,GACR,IAAIxN,EAAOR,KAAK2lD,QAchB,OAbAnlD,EAAKizD,cAAcM,UAAY1D,GAAiB,CAC9CriD,UACAtU,KAAM,YACN82D,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,QAAK6C,KAAKwvD,OAAOqE,WAAW12D,IAAe6C,KAAK4wD,YAAY,CAC1DvE,OAAQ,CACNplD,KAAMjH,KAAKwvD,OAAOvoD,OAIxB,IAEKzG,CACT,CACA2sD,KAAAA,CAAM4K,EAAO/pD,EAAU++C,GAAMI,OAC3B,IAAI3sD,EAAOR,KAAK2lD,QAoBhB,OAnBAoS,EAAM1jD,QAAQg3C,IACZ7qD,EAAKkzD,WAAWt4D,IAAIiwD,GACpB7qD,EAAKmzD,WAAW7I,OAAOO,KAEzB7qD,EAAKizD,cAAcuE,UAAY3H,GAAiB,CAC9CriD,UACAtU,KAAM,QACN82D,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,IAAI86D,EAASj4D,KAAKwvD,OAAOkE,WACrBwE,EAAWD,EAAO9F,WAAWnyD,KAAK4vD,SACtC,QAAOsI,EAAS19B,SAASr9B,IAAgB6C,KAAK4wD,YAAY,CACxDvE,OAAQ,CACNhuD,OAAQsD,MAAMm1B,KAAKmhC,GAAQ51D,KAAK,MAChC61D,aAGN,IAEK13D,CACT,CACA4sD,QAAAA,CAAS2K,EAAO/pD,EAAU++C,GAAMK,UAC9B,IAAI5sD,EAAOR,KAAK2lD,QAoBhB,OAnBAoS,EAAM1jD,QAAQg3C,IACZ7qD,EAAKmzD,WAAWv4D,IAAIiwD,GACpB7qD,EAAKkzD,WAAW5I,OAAOO,KAEzB7qD,EAAKizD,cAAc0E,UAAY9H,GAAiB,CAC9CriD,UACAtU,KAAM,WACNsvD,IAAAA,CAAK7rD,GACH,IAAIi7D,EAAWp4D,KAAKwvD,OAAOmE,WACvBuE,EAAWE,EAASjG,WAAWnyD,KAAK4vD,SACxC,OAAIsI,EAAS19B,SAASr9B,IAAe6C,KAAK4wD,YAAY,CACpDvE,OAAQ,CACNhuD,OAAQsD,MAAMm1B,KAAKshC,GAAU/1D,KAAK,MAClC61D,aAIN,IAEK13D,CACT,CACAwzD,KAAAA,CAAMA,GAAQ,GACZ,IAAIxzD,EAAOR,KAAK2lD,QAEhB,OADAnlD,EAAKmuD,KAAKqF,MAAQA,EACXxzD,CACT,CAOAyvD,QAAAA,CAASn8C,GACP,MAAMtT,GAAQsT,EAAU9T,KAAK4vD,QAAQ97C,GAAW9T,MAAM2lD,SAChD9nD,MACJA,EAAK42D,KACLA,EAAIL,SACJA,EAAQD,SACRA,GACE3zD,EAAKmuD,KAkBT,MAjBoB,CAClB8F,OACA52D,QACAu2D,WACAD,WACAnH,QAASxsD,EAAKm1D,WAAW7hD,GACzB7M,KAAMzG,EAAKyG,KACXkmD,MAAO3sD,EAAKkzD,WAAWzD,WACvB7C,SAAU5sD,EAAKmzD,WAAW1D,WAC1BqD,MAAO9yD,EAAK8yD,MAAMloD,OAAO,CAACqH,EAAGiuC,EAAKjlC,IAASA,EAAKxf,UAAUo8D,GAAKA,EAAE5G,QAAQ/3D,OAAS+Y,EAAEg/C,QAAQ/3D,QAAUgnD,GAAKhiD,IAAIU,IAC7G,MAAMitD,EAASjtD,EAAGqyD,QAAQpF,QAAUv4C,EAAUi9C,GAAcvuD,OAAO+P,OAAO,CAAE,EAAEnT,EAAGqyD,QAAQpF,QAASv4C,GAAW1U,EAAGqyD,QAAQpF,OACxH,MAAO,CACL3yD,KAAM0F,EAAGqyD,QAAQ/3D,KACjB2yD,YAKR,CACA,cAAK,GACH,MAAMmD,EAASxvD,KAsBf,MArBiB,CACfqhC,QAAS,EACTi3B,OAAQ,MACR,cAAMhI,CAASnzD,GACb,IAIE,MAAO,CACLA,YAJmBqyD,EAAOc,SAASnzD,EAAO,CAC1CszD,YAAY,IAKf,CAAC,MAAOv7C,GACP,GAAIA,aAAeq3C,GACjB,MAAO,CACLgM,OAAQvF,GAA0B99C,IAGtC,MAAMA,CACR,CACF,EAGJ,EAGFk+C,GAAO/zD,UAAU4vD,iBAAkB,EACnC,IAAK,MAAMuJ,IAAU,CAAC,WAAY,gBAAiBpF,GAAO/zD,UAAU,GAAGm5D,OAAc,SAAUlT,EAAMnoD,EAAO2W,EAAU,IACpH,MAAMymB,OACJA,EAAM03B,WACNA,EAAUzC,OACVA,GACEkC,GAAM1xD,KAAMslD,EAAMnoD,EAAO2W,EAAQkvB,SACrC,OAAOwsB,EAAOgJ,GAAQj+B,GAAUA,EAAO03B,GAAazvD,OAAO+P,OAAO,CAAE,EAAEuB,EAAS,CAC7EymB,SACA+qB,SAEJ,EACA,IAAK,MAAM59C,IAAS,CAAC,SAAU,MAAO0rD,GAAO/zD,UAAUqI,GAAS0rD,GAAO/zD,UAAU8tD,MACjF,IAAK,MAAMzlD,IAAS,CAAC,MAAO,QAAS0rD,GAAO/zD,UAAUqI,GAAS0rD,GAAO/zD,UAAU+tD,SAwGhF,MAAMqL,GAAS,+IAgBf,SAASC,GAAgB5+D,GACvB,IAAI6+D,EAAuBC,EAC3B,MAAMC,EAAcJ,GAAOx/B,KAAKn/B,GAChC,OAAK++D,EAIE,CACLC,KAAMC,GAASF,EAAY,IAC3BG,MAAOD,GAASF,EAAY,GAAI,GAAK,EACrCI,IAAKF,GAASF,EAAY,GAAI,GAC9B3+D,KAAM6+D,GAASF,EAAY,IAC3B1+D,OAAQ4+D,GAASF,EAAY,IAC7Bz+D,OAAQ2+D,GAASF,EAAY,IAC7BK,YAAaL,EAAY,GAEzBE,GAASF,EAAY,GAAGM,UAAU,EAAG,IAAM,EAC3CC,UAAiH,OAArGT,EAA4D,OAAnCC,EAAgBC,EAAY,SAAmB,EAAID,EAAcr9D,QAAkBo9D,OAAwB15D,EAChJo6D,EAAGR,EAAY,SAAM55D,EACrBq6D,UAAWT,EAAY,SAAM55D,EAC7Bs6D,WAAYR,GAASF,EAAY,KACjCW,aAAcT,GAASF,EAAY,MAlBZ,IAoB3B,CACA,SAASE,GAASxtD,EAAKrE,EAAe,GACpC,OAAO4I,OAAOvE,IAAQrE,CACxB,CAGA,IAAIuyD,GAEJ,wIACIC,GAEJ,yqCAGIC,GAAQ,sHAIRC,GAAe,IAAI3O,OAAO,oFAC1B4O,GAAY18D,GAASizD,GAASjzD,IAAUA,IAAUA,EAAM8V,OACxD6mD,GAAe,CAAA,EAAGp3D,WACtB,SAASq3D,KACP,OAAO,IAAIC,EACb,CACA,MAAMA,WAAqB5G,GACzBtyD,WAAAA,GACE6T,MAAM,CACJ1N,KAAM,SACN6qC,MAAM30C,IACAA,aAAiBoE,SAAQpE,EAAQA,EAAM88D,WACnB,iBAAV98D,KAGlB6C,KAAK8zD,aAAa,KAChB9zD,KAAKouC,UAAU,CAACjxC,EAAO+8D,KACrB,IAAKl6D,KAAK2uD,KAAK0F,QAAUr0D,KAAK60D,OAAO13D,GAAQ,OAAOA,EAGpD,GAAIwE,MAAMC,QAAQzE,GAAQ,OAAOA,EACjC,MAAMg9D,EAAoB,MAATh9D,GAAiBA,EAAMuF,SAAWvF,EAAMuF,WAAavF,EAGtE,OAAIg9D,IAAaL,GAAqB38D,EAC/Bg9D,KAGb,CACA3lC,QAAAA,CAASxmB,GACP,OAAO2G,MAAM6f,SAASxmB,GAAS8lD,aAAatE,GAAUA,EAAOxG,KAAK,CAChEh7C,QAASA,GAAW++C,GAAMv4B,SAC1B96B,KAAM,WACN82D,YAAY,EACZxH,KAAM7rD,KAAWA,EAAM5B,SAE3B,CACAk8D,WAAAA,GACE,OAAO9iD,MAAM8iD,cAAc3D,aAAatE,IACtCA,EAAO8D,MAAQ9D,EAAO8D,MAAMloD,OAAOtO,GAAwB,aAAnBA,EAAE20D,QAAQ/3D,MAC3C81D,GAEX,CACAj0D,MAAAA,CAAOA,EAAQyS,EAAUw/C,GAAOjyD,QAC9B,OAAOyE,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,SACNk+D,WAAW,EACXvL,OAAQ,CACN9wD,UAEFi1D,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,EAAM5B,SAAWyE,KAAK4vD,QAAQr0D,EACvC,GAEJ,CACAyG,GAAAA,CAAIA,EAAKgM,EAAUw/C,GAAOxrD,KACxB,OAAOhC,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNrqD,OAEFwuD,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,EAAM5B,QAAUyE,KAAK4vD,QAAQ5tD,EACtC,GAEJ,CACA6W,GAAAA,CAAIA,EAAK7K,EAAUw/C,GAAO30C,KACxB,OAAO7Y,KAAKgpD,KAAK,CACftvD,KAAM,MACNk+D,WAAW,EACX5pD,UACAq+C,OAAQ,CACNxzC,OAEF23C,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,EAAM5B,QAAUyE,KAAK4vD,QAAQ/2C,EACtC,GAEJ,CACA40C,OAAAA,CAAQ2M,EAAOtmD,GACb,IACI9F,EACAtU,EAFA2gE,GAAqB,EAczB,OAXIvmD,IACqB,iBAAZA,IAEPumD,sBAAqB,EACrBrsD,UACAtU,QACEoa,GAEJ9F,EAAU8F,GAGP9T,KAAKgpD,KAAK,CACftvD,KAAMA,GAAQ,UACdsU,QAASA,GAAWw/C,GAAOC,QAC3BpB,OAAQ,CACN+N,SAEF5J,YAAY,EACZxH,KAAM7rD,GAAmB,KAAVA,GAAgBk9D,IAA+C,IAAzBl9D,EAAMw/C,OAAOyd,IAEtE,CACA1M,KAAAA,CAAM1/C,EAAUw/C,GAAOE,OACrB,OAAO1tD,KAAKytD,QAAQgM,GAAQ,CAC1B//D,KAAM,QACNsU,UACAqsD,oBAAoB,GAExB,CACA1M,GAAAA,CAAI3/C,EAAUw/C,GAAOG,KACnB,OAAO3tD,KAAKytD,QAAQiM,GAAM,CACxBhgE,KAAM,MACNsU,UACAqsD,oBAAoB,GAExB,CACAzM,IAAAA,CAAK5/C,EAAUw/C,GAAOI,MACpB,OAAO5tD,KAAKytD,QAAQkM,GAAO,CACzBjgE,KAAM,OACNsU,UACAqsD,oBAAoB,GAExB,CACAxM,QAAAA,CAAS/5C,GACP,IACIwmD,EACAlB,EAFAprD,EAAU,GAcd,OAXI8F,IACqB,iBAAZA,IAEP9F,UAAU,GACVssD,eAAc,EACdlB,aACEtlD,GAEJ9F,EAAU8F,GAGP9T,KAAKytD,QAAQmM,GAAc,CAChClgE,KAAM,WACNsU,QAASA,GAAWw/C,GAAOK,SAC3BwM,oBAAoB,IACnBrR,KAAK,CACNtvD,KAAM,kBACNsU,QAASA,GAAWw/C,GAAOO,gBAC3B1B,OAAQ,CACNiO,eAEF9J,YAAY,EACZxH,KAAM7rD,IACJ,IAAKA,GAASm9D,EAAa,OAAO,EAClC,MAAMC,EAAS7B,GAAgBv7D,GAC/B,QAAKo9D,KACIA,EAAOlB,KAEjBrQ,KAAK,CACNtvD,KAAM,qBACNsU,QAASA,GAAWw/C,GAAOM,mBAC3BzB,OAAQ,CACN+M,aAEF5I,YAAY,EACZxH,KAAM7rD,IACJ,IAAKA,GAAsB8B,MAAbm6D,EAAwB,OAAO,EAC7C,MAAMmB,EAAS7B,GAAgBv7D,GAC/B,QAAKo9D,GACEA,EAAOnB,YAAcA,IAGlC,CAGAoB,MAAAA,GACE,OAAOx6D,KAAKgtD,QAAQ,IAAI5e,UAAUid,GAAe,OAARA,EAAe,GAAKA,EAC/D,CACAp4C,IAAAA,CAAKjF,EAAUw/C,GAAOv6C,MACpB,OAAOjT,KAAKouC,UAAUid,GAAc,MAAPA,EAAcA,EAAIp4C,OAASo4C,GAAKrC,KAAK,CAChEh7C,UACAtU,KAAM,OACNsvD,KAAM6Q,IAEV,CACA7L,SAAAA,CAAUhgD,EAAUw/C,GAAOQ,WACzB,OAAOhuD,KAAKouC,UAAUjxC,GAAUizD,GAASjzD,GAA+BA,EAAtBA,EAAMu9B,eAAuBsuB,KAAK,CAClFh7C,UACAtU,KAAM,cACNk+D,WAAW,EACXpH,YAAY,EACZxH,KAAM7rD,GAASizD,GAASjzD,IAAUA,IAAUA,EAAMu9B,eAEtD,CACAuzB,SAAAA,CAAUjgD,EAAUw/C,GAAOS,WACzB,OAAOjuD,KAAKouC,UAAUjxC,GAAUizD,GAASjzD,GAA+BA,EAAtBA,EAAMysD,eAAuBZ,KAAK,CAClFh7C,UACAtU,KAAM,cACNk+D,WAAW,EACXpH,YAAY,EACZxH,KAAM7rD,GAASizD,GAASjzD,IAAUA,IAAUA,EAAMysD,eAEtD,EASF,SAAS6Q,KACP,OAAO,IAAIC,EACb,CATAX,GAAS16D,UAAY26D,GAAa36D,UAUlC,MAAMq7D,WAAqBtH,GACzBtyD,WAAAA,GACE6T,MAAM,CACJ1N,KAAM,SACN6qC,MAAM30C,IACAA,aAAiB2S,SAAQ3S,EAAQA,EAAM88D,WACnB,iBAAV98D,IAVRA,IAASA,IAAUA,EAUYw9D,CAAQx9D,MAGjD6C,KAAK8zD,aAAa,KAChB9zD,KAAKouC,UAAU,CAACjxC,EAAO+8D,KACrB,IAAKl6D,KAAK2uD,KAAK0F,OAAQ,OAAOl3D,EAC9B,IAAI25D,EAAS35D,EACb,GAAsB,iBAAX25D,EAAqB,CAE9B,GADAA,EAASA,EAAOn0D,QAAQ,MAAO,IAChB,KAAXm0D,EAAe,OAAO8D,IAE1B9D,GAAUA,CACZ,CAIA,OAAI92D,KAAK60D,OAAOiC,IAAsB,OAAXA,EAAwBA,EAC5C+D,WAAW/D,MAGxB,CACA90D,GAAAA,CAAIA,EAAKgM,EAAUkgD,GAAOlsD,KACxB,OAAOhC,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNrqD,OAEFwuD,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,GAAS6C,KAAK4vD,QAAQ5tD,EAC/B,GAEJ,CACA6W,GAAAA,CAAIA,EAAK7K,EAAUkgD,GAAOr1C,KACxB,OAAO7Y,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNxzC,OAEF23C,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,GAAS6C,KAAK4vD,QAAQ/2C,EAC/B,GAEJ,CACAs1C,QAAAA,CAAS2M,EAAM9sD,EAAUkgD,GAAOC,UAC9B,OAAOnuD,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNyO,QAEFtK,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,EAAQ6C,KAAK4vD,QAAQkL,EAC9B,GAEJ,CACA1M,QAAAA,CAAS2M,EAAM/sD,EAAUkgD,GAAOE,UAC9B,OAAOpuD,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACN0O,QAEFvK,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,EAAQ6C,KAAK4vD,QAAQmL,EAC9B,GAEJ,CACA1M,QAAAA,CAAS2M,EAAM9M,GAAOG,UACpB,OAAOruD,KAAKouD,SAAS,EAAG4M,EAC1B,CACA1M,QAAAA,CAAS0M,EAAM9M,GAAOI,UACpB,OAAOtuD,KAAKmuD,SAAS,EAAG6M,EAC1B,CACAzM,OAAAA,CAAQvgD,EAAUkgD,GAAOK,SACvB,OAAOvuD,KAAKgpD,KAAK,CACftvD,KAAM,UACNsU,UACAwiD,YAAY,EACZxH,KAAMqC,GAAOv7C,OAAOs9B,UAAUie,IAElC,CACA4P,QAAAA,GACE,OAAOj7D,KAAKouC,UAAUjxC,GAAUizD,GAASjzD,GAAqBA,EAAJ,EAARA,EACpD,CACA+9D,KAAAA,CAAM1C,GACJ,IAAI2C,EACJ,IAAIC,EAAQ,CAAC,OAAQ,QAAS,QAAS,SAIvC,GAAe,WAHf5C,GAAgC,OAArB2C,EAAU3C,QAAuB,EAAI2C,EAAQzgC,gBAAkB,SAGlD,OAAO16B,KAAKi7D,WACpC,IAA6C,IAAzCG,EAAMh6D,QAAQo3D,EAAO99B,eAAuB,MAAM,IAAI60B,UAAU,uCAAyC6L,EAAM/4D,KAAK,OACxH,OAAOrC,KAAKouC,UAAUjxC,GAAUizD,GAASjzD,GAA+BA,EAAtB4E,KAAKy2D,GAAQr7D,GACjE,EAEFs9D,GAASp7D,UAAYq7D,GAAar7D,UAMlC,IAAIg8D,GAAc,IAAIrnC,KAAK,IAK3B,MAAMsnC,WAAmBlI,GACvBtyD,WAAAA,GACE6T,MAAM,CACJ1N,KAAM,OACN6qC,MAAM4gB,GARgD,kBAAxClwD,OAAOnD,UAAUqD,SAAShB,KASxBgxD,KAAO3iD,MAAM2iD,EAAEjH,aAGjCzrD,KAAK8zD,aAAa,KAChB9zD,KAAKouC,UAAU,CAACjxC,EAAO+8D,KAGhBl6D,KAAK2uD,KAAK0F,QAAUr0D,KAAK60D,OAAO13D,IAAoB,OAAVA,EAAuBA,GACtEA,EA1ZR,SAAsBrD,GACpB,MAAMygE,EAAS7B,GAAgB5+D,GAC/B,IAAKygE,EAAQ,OAAOvmC,KAAKrkB,MAAQqkB,KAAKrkB,MAAM7V,GAAQgW,OAAO8qD,IAG3D,QAAiB37D,IAAbs7D,EAAOlB,QAAwCp6D,IAArBs7D,EAAOjB,UACnC,OAAO,IAAItlC,KAAKumC,EAAOzB,KAAMyB,EAAOvB,MAAOuB,EAAOtB,IAAKsB,EAAOrgE,KAAMqgE,EAAOpgE,OAAQogE,EAAOngE,OAAQmgE,EAAOrB,aAAae,UAExH,IAAIsB,EAAqB,EAKzB,MAJiB,MAAbhB,EAAOlB,QAAkCp6D,IAArBs7D,EAAOjB,YAC7BiC,EAAyC,GAApBhB,EAAOhB,WAAkBgB,EAAOf,aAC5B,MAArBe,EAAOjB,YAAmBiC,EAAqB,EAAIA,IAElDvnC,KAAKwnC,IAAIjB,EAAOzB,KAAMyB,EAAOvB,MAAOuB,EAAOtB,IAAKsB,EAAOrgE,KAAMqgE,EAAOpgE,OAASohE,EAAoBhB,EAAOngE,OAAQmgE,EAAOrB,YAChI,CA4YgBuC,CAAat+D,GAGb4S,MAAM5S,GAA2Bm+D,GAAWI,aAA7B,IAAI1nC,KAAK72B,MAGtC,CACAw+D,YAAAA,CAAaliC,EAAK//B,GAChB,IAAIkiE,EACJ,GAAK/L,GAAUK,MAAMz2B,GAKnBmiC,EAAQniC,MALiB,CACzB,IAAIu2B,EAAOhwD,KAAKgwD,KAAKv2B,GACrB,IAAKz5B,KAAK6zD,WAAW7D,GAAO,MAAM,IAAIT,UAAU,KAAK71D,kEACrDkiE,EAAQ5L,CACV,CAGA,OAAO4L,CACT,CACA55D,GAAAA,CAAIA,EAAKgM,EAAUlU,GAAKkI,KACtB,IAAI65D,EAAQ77D,KAAK27D,aAAa35D,EAAK,OACnC,OAAOhC,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNrqD,OAEFwuD,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,GAAS6C,KAAK4vD,QAAQiM,EAC/B,GAEJ,CACAhjD,GAAAA,CAAIA,EAAK7K,EAAUlU,GAAK+e,KACtB,IAAIgjD,EAAQ77D,KAAK27D,aAAa9iD,EAAK,OACnC,OAAO7Y,KAAKgpD,KAAK,CACfh7C,UACAtU,KAAM,MACNk+D,WAAW,EACXvL,OAAQ,CACNxzC,OAEF23C,YAAY,EACZxH,IAAAA,CAAK7rD,GACH,OAAOA,GAAS6C,KAAK4vD,QAAQiM,EAC/B,GAEJ,EAwBF,SAAS5/D,GAAU+tD,EAAK90C,GACtB,IAAIwrC,EAAMob,SAQV,OAPA9R,EAAIv+C,KAAK,CAAC7M,EAAKonD,KACb,IAAI+V,EACJ,GAA8B,OAAzBA,EAAY7mD,EAAIowC,OAAiByW,EAAUvhC,SAAS57B,GAEvD,OADA8hD,EAAMsF,GACC,IAGJtF,CACT,CACA,SAASsb,GAAez5D,GACtB,MAAO,CAAClJ,EAAGC,IACF2C,GAAUsG,EAAMlJ,GAAK4C,GAAUsG,EAAMjJ,EAEhD,CArCAgiE,GAAWI,aAAeL,GAuC1B,MAAMY,GAAYA,CAAC9+D,EAAOO,EAAG8xD,KAC3B,GAAqB,iBAAVryD,EACT,OAAOA,EAET,IAAI25D,EAAS35D,EACb,IACE25D,EAAS71D,KAAK0O,MAAMxS,EACrB,CAAC,MAAO+X,GACP,CAEF,OAAOs6C,EAAOqF,OAAOiC,GAAUA,EAAS35D,GAI1C,SAAS++D,GAAY1M,GACnB,GAAI,WAAYA,EAAQ,CACtB,MAAM2M,EAAU,CAAA,EAChB,IAAK,MAAOv9D,EAAKw9D,KAAgB55D,OAAOi1B,QAAQ+3B,EAAOzmD,QACrDozD,EAAQv9D,GAAOs9D,GAAYE,GAE7B,OAAO5M,EAAO6M,UAAUF,EAC1B,CACA,GAAoB,UAAhB3M,EAAOvoD,KAAkB,CAC3B,MAAMq1D,EAAY9M,EAAO4E,WAEzB,OADIkI,EAAUtK,YAAWsK,EAAUtK,UAAYkK,GAAYI,EAAUtK,YAC9DsK,CACT,CACA,MAAoB,UAAhB9M,EAAOvoD,KACFuoD,EAAO4E,WAAWzO,MAAM,CAC7B17C,MAAOulD,EAAOb,KAAK1kD,MAAMvL,IAAIw9D,MAG7B,aAAc1M,EACTA,EAAO4E,WAET5E,CACT,CAQA,IAAI+M,GAAW37D,GAA+C,oBAAxC4B,OAAOnD,UAAUqD,SAAShB,KAAKd,GACrD,SAAS47D,GAAQvL,EAAK9zD,GACpB,IAAIs/D,EAAQj6D,OAAOD,KAAK0uD,EAAIloD,QAC5B,OAAOvG,OAAOD,KAAKpF,GAAOiO,OAAOxM,IAA+B,IAAxB69D,EAAMr7D,QAAQxC,GACxD,CACA,MAAM89D,GAAcV,GAAe,IACnC,SAASW,GAAShO,GAChB,OAAO,IAAIiO,GAAajO,EAC1B,CACA,MAAMiO,WAAqBxJ,GACzBtyD,WAAAA,CAAY6tD,GACVh6C,MAAM,CACJ1N,KAAM,SACN6qC,MAAM30C,GACGo/D,GAASp/D,IAA2B,mBAAVA,IAGrC6C,KAAK+I,OAASvG,OAAOw8B,OAAO,MAC5Bh/B,KAAK68D,YAAcH,GACnB18D,KAAK88D,OAAS,GACd98D,KAAK+8D,eAAiB,GACtB/8D,KAAK8zD,aAAa,KACZnF,GACF3uD,KAAKg9D,MAAMrO,IAGjB,CACA2G,KAAAA,CAAMO,EAAQ/hD,EAAU,IACtB,IAAImpD,EACJ,IAAI9/D,EAAQwX,MAAM2gD,MAAMO,EAAQ/hD,GAGhC,QAAc7U,IAAV9B,EAAqB,OAAO6C,KAAK21D,WAAW7hD,GAChD,IAAK9T,KAAK6zD,WAAW12D,GAAQ,OAAOA,EACpC,IAAI4L,EAAS/I,KAAK+I,OACdirD,EAA0D,OAAjDiJ,EAAwBnpD,EAAQopD,cAAwBD,EAAwBj9D,KAAK2uD,KAAKH,UACnG94C,EAAQ,GAAGvc,OAAO6G,KAAK88D,OAAQt6D,OAAOD,KAAKpF,GAAOiO,OAAOsnD,IAAM1yD,KAAK88D,OAAOtiC,SAASk4B,KACpFyK,EAAoB,CAAA,EACpBC,EAAe56D,OAAO+P,OAAO,CAAA,EAAIuB,EAAS,CAC5CymB,OAAQ4iC,EACRE,aAAcvpD,EAAQupD,eAAgB,IAEpCC,GAAY,EAChB,IAAK,MAAMC,KAAQ7nD,EAAO,CACxB,IAAI02C,EAAQrjD,EAAOw0D,GACfrlC,EAAUqlC,KAAQpgE,EAClBqgE,EAAargE,EAAMogE,GACvB,GAAInR,EAAO,CACT,IAAIqR,EAGJL,EAAa9X,MAAQxxC,EAAQwxC,KAAO,GAAGxxC,EAAQwxC,QAAU,IAAMiY,EAC/DnR,EAAQA,EAAMwD,QAAQ,CACpBzyD,MAAOqgE,EACPx6B,QAASlvB,EAAQkvB,QACjBzI,OAAQ4iC,IAEV,IAAIO,EAAYtR,aAAiBgH,GAAShH,EAAMuC,UAAO1vD,EACnDg1D,EAAsB,MAAbyJ,OAAyB,EAAIA,EAAUzJ,OACpD,GAAiB,MAAbyJ,GAAqBA,EAAU1J,MAAO,CACxCsJ,EAAYA,GAAaC,KAAQpgE,EACjC,QACF,CACAsgE,EAAc3pD,EAAQupD,cAAiBpJ,EAAgDuJ,EAAvCpR,EAAM4D,KAAKwN,EAAYJ,QACpDn+D,IAAfw+D,IACFN,EAAkBI,GAAQE,EAE9B,MAAWvlC,IAAW87B,IACpBmJ,EAAkBI,GAAQC,GAExBtlC,IAAWqlC,KAAQJ,GAAqBA,EAAkBI,KAAUC,IACtEF,GAAY,EAEhB,CACA,OAAOA,EAAYH,EAAoBhgE,CACzC,CACAy4D,SAAAA,CAAUC,EAAQ/hD,EAAU,CAAA,EAAIy8C,EAAO/vD,GACrC,IAAIs2B,KACFA,EAAO,GAAEw2B,cACTA,EAAgBuI,EAAM3B,UACtBA,EAAYl0D,KAAK2uD,KAAKuF,WACpBpgD,EACJA,EAAQgjB,KAAO,CAAC,CACd04B,OAAQxvD,KACR7C,MAAOmwD,MACHx2B,GAGNhjB,EAAQupD,cAAe,EACvBvpD,EAAQw5C,cAAgBA,EACxB34C,MAAMihD,UAAUC,EAAQ/hD,EAASy8C,EAAO,CAACoN,EAAcxgE,KACrD,IAAK+2D,IAAcqI,GAASp/D,GAE1B,YADAqD,EAAKm9D,EAAcxgE,GAGrBmwD,EAAgBA,GAAiBnwD,EACjC,IAAIm2D,EAAQ,GACZ,IAAK,IAAI10D,KAAOoB,KAAK88D,OAAQ,CAC3B,IAAI1Q,EAAQpsD,KAAK+I,OAAOnK,GACnBwtD,IAASyD,GAAUK,MAAM9D,IAG9BkH,EAAMlxD,KAAKgqD,EAAMoK,aAAa,CAC5B1iD,UACAlV,MACA27B,OAAQp9B,EACR80D,WAAYn+C,EAAQwxC,KACpBmR,eAAgBnJ,IAEpB,CACAttD,KAAK+1D,SAAS,CACZzC,QACAn2D,QACAmwD,gBACAx5C,WACCy8C,EAAOqN,IACRp9D,EAAKo9D,EAAYxkE,KAAK4G,KAAK68D,aAAa1jE,OAAOwkE,GAAexgE,MAGpE,CACAwoD,KAAAA,CAAMgJ,GACJ,MAAMnuD,EAAOmU,MAAMgxC,MAAMgJ,GAKzB,OAJAnuD,EAAKuI,OAASvG,OAAO+P,OAAO,CAAA,EAAIvS,KAAK+I,QACrCvI,EAAKs8D,OAAS98D,KAAK88D,OACnBt8D,EAAKu8D,eAAiB/8D,KAAK+8D,eAC3Bv8D,EAAKq8D,YAAc78D,KAAK68D,YACjBr8D,CACT,CACArH,MAAAA,CAAOq2D,GACL,IAAIhvD,EAAOmU,MAAMxb,OAAOq2D,GACpBqO,EAAar9D,EAAKuI,OACtB,IAAK,IAAKqjD,EAAO0R,KAAgBt7D,OAAOi1B,QAAQz3B,KAAK+I,QAAS,CAC5D,MAAM4F,EAASkvD,EAAWzR,GAC1ByR,EAAWzR,QAAoBntD,IAAX0P,EAAuBmvD,EAAcnvD,CAC3D,CACA,OAAOnO,EAAKszD,aAAal6D,GAEzBA,EAAEyiE,UAAUwB,EAAY,IAAI79D,KAAK+8D,kBAAmBvN,EAAOuN,iBAC7D,CACA3F,WAAAA,CAAYtjD,GACV,GAAI,YAAa9T,KAAK2uD,KACpB,OAAOh6C,MAAMyiD,YAAYtjD,GAI3B,IAAK9T,KAAK88D,OAAOvhE,OACf,OAEF,IAAIwiE,EAAM,CAAA,EAaV,OAZA/9D,KAAK88D,OAAOzoD,QAAQzV,IAClB,IAAIo/D,EACJ,MAAM5R,EAAQpsD,KAAK+I,OAAOnK,GAC1B,IAAIw+D,EAAetpD,EACmB,OAAjCkqD,EAAgBZ,IAAyBY,EAAc7gE,QAC1DigE,EAAe56D,OAAO+P,OAAO,CAAA,EAAI6qD,EAAc,CAC7C7iC,OAAQ6iC,EAAajgE,MACrBA,MAAOigE,EAAajgE,MAAMyB,MAG9Bm/D,EAAIn/D,GAAOwtD,GAAS,eAAgBA,EAAQA,EAAMuJ,WAAWyH,QAAgBn+D,IAExE8+D,CACT,CACA1B,SAAAA,CAAUW,EAAOiB,GACf,IAAIz9D,EAAOR,KAAK2lD,QAMhB,OALAnlD,EAAKuI,OAASi0D,EACdx8D,EAAKs8D,OApPT,SAAoB/zD,EAAQk1D,EAAgB,IAC1C,IAAInU,EAAQ,GACRM,EAAQ,IAAIzI,IACZuc,EAAW,IAAIvc,IAAIsc,EAAcv/D,IAAI,EAAErF,EAAGC,KAAO,GAAGD,KAAKC,MAC7D,SAAS6kE,EAAQC,EAASx/D,GACxB,IAAI2H,EAAOg3C,GAAKA,MAAC6gB,GAAS,GAC1BhU,EAAMhvD,IAAImL,GACL23D,EAAS9gB,IAAI,GAAGx+C,KAAO2H,MAASujD,EAAM1nD,KAAK,CAACxD,EAAK2H,GACxD,CACA,IAAK,MAAM3H,KAAO4D,OAAOD,KAAKwG,GAAS,CACrC,IAAI5L,EAAQ4L,EAAOnK,GACnBwrD,EAAMhvD,IAAIwD,GACNixD,GAAUK,MAAM/yD,IAAUA,EAAM4yD,UAAWoO,EAAQhhE,EAAMmoD,KAAM1mD,GAAcowD,GAAS7xD,IAAU,SAAUA,GAAOA,EAAMk2D,KAAKh/C,QAAQixC,GAAQ6Y,EAAQ7Y,EAAM1mD,GAChK,CACA,OAAOmrD,GAASloD,MAAMF,MAAMm1B,KAAKszB,GAAQN,GAAOuU,SAClD,CAqOkBC,CAAWtB,EAAOiB,GAChCz9D,EAAKq8D,YAAcb,GAAex5D,OAAOD,KAAKy6D,IAE1CiB,IAAez9D,EAAKu8D,eAAiBkB,GAClCz9D,CACT,CACAw8D,KAAAA,CAAMz0C,EAAW21C,EAAW,IAC1B,OAAOl+D,KAAK2lD,QAAQmO,aAAatzD,IAC/B,IAAIspD,EAAQtpD,EAAKu8D,eAOjB,OANImB,EAAS3iE,SACNoG,MAAMC,QAAQs8D,EAAS,MAAKA,EAAW,CAACA,IAC7CpU,EAAQ,IAAItpD,EAAKu8D,kBAAmBmB,IAI/B19D,EAAK67D,UAAU75D,OAAO+P,OAAO/R,EAAKuI,OAAQwf,GAAYuhC,IAEjE,CACAqS,OAAAA,GACE,MAAMA,EAAU,CAAA,EAChB,IAAK,MAAOv9D,EAAK4wD,KAAWhtD,OAAOi1B,QAAQz3B,KAAK+I,QAC9CozD,EAAQv9D,GAAO,aAAc4wD,GAAUA,EAAO4E,oBAAoBmK,SAAW/O,EAAO4E,WAAa5E,EAEnG,OAAOxvD,KAAKq8D,UAAUF,EACxB,CACAD,WAAAA,GAEE,OADaA,GAAYl8D,KAE3B,CACAw+D,IAAAA,CAAKj8D,GACH,MAAMk8D,EAAS,CAAA,EACf,IAAK,MAAM7/D,KAAO2D,EACZvC,KAAK+I,OAAOnK,KAAM6/D,EAAO7/D,GAAOoB,KAAK+I,OAAOnK,IAElD,OAAOoB,KAAKq8D,UAAUoC,EAAQz+D,KAAK+8D,eAAe3xD,OAAO,EAAE/R,EAAGC,KAAOiJ,EAAKi4B,SAASnhC,IAAMkJ,EAAKi4B,SAASlhC,IACzG,CACAolE,IAAAA,CAAKn8D,GACH,MAAMN,EAAY,GAClB,IAAK,MAAMrD,KAAO4D,OAAOD,KAAKvC,KAAK+I,QAC7BxG,EAAKi4B,SAAS57B,IAClBqD,EAAUG,KAAKxD,GAEjB,OAAOoB,KAAKw+D,KAAKv8D,EACnB,CACA60B,IAAAA,CAAKA,EAAM6nC,EAAIj3D,GACb,IAAIk3D,EAAahW,GAAAA,OAAO9xB,GAAM,GAC9B,OAAO92B,KAAKouC,UAAUxtC,IACpB,IAAKA,EAAK,OAAOA,EACjB,IAAIi+D,EAASj+D,EAMb,MAnOUk+D,EAACl+D,EAAKm+D,KACpB,MAAMzZ,EAAO,IAAImD,iBAAcsW,IAC/B,GAAoB,IAAhBzZ,EAAK/pD,OAAc,OAAO+pD,EAAK,KAAM1kD,EACzC,IAAIud,EAAOmnC,EAAKI,MACZnrB,EAASquB,GAAAA,OAAOvmD,GAAIA,KAACijD,IAAO,EAAnBsD,CAAyBhoD,GACtC,SAAU25B,KAAUpc,KAAQoc,KAyNpBukC,CAAQl+D,EAAKk2B,KACf+nC,EAASr8D,OAAO+P,OAAO,CAAE,EAAE3R,GACtB8G,UAAcm3D,EAAO/nC,GAC1B+nC,EAAOF,GAAMC,EAAWh+D,IAEnBi+D,GAEX,CAGAG,IAAAA,GACE,OAAOh/D,KAAKouC,UAAU6tB,GACxB,CAKAxN,KAAAA,CAAMzgD,GACJ,OAAOhO,KAAKgpD,KAAK,CACftvD,KAAM,QACNk+D,WAAW,EACX5pD,QAASA,GAAW1M,GAAOmtD,MAC3BzF,IAAAA,CAAK7rD,GACH,GAAa,MAATA,EAAe,OAAO,EAC1B,MAAM8hE,EAAczC,GAAQx8D,KAAKwvD,OAAQryD,GACzC,OAA8B,IAAvB8hE,EAAY1jE,QAAgByE,KAAK4wD,YAAY,CAClDvE,OAAQ,CACN1V,WAAYsoB,EAAY58D,KAAK,QAGnC,GAEJ,CACA66D,YAAAA,GACE,OAAOl9D,KAAK2lD,MAAM,CAChB6I,WAAW,GAEf,CACAA,SAAAA,CAAU0Q,GAAU,EAAMlxD,EAAU1M,GAAOktD,WAClB,kBAAZ0Q,IACTlxD,EAAUkxD,EACVA,GAAU,GAEZ,IAAI1+D,EAAOR,KAAKgpD,KAAK,CACnBtvD,KAAM,YACNk+D,WAAW,EACX5pD,QAASA,EACTg7C,IAAAA,CAAK7rD,GACH,GAAa,MAATA,EAAe,OAAO,EAC1B,MAAM8hE,EAAczC,GAAQx8D,KAAKwvD,OAAQryD,GACzC,OAAQ+hE,GAAkC,IAAvBD,EAAY1jE,QAAgByE,KAAK4wD,YAAY,CAC9DvE,OAAQ,CACNmQ,QAASyC,EAAY58D,KAAK,QAGhC,IAGF,OADA7B,EAAKmuD,KAAKH,UAAY0Q,EACf1+D,CACT,CACAg8D,OAAAA,CAAQ2C,GAAQ,EAAMnxD,EAAU1M,GAAOktD,WACrC,OAAOxuD,KAAKwuD,WAAW2Q,EAAOnxD,EAChC,CACAoxD,aAAAA,CAAchgE,GACZ,OAAOY,KAAKouC,UAAUxtC,IACpB,IAAKA,EAAK,OAAOA,EACjB,MAAM6H,EAAS,CAAA,EACf,IAAK,MAAM7J,KAAO4D,OAAOD,KAAK3B,GAAM6H,EAAOrJ,EAAGR,IAAQgC,EAAIhC,GAC1D,OAAO6J,GAEX,CACA42D,SAAAA,GACE,OAAOr/D,KAAKo/D,cAAcC,GAC5B,CACAC,SAAAA,GACE,OAAOt/D,KAAKo/D,cAAcE,GAC5B,CACAC,YAAAA,GACE,OAAOv/D,KAAKo/D,cAAcxgE,GAAO0gE,GAAU1gE,GAAKgrD,cAClD,CACAqG,QAAAA,CAASn8C,GACP,MAAMtT,GAAQsT,EAAU9T,KAAK4vD,QAAQ97C,GAAW9T,MAAM2lD,QAChD9vB,EAAOlhB,MAAMs7C,SAASn8C,GAC5B+hB,EAAK9sB,OAAS,GACd,IAAK,MAAOnK,EAAKzB,KAAUqF,OAAOi1B,QAAQj3B,EAAKuI,QAAS,CACtD,IAAIy2D,EACJ,IAAIpC,EAAetpD,EACoB,OAAlC0rD,EAAiBpC,IAAyBoC,EAAeriE,QAC5DigE,EAAe56D,OAAO+P,OAAO,CAAA,EAAI6qD,EAAc,CAC7C7iC,OAAQ6iC,EAAajgE,MACrBA,MAAOigE,EAAajgE,MAAMyB,MAG9Bi3B,EAAK9sB,OAAOnK,GAAOzB,EAAM8yD,SAASmN,EACpC,CACA,OAAOvnC,CACT,EAEF8mC,GAASt9D,UAAYu9D,GAAav9D,UCjoErB,IAAAogE,GAAuB,SAAC3iE,GDqhFrC,IAAmB4iE,EC/gFjB,OD+gFiBA,ECphFH,CACZ3S,MAAO,CACLv4B,SAAU13B,EAAE,4BDmhFhB0F,OAAOD,KAAKm9D,GAAQrrD,QAAQpN,IAE1BzE,OAAOD,KAAKm9D,EAAOz4D,IAAOoN,QAAQmkD,IAEhC3J,GAAO5nD,GAAMuxD,GAAUkH,EAAOz4D,GAAMuxD,OCphFjC,CACLmH,cAAe,CACbrhE,kBAAcW,EACdJ,gBAAiB,IAEnB+gE,iBAAkBC,GAAW,CAC3BvhE,aAAcuhE,KACdhhE,gBAAiBghE,KAAa1S,MAAM,CAAC,GAAI,GAAI,KAAK34B,aAGxD,6DCJkE,SAAtDl4B,GACV,IAAAqxD,EAAGrxD,EAAHqxD,IACAmS,EAAKxjE,EAALwjE,MACAC,EAAIzjE,EAAJyjE,KACAvjE,EAAIF,EAAJE,KACAkoD,EAAQpoD,EAARooD,SACGsb,6IAAWC,CAAA3jE,EAAA4jE,IAEdC,EAAoCC,EAAaA,cAAC,CAAEzS,IAAAA,EAAKmS,MAAAA,EAAOC,KAAAA,IAAxD/lB,EAAUmmB,EAAVnmB,WAAY8K,EAAWqb,EAAXrb,YACpBpoD,EAAoCC,EAAQA,SAAyBH,GAA9D6jE,EAAU3jE,EAAA,GAAE4jE,EAAa5jE,KAiChC,OA/BAuP,YAAU,YACHzP,GAAQw9C,GACXwX,QAAQx1C,IAAI,CAACg+B,EAAWv7C,cAAeu7C,EAAW9gD,WAC/CmhD,KAAK,SAAAlzC,OAAI1I,EAAW0I,EAAX1I,GAAAA,YAAiBvF,EAAMiO,EAANjO,GAAAA,OACnB8rD,EAAexqD,EAAgBtB,GAErC,GAAK8rD,EAKL,OAAOhL,EACJ8M,qBAAqB,CACpBlJ,MAAO,CACL9jD,KALkBkrD,EAAhBlrD,KAMFqoD,QANkB6C,EAAVjrD,MAMOmC,GACfoC,cAAcomD,MAAAA,OAAAA,EAAAA,EAAUpmD,oBAAgBW,KAG3Co7C,KAAK,SAAA/yC,GACJ,OAAOg5D,EAAahuD,EAAA,GADOhL,EAApBw/C,qBAGLroD,CAAAA,YAAAA,EACAvF,OAAAA,IAEJ,EACJ,GACM,MAAC,aAEb,EAAG,CAACsD,EAAMw9C,EAAoB,MAAR0K,OAAQ,EAARA,EAAUpmD,eAG9BtB,EAAAA,sBAACujE,aAAUjuD,GACTytD,KAAMA,EACNS,QAASA,EACThkE,KAAM6jE,EACNpoB,WAAY,CAAE+B,WAAAA,EAAY8K,YAAAA,GAC1BL,WAAYA,GACZgb,qBAAsBA,GACtBpjE,oBAAqBA,EACrBglC,QAASjlC,EAAe,cACZ,6BACR4jE,GAGV,2BCzD0C,0BAZZ,SAACD,GAC7B,OAAQA,GACN,IAAK,KACH,MAAO,sBACT,IAAK,KACH,MAAO,yBACT,QACE,MAAO,4BAEb,2BAEgC,CAAC"}
1
+ {"version":3,"file":"index.js","names":["en","pl","presenceColors","styles","styles","styles","styles","styles","styles","styles","styles","styles","styles","styles","styles","locales"],"sources":["../src/locales/en/translation.json","../src/locales/pl/translation.json","../src/locales/index.ts","../src/utils/state.ts","../src/version.ts","../src/components/SettingsFormContent/index.tsx","../src/components/AssignmentBoard/helpers.ts","../src/components/AssignmentBoard/OperatorCard/SidePanel/styles.ts","../src/components/AssignmentBoard/OperatorCard/SidePanel/MainContent.tsx","../src/components/AssignmentBoard/DropZone/styles.ts","../src/components/AssignmentBoard/DropZone/index.tsx","../src/components/AssignmentBoard/OperatorCard/styles.ts","../src/components/AssignmentBoard/OperatorCard/index.tsx","../src/components/AssignmentBoard/PoolColumn/styles.ts","../src/components/AssignmentBoard/PoolColumn/index.tsx","../src/components/AssignmentBoard/WorkplaceColumn/styles.ts","../src/components/AssignmentBoard/WorkplaceColumn/index.tsx","../src/components/AssignmentBoard/styles.ts","../src/components/AssignmentBoard/index.tsx","../src/components/Navigation/styles.ts","../src/components/Navigation/index.tsx","../src/components/WidgetView/styles.ts","../src/components/WidgetView/index.tsx","../src/components/Widget/utils.ts","../src/components/Widget/index.tsx","../src/core/title.ts","../src/index.tsx"],"sourcesContent":["","","import en from './en/translation.json';\nimport pl from './pl/translation.json';\n\nconst resources = {\n en: {\n translation: en,\n },\n pl: {\n translation: pl,\n },\n};\n\nexport default resources;\n","import { getCurrentShift, ListShifts_Shift, normalizeShifts } from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\n\nimport { ViewState } from '@/types';\n\nconst DATETIME_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';\n\nconst sortShifts = (shifts: ListShifts_Shift[]): ListShifts_Shift[] => [...shifts].sort((a, b) => a.startedAt.localeCompare(b.startedAt));\n\nconst findShiftByName = (shifts: ListShifts_Shift[], name: string) => shifts.find((s) => s.name === name);\n\nexport const makeShiftDateTime = (date: string, shift: ListShifts_Shift): string => {\n const shiftStart = dayjs(shift.startedAt);\n return dayjs(date).hour(shiftStart.hour()).minute(shiftStart.minute()).second(0).format(DATETIME_FORMAT);\n};\n\nexport const extractDate = (dateTime: string): string => dayjs(dateTime).format('YYYY-MM-DD');\n\nconst getMinDate = (shifts: ListShifts_Shift[]): string => {\n const now = dayjs();\n const normalizedShifts = normalizeShifts(shifts, now);\n const currentShift = getCurrentShift(now, normalizedShifts);\n return (currentShift?.startedAt || now).format('YYYY-MM-DD');\n};\n\nexport const getInitialState = (shifts: ListShifts_Shift[]): ViewState | null => {\n const sortedShifts = sortShifts(shifts);\n const now = dayjs();\n const today = now.format('YYYY-MM-DD');\n const normalizedShifts = normalizeShifts(sortedShifts, now);\n\n const currentNormalizedShift = getCurrentShift(now, normalizedShifts);\n\n if (currentNormalizedShift) {\n const shift = findShiftByName(sortedShifts, currentNormalizedShift.name);\n if (shift) {\n return { date: currentNormalizedShift.startedAt.format(DATETIME_FORMAT), shift, isCurrentShift: true };\n }\n }\n\n const nextNormalizedShift = normalizedShifts.find((s) => s.startedAt.isAfter(now));\n\n if (nextNormalizedShift) {\n const shift = findShiftByName(sortedShifts, nextNormalizedShift.name);\n if (shift) {\n return { date: makeShiftDateTime(today, shift), shift, isCurrentShift: false };\n }\n }\n\n const tomorrow = dayjs(now).add(1, 'day').startOf('day');\n const tomorrowNormalizedShifts = normalizeShifts(sortedShifts, tomorrow);\n\n if (tomorrowNormalizedShifts.length > 0) {\n const shift = findShiftByName(sortedShifts, tomorrowNormalizedShifts[0].name);\n if (shift) {\n return { date: makeShiftDateTime(tomorrow.format('YYYY-MM-DD'), shift), shift, isCurrentShift: false };\n }\n }\n\n return null;\n};\n\nconst MAX_DAYS_FORWARD = 14;\n\nexport const canNavigate = (currentState: ViewState, shifts: ListShifts_Shift[], direction: 'prev' | 'next'): boolean => {\n const sortedShifts = sortShifts(shifts);\n const currentDate = extractDate(currentState.date);\n const minDate = getMinDate(sortedShifts);\n const maxDate = dayjs().add(MAX_DAYS_FORWARD, 'day').format('YYYY-MM-DD');\n const currentIndex = sortedShifts.findIndex((s) => s.id === currentState.shift.id);\n\n if (direction === 'next') {\n if (currentIndex < sortedShifts.length - 1) {\n return true;\n }\n const nextDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD');\n return nextDate <= maxDate;\n }\n\n if (currentIndex > 0) {\n return currentDate >= minDate;\n }\n const prevDate = dayjs(currentDate).subtract(1, 'day').format('YYYY-MM-DD');\n return prevDate >= minDate;\n};\n\nexport const navigateState = (currentState: ViewState, shifts: ListShifts_Shift[], direction: 'prev' | 'next'): ViewState => {\n const sortedShifts = sortShifts(shifts);\n if (!canNavigate(currentState, sortedShifts, direction)) {\n return currentState;\n }\n\n const currentDate = extractDate(currentState.date);\n const currentIndex = sortedShifts.findIndex((s) => s.id === currentState.shift.id);\n\n const checkIsCurrent = (date: string, shift: ListShifts_Shift): boolean => {\n const now = dayjs();\n const normalizedShifts = normalizeShifts(sortedShifts, now);\n const currentNormalized = getCurrentShift(now, normalizedShifts);\n if (!currentNormalized || currentNormalized.name !== shift.name) return false;\n return currentNormalized.startedAt.format('YYYY-MM-DD') === dayjs(date).format('YYYY-MM-DD');\n };\n\n if (direction === 'next') {\n if (currentIndex < sortedShifts.length - 1) {\n const shift = sortedShifts[currentIndex + 1];\n const date = makeShiftDateTime(currentDate, shift);\n return { date, shift, isCurrentShift: checkIsCurrent(date, shift) };\n }\n const nextDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD');\n const shift = sortedShifts[0];\n return { date: makeShiftDateTime(nextDate, shift), shift, isCurrentShift: false };\n }\n\n if (currentIndex > 0) {\n const shift = sortedShifts[currentIndex - 1];\n const date = makeShiftDateTime(currentDate, shift);\n return { date, shift, isCurrentShift: checkIsCurrent(date, shift) };\n }\n const prevDate = dayjs(currentDate).subtract(1, 'day').format('YYYY-MM-DD');\n const shift = sortedShifts[sortedShifts.length - 1];\n return { date: makeShiftDateTime(prevDate, shift), shift, isCurrentShift: false };\n};\n","export const LIBRARY_VERSION = '1.0.8';\n","import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TabContext, TabList, TabPanel } from '@mui/lab';\nimport { FormControl, InputLabel, MenuItem, Select, Tab, TextField } from '@mui/material';\nimport { SettingsFormContentProps } from 'andoncloud-widget-base';\n\nimport { WidgetData, WidgetSettings } from '@/types';\n\nconst SettingsFormContent: React.FC<SettingsFormContentProps<WidgetData, WidgetSettings>> = ({ data, formProps }) => {\n // -- Local state --\n const [selectedTab, setSelectedTab] = useState('filters');\n\n // -- Translation --\n const { t } = useTranslation();\n\n return (\n <TabContext value={selectedTab}>\n <TabList onChange={(_, value) => setSelectedTab(value)} centered>\n <Tab label={t('stationAssignmentWidget.settingsFiltersTab')} value=\"filters\" />\n <Tab label={t('stationAssignmentWidget.advanced')} value=\"advanced\" />\n </TabList>\n\n <TabPanel value=\"filters\">\n <FormControl fullWidth>\n <InputLabel id=\"department-label\">{t('stationAssignmentWidget.department')}</InputLabel>\n <Select\n name=\"departmentId\"\n labelId=\"department-label\"\n variant=\"outlined\"\n value={formProps.values.departmentId ?? ''}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value=\"\">{t('stationAssignmentWidget.allDepartments')}</MenuItem>\n {data.departments.map((department) => (\n <MenuItem key={department.id} value={department.id}>\n {department.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl sx={{ mt: 2 }} fullWidth>\n <InputLabel id=\"refresh-interval-label\">{t('stationAssignmentWidget.refreshInterval')}</InputLabel>\n <Select\n name=\"refreshInterval\"\n labelId=\"refresh-interval-label\"\n variant=\"outlined\"\n value={formProps.values.refreshInterval}\n onChange={formProps.handleChange}\n fullWidth\n >\n <MenuItem value={15}>15s</MenuItem>\n <MenuItem value={30}>30s</MenuItem>\n <MenuItem value={60}>60s</MenuItem>\n </Select>\n </FormControl>\n </TabPanel>\n\n <TabPanel value=\"advanced\">\n <TextField\n name=\"customTitle\"\n label={t('stationAssignmentWidget.customTitle')}\n value={formProps.values.customTitle}\n onChange={formProps.handleChange}\n fullWidth\n />\n </TabPanel>\n </TabContext>\n );\n};\n\nexport default SettingsFormContent;\n","import { DropResult } from '@hello-pangea/dnd';\nimport { ListWorkplaceAssignments_WorkplaceWithAssignment, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { WidgetData } from '@/types';\n\nexport const presenceLabelKeys: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'stationAssignmentWidget.presenceStatusPresent',\n [PresenceStatusEnum.NotPresent]: 'stationAssignmentWidget.presenceStatusNotPresent',\n [PresenceStatusEnum.PresentElsewhere]: 'stationAssignmentWidget.presenceStatusPresentElsewhere',\n};\n\ntype QueryWorkplace = ListWorkplaceAssignments_WorkplaceWithAssignment['workplace'];\n\nexport interface OperatorContext {\n presenceStatus?: PresenceStatusEnum;\n assignedWorkplaceName?: string;\n isUnplanned?: boolean;\n checkedInWorkplace?: QueryWorkplace;\n}\n\nexport const findOperatorContext = (data: WidgetData, userId: string): OperatorContext => {\n for (const wp of data.workplaces) {\n const assigned = wp.assignedOperators.find((op) => op.user.id === userId);\n if (assigned) {\n return {\n presenceStatus: assigned.presenceStatus,\n assignedWorkplaceName: wp.workplace.name,\n };\n }\n }\n\n for (const wp of data.workplaces) {\n const unplanned = wp.unplannedOperators.find((op) => op.user.id === userId && !op.plannedWorkplace);\n if (unplanned) {\n return {\n isUnplanned: true,\n checkedInWorkplace: wp.workplace,\n };\n }\n }\n\n return {};\n};\n\nconst UNPLANNED_PREFIX = 'unplanned:';\n\nexport const isUnplannedDraggableId = (draggableId: string): boolean => draggableId.startsWith(UNPLANNED_PREFIX);\n\nexport const extractUserId = (draggableId: string): string =>\n isUnplannedDraggableId(draggableId) ? draggableId.slice(UNPLANNED_PREFIX.length) : draggableId;\n\nexport const makeUnplannedDraggableId = (userId: string): string => `${UNPLANNED_PREFIX}${userId}`;\n\nexport const getUpdatedData = (\n data: WidgetData,\n result: DropResult,\n): Pick<WidgetData, 'workplaces' | 'unassignedOperators'> | null => {\n const { source, destination, draggableId } = result;\n\n if (!destination) return null;\n if (source.droppableId === destination.droppableId && source.index === destination.index) return null;\n\n const isUnplanned = isUnplannedDraggableId(draggableId);\n const userId = extractUserId(draggableId);\n const fromPool = source.droppableId === 'pool';\n const toPool = destination.droppableId === 'pool';\n\n if (isUnplanned && toPool) return null;\n\n let movedUser: { id: string; name: string } | undefined;\n let movedPresenceStatus = PresenceStatusEnum.NotPresent;\n\n const newUnassignedOperators = [...data.unassignedOperators];\n const newWorkplaces = data.workplaces.map((wp) => ({\n ...wp,\n assignedOperators: [...wp.assignedOperators],\n unplannedOperators: [...wp.unplannedOperators],\n }));\n\n if (isUnplanned) {\n const sourceWp = newWorkplaces.find((wp) => wp.workplace.id === source.droppableId);\n if (sourceWp) {\n const idx = sourceWp.unplannedOperators.findIndex((op) => op.user.id === userId);\n if (idx !== -1) {\n movedUser = sourceWp.unplannedOperators[idx].user;\n movedPresenceStatus = PresenceStatusEnum.PresentElsewhere;\n sourceWp.unplannedOperators.splice(idx, 1);\n }\n }\n const poolIdx = newUnassignedOperators.findIndex((op) => op.id === userId);\n if (poolIdx !== -1) {\n newUnassignedOperators.splice(poolIdx, 1);\n }\n } else if (fromPool) {\n const idx = newUnassignedOperators.findIndex((op) => op.id === userId);\n if (idx !== -1) {\n movedUser = newUnassignedOperators[idx];\n newUnassignedOperators.splice(idx, 1);\n }\n } else {\n const sourceWp = newWorkplaces.find((wp) => wp.workplace.id === source.droppableId);\n if (sourceWp) {\n const idx = sourceWp.assignedOperators.findIndex((op) => op.user.id === userId);\n if (idx !== -1) {\n movedUser = sourceWp.assignedOperators[idx].user;\n movedPresenceStatus = sourceWp.assignedOperators[idx].presenceStatus;\n sourceWp.assignedOperators.splice(idx, 1);\n sourceWp.assignedCount -= 1;\n }\n }\n }\n\n if (!movedUser) return null;\n\n if (toPool) {\n newUnassignedOperators.splice(destination.index, 0, movedUser);\n } else {\n const destWp = newWorkplaces.find((wp) => wp.workplace.id === destination.droppableId);\n if (destWp) {\n destWp.assignedOperators.splice(destination.index, 0, {\n user: movedUser,\n presenceStatus: movedPresenceStatus,\n });\n destWp.assignedCount += 1;\n }\n }\n\n return { workplaces: newWorkplaces, unassignedOperators: newUnassignedOperators };\n};\n","import { SxProps, Theme } from '@mui/material/styles';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nconst presenceColors: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'success.main',\n [PresenceStatusEnum.NotPresent]: 'error.main',\n [PresenceStatusEnum.PresentElsewhere]: 'warning.main',\n};\n\nexport const makePresenceIndicatorStyles = (status: PresenceStatusEnum): SxProps<Theme> => ({\n flexShrink: 0,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: presenceColors[status],\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n properties: {\n gap: (theme) => theme.spacing(0.5),\n },\n property: {\n marginLeft: (theme) => theme.spacing(2),\n },\n propertyLabel: {\n marginBottom: (theme) => theme.spacing(0.5),\n fontWeight: 'bold',\n },\n propertyValue: {\n fontSize: (theme) => theme.typography.pxToRem(14),\n color: 'text.primary',\n },\n checkedInValue: {\n fontSize: (theme) => theme.typography.pxToRem(14),\n fontWeight: 600,\n color: 'warning.main',\n },\n unplannedIndicator: {\n flexShrink: 0,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: 'success.main',\n },\n assignButton: {\n marginTop: (theme) => theme.spacing(2),\n },\n separator: {\n width: '100%',\n height: '1px',\n margin: (theme) => theme.spacing(1, 0),\n background: 'linear-gradient(90deg, rgba(255, 255, 255, 0.25) 0%, rgba(255, 255, 255, 0.05) 100%)',\n },\n};\n\nexport default styles;\n","import { Fragment, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Button, CircularProgress, Stack, Typography } from '@mui/material';\nimport { GqlClients, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\n\nimport { ViewState, WidgetData } from '@/types';\n\nimport { findOperatorContext, presenceLabelKeys } from '../../helpers';\n\nimport styles, { makePresenceIndicatorStyles } from './styles';\n\ninterface MainContentProps {\n userId: string;\n data: WidgetData;\n gqlClients: GqlClients;\n viewState: ViewState;\n onAssignToWorkplace?: (userId: string, workplaceId: string) => void;\n}\n\nconst getPresenceLabel = (t: (key: string) => string, status?: PresenceStatusEnum): string => {\n if (!status) return t('stationAssignmentWidget.unassignedOperator');\n return t(presenceLabelKeys[status]);\n};\n\nconst formatDuration = (startedAt: string): string => {\n const start = dayjs(startedAt);\n const now = dayjs();\n const totalMinutes = now.diff(start, 'minute');\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n\n if (hours > 0) {\n return `${hours}h ${minutes}m`;\n }\n return `${minutes}m`;\n};\n\nconst MainContent: React.FC<MainContentProps> = ({ userId, data, gqlClients, viewState, onAssignToWorkplace }) => {\n const { t } = useTranslation();\n const [checkedInAt, setCheckedInAt] = useState<string | null>(null);\n const [checkedInWorkplaceName, setCheckedInWorkplaceName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const context = findOperatorContext(data, userId);\n const isPresent =\n context.isUnplanned ||\n context.presenceStatus === PresenceStatusEnum.Present ||\n context.presenceStatus === PresenceStatusEnum.PresentElsewhere;\n\n const handleAssignHere = () => {\n if (!context.checkedInWorkplace || !onAssignToWorkplace) return;\n onAssignToWorkplace(userId, context.checkedInWorkplace.id);\n };\n\n useEffect(() => {\n if (!isPresent || !gqlClients.graphqlSdk) return;\n\n setIsLoading(true);\n void gqlClients.graphqlSdk\n .usersPresences({\n filter: {\n user_id_eq: userId,\n shift_id_eq: viewState.shift.id,\n finished_at_null: 'true',\n },\n })\n .then(({ usersPresences }) => {\n if (usersPresences.length > 0) {\n const latest = usersPresences[usersPresences.length - 1];\n setCheckedInAt(latest.startedAt);\n const wp = data.workplaces.find((w) => w.workplace.id === latest.workplaceId);\n if (wp) {\n setCheckedInWorkplaceName(wp.workplace.name);\n }\n }\n return undefined;\n })\n .catch(() => undefined)\n .finally(() => setIsLoading(false));\n }, [userId, isPresent, gqlClients.graphqlSdk, viewState.shift.id, data.workplaces]);\n\n return (\n <Stack sx={styles.properties}>\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.presenceStatus')}</Typography>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {context.isUnplanned && (\n <Box title={t('stationAssignmentWidget.checkedInUnassigned')} sx={styles.unplannedIndicator} />\n )}\n {!context.isUnplanned && context.presenceStatus && (\n <Box\n title={t(presenceLabelKeys[context.presenceStatus])}\n sx={makePresenceIndicatorStyles(context.presenceStatus)}\n />\n )}\n <Typography sx={styles.propertyValue}>\n {context.isUnplanned\n ? t('stationAssignmentWidget.checkedInUnassigned')\n : getPresenceLabel(t, context.presenceStatus)}\n </Typography>\n </Stack>\n </Box>\n\n {context.isUnplanned && context.checkedInWorkplace && (\n <Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.checkedInLocation')}</Typography>\n <Typography sx={styles.propertyValue}>{context.checkedInWorkplace.name}</Typography>\n </Box>\n </Fragment>\n )}\n\n {context.assignedWorkplaceName && (\n <Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.assignedWorkplace')}</Typography>\n <Typography sx={styles.propertyValue}>{context.assignedWorkplaceName}</Typography>\n </Box>\n </Fragment>\n )}\n\n {isLoading && (\n <Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property} display=\"flex\" justifyContent=\"center\" mt={2}>\n <CircularProgress size={16} />\n </Box>\n </Fragment>\n )}\n\n {!isLoading && checkedInAt && (\n <Fragment>\n {context.presenceStatus === PresenceStatusEnum.PresentElsewhere && checkedInWorkplaceName && (\n <Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.checkedInLocation')}</Typography>\n <Typography sx={styles.checkedInValue}>{checkedInWorkplaceName}</Typography>\n </Box>\n </Fragment>\n )}\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.checkedInTime')}</Typography>\n <Typography sx={styles.propertyValue}>{dayjs(checkedInAt).format('HH:mm')}</Typography>\n </Box>\n <Box sx={styles.separator} />\n <Box sx={styles.property}>\n <Typography sx={styles.propertyLabel}>{t('stationAssignmentWidget.workingFor')}</Typography>\n <Typography sx={styles.propertyValue}>{formatDuration(checkedInAt)}</Typography>\n </Box>\n </Fragment>\n )}\n {context.isUnplanned && context.checkedInWorkplace && (\n <Fragment>\n <Box sx={styles.separator} />\n <Box sx={styles.property} display=\"flex\" justifyContent=\"flex-end\">\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"info\"\n sx={styles.assignButton}\n onClick={handleAssignHere}\n data-testid=\"stationAssignment.sidePanel.assignHere\"\n >\n {t('stationAssignmentWidget.assignHere')}\n </Button>\n </Box>\n </Fragment>\n )}\n </Stack>\n );\n};\n\nexport default MainContent;\n","import { SxProps, Theme } from '@mui/material';\n\nexport const makeDropZoneStyles = (isDraggingOver: boolean): SxProps<Theme> => ({\n height: '100%',\n transition: 'background-color 0.2s ease',\n backgroundColor: isDraggingOver ? 'rgba(0,0,0,0.1)' : 'transparent',\n});\n","import { Droppable, DroppableProps, DroppableProvided } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\n\nimport { makeDropZoneStyles } from './styles';\n\ninterface DropZoneProps {\n droppableId: string;\n children: (provided: DroppableProvided) => React.ReactNode;\n renderClone?: DroppableProps['renderClone'];\n}\n\nconst DropZone: React.FC<DropZoneProps> = ({ droppableId, children, renderClone }) => (\n <Droppable droppableId={droppableId} renderClone={renderClone}>\n {(provided, snapshot) => (\n <Box ref={provided.innerRef} {...provided.droppableProps} sx={makeDropZoneStyles(snapshot.isDraggingOver)}>\n {children(provided)}\n {provided.placeholder}\n </Box>\n )}\n </Droppable>\n);\n\nexport default DropZone;\n","import { SxProps, Theme } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nconst presenceColors: Record<PresenceStatusEnum, string> = {\n [PresenceStatusEnum.Present]: 'success.main',\n [PresenceStatusEnum.NotPresent]: 'error.main',\n [PresenceStatusEnum.PresentElsewhere]: 'warning.main',\n};\n\nexport const makeCardStyles = (dragging?: boolean, clickable = true): SxProps<Theme> => ({\n display: 'flex',\n alignItems: 'center',\n gap: (theme) => theme.spacing(1),\n cursor: clickable ? 'pointer' : 'default',\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid rgba(255, 255, 255, 0.15)',\n boxShadow: 'none',\n '&:last-of-type': {\n borderBottom: 'none',\n },\n ...(clickable && {\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n },\n }),\n ...(dragging && {\n opacity: 0.5,\n }),\n});\n\nexport const makePresenceDotStyles = (status: PresenceStatusEnum): SxProps<Theme> => ({\n flexShrink: 0,\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: presenceColors[status],\n});\n\nexport const unplannedDotStyles: SxProps<Theme> = {\n flexShrink: 0,\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: 'success.main',\n};\n\nconst styles: Record<string, SxProps<Theme>> = {\n name: {\n flexGrow: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n removeButton: {\n flexShrink: 0,\n opacity: 0.6,\n padding: (theme) => theme.spacing(0.25),\n marginLeft: 'auto',\n '&:hover': {\n opacity: 1,\n },\n },\n};\n\nexport default styles;\n","import { useTranslation } from 'react-i18next';\n\nimport { Draggable, DraggableProvided } from '@hello-pangea/dnd';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { Box, Card, IconButton, Typography } from '@mui/material';\nimport { PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { OperatorUser } from '@/types';\n\nimport { presenceLabelKeys } from '../helpers';\n\nimport styles, { makeCardStyles, makePresenceDotStyles, unplannedDotStyles } from './styles';\n\ninterface OperatorCardProps {\n user: OperatorUser;\n index: number;\n draggableId: string;\n showPresence?: boolean;\n presenceStatus?: PresenceStatusEnum;\n isUnplanned?: boolean;\n onClick?: () => void;\n onRemove?: () => void;\n}\n\ninterface DraggingOperatorCardProps {\n provided: DraggableProvided;\n user: OperatorUser;\n}\n\nexport const DraggingOperatorCard: React.FC<DraggingOperatorCardProps> = ({ provided, user }) => (\n <Card ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} sx={makeCardStyles(true)}>\n <Typography sx={styles.name}>{user.name}</Typography>\n </Card>\n);\n\nconst OperatorCard: React.FC<OperatorCardProps> = ({\n user,\n index,\n draggableId,\n showPresence,\n presenceStatus,\n isUnplanned,\n onClick,\n onRemove,\n}) => {\n const { t } = useTranslation();\n\n return (\n <Draggable draggableId={draggableId} index={index}>\n {(provided, snapshot) => (\n <Card\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n sx={makeCardStyles(snapshot.isDragging, !!onClick)}\n onClick={() => {\n if (!snapshot.isDragging && onClick) {\n onClick();\n }\n }}\n data-testid=\"stationAssignment.operatorCard\"\n >\n {isUnplanned && <Box title={t('stationAssignmentWidget.checkedInUnassigned')} sx={unplannedDotStyles} />}\n {!isUnplanned && showPresence && presenceStatus && (\n <Box title={t(presenceLabelKeys[presenceStatus])} sx={makePresenceDotStyles(presenceStatus)} />\n )}\n <Typography title={user.name} sx={styles.name}>\n {user.name}\n </Typography>\n {onRemove && (\n <IconButton\n title={t('stationAssignmentWidget.removeOperator')}\n size=\"small\"\n color=\"error\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n sx={styles.removeButton}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Card>\n )}\n </Draggable>\n );\n};\n\nexport default OperatorCard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n width: 250,\n height: '100%',\n },\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n search: {\n margin: (theme) => theme.spacing(0, 1, 1, 1),\n '&.MuiFormControl-root': {\n margin: 0,\n },\n '& .MuiOutlinedInput-notchedOutline': {\n border: 'none',\n },\n '& .MuiInputAdornment-root': {\n color: 'text.primary',\n },\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n overflow: 'auto',\n },\n};\n\nexport default styles;\n","import { Fragment, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport SearchIcon from '@mui/icons-material/Search';\nimport { Card, CardContent, CardHeader, InputAdornment, TextField } from '@mui/material';\n\nimport { OperatorUser } from '@/types';\n\nimport DropZone from '../DropZone';\nimport OperatorCard, { DraggingOperatorCard } from '../OperatorCard';\n\nimport styles from './styles';\n\ninterface PoolColumnProps {\n operators: OperatorUser[];\n unplannedUserIds?: Set<string>;\n onOperatorClick?: (userId: string, userName: string) => void;\n}\n\nconst PoolColumn: React.FC<PoolColumnProps> = ({ operators, unplannedUserIds, onOperatorClick }) => {\n const [searchQuery, setSearchQuery] = useState('');\n const { t } = useTranslation();\n\n const poolOperators = useMemo(\n () => (unplannedUserIds ? operators.filter((user) => !unplannedUserIds.has(user.id)) : operators),\n [operators, unplannedUserIds],\n );\n\n const filteredOperators = useMemo(() => {\n if (!searchQuery.trim()) return poolOperators;\n const query = searchQuery.toLowerCase();\n return poolOperators.filter((user) =>\n user.name\n .toLowerCase()\n .split(' ')\n .some((part) => part.startsWith(query)),\n );\n }, [poolOperators, searchQuery]);\n\n return (\n <Card sx={styles.root} data-testid=\"stationAssignment.pool\">\n <CardHeader\n title={t('stationAssignmentWidget.unassignedPool')}\n action={poolOperators.length}\n slotProps={{ title: { variant: 'subtitle1' }, action: { sx: styles.action } }}\n sx={styles.header}\n />\n <TextField\n size=\"small\"\n label={t('stationAssignmentWidget.searchOperators')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n sx={styles.search}\n data-testid=\"stationAssignment.pool.search\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" />\n </InputAdornment>\n ),\n },\n }}\n />\n <CardContent sx={styles.content}>\n <DropZone\n droppableId=\"pool\"\n renderClone={(provided, _, rubric) => (\n <DraggingOperatorCard provided={provided} user={filteredOperators[rubric.source.index]} />\n )}\n >\n {() => (\n <Fragment>\n {filteredOperators.map((user, index) => (\n <OperatorCard\n key={user.id}\n user={user}\n index={index}\n draggableId={user.id}\n onClick={onOperatorClick ? () => onOperatorClick(user.id, user.name) : undefined}\n />\n ))}\n </Fragment>\n )}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default PoolColumn;\n","import { SxProps, Theme } from '@mui/material';\n\ntype BorderStatus = 'normal' | 'overcapacity' | 'unplanned';\n\nconst borderConfig: Record<\n Exclude<BorderStatus, 'normal'>,\n { borderColor: string; labelColor: string; labelBg: string }\n> = {\n overcapacity: { borderColor: 'error.main', labelColor: 'error.contrastText', labelBg: 'error.main' },\n unplanned: { borderColor: 'warning.main', labelColor: 'warning.contrastText', labelBg: 'warning.main' },\n};\n\nexport const makeRootStyles = (\n borderStatus: BorderStatus,\n frozenHeight?: number,\n borderLabel?: string,\n): SxProps<Theme> => ({\n display: 'flex',\n flexDirection: 'column',\n flexShrink: 0,\n position: 'relative',\n width: 250,\n minHeight: 200,\n border: borderStatus !== 'normal' ? 2 : 1,\n borderColor: borderStatus !== 'normal' ? borderConfig[borderStatus].borderColor : 'divider',\n ...(borderStatus !== 'normal' && {\n '&::after': {\n content: `\"${borderLabel}\"`,\n position: 'absolute',\n bottom: -2,\n left: -2,\n padding: (theme: Theme) => theme.spacing(0.25, 0.75),\n fontSize: (theme: Theme) => theme.typography.pxToRem(10),\n color: borderConfig[borderStatus].labelColor,\n backgroundColor: borderConfig[borderStatus].labelBg,\n borderRadius: '0 4px 0 0',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.3)',\n pointerEvents: 'none',\n },\n }),\n ...(frozenHeight !== undefined && {\n overflow: 'hidden',\n maxHeight: frozenHeight,\n }),\n});\n\nconst styles: Record<string, SxProps<Theme>> = {\n header: {\n display: 'flex',\n padding: (theme) => theme.spacing(0.5, 1),\n '& .MuiCardHeader-content': {\n overflowX: 'hidden',\n },\n },\n title: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n action: {\n display: 'flex',\n alignSelf: 'center',\n gap: (theme) => theme.spacing(1),\n margin: (theme) => theme.spacing(0, 0, 0, 1),\n },\n content: {\n flexGrow: 1,\n padding: (theme) => theme.spacing(0.5),\n },\n unplannedLabel: {\n display: 'block',\n margin: (theme) => theme.spacing(1, 0),\n padding: (theme) => theme.spacing(0, 0.5),\n color: 'text.primary',\n opacity: 0.7,\n textAlign: 'center',\n },\n unplannedSeparator: {\n height: '1px',\n backgroundColor: 'text.primary',\n opacity: 0.3,\n },\n};\n\nconst badgeColors: Record<string, { color: string; backgroundColor: string }> = {\n ok: { color: 'success.contrastText', backgroundColor: 'success.main' },\n missing: { color: 'error.contrastText', backgroundColor: 'error.main' },\n overcapacity: { color: 'error.contrastText', backgroundColor: 'error.main' },\n warning: { color: 'warning.contrastText', backgroundColor: 'warning.main' },\n};\n\nexport const makeStatusBadgeStyles = (status: 'missing' | 'overcapacity' | 'ok' | 'warning'): SxProps<Theme> => ({\n padding: (theme) => `${theme.spacing(0.25)} ${theme.spacing(1)}`,\n borderRadius: 1,\n ...badgeColors[status],\n});\n\nexport default styles;\n","import { Fragment, useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, Card, CardContent, CardHeader, Typography } from '@mui/material';\nimport { ListWorkplaceAssignments_WorkplaceWithAssignment, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\n\nimport { ViewState } from '@/types';\n\nimport DropZone from '../DropZone';\nimport { makeUnplannedDraggableId } from '../helpers';\nimport OperatorCard, { DraggingOperatorCard } from '../OperatorCard';\n\nimport styles, { makeRootStyles, makeStatusBadgeStyles } from './styles';\n\nconst getStatusBadge = (assignment: ListWorkplaceAssignments_WorkplaceWithAssignment, unplannedCount: number) => {\n const presentCount = assignment.assignedOperators.filter(\n (op) => op.presenceStatus === PresenceStatusEnum.Present,\n ).length;\n const checkedInHereCount = presentCount + unplannedCount;\n\n if (checkedInHereCount > assignment.recommendedOperators) {\n const diff = checkedInHereCount - assignment.recommendedOperators;\n return {\n text: `+${diff}`,\n status: 'overcapacity' as const,\n titleKey: 'stationAssignmentWidget.statusOvercapacity',\n checkedInHereCount,\n };\n }\n if (checkedInHereCount < assignment.recommendedOperators) {\n const diff = checkedInHereCount - assignment.recommendedOperators;\n return {\n text: `${diff}`,\n status: 'missing' as const,\n titleKey: 'stationAssignmentWidget.statusMissing',\n checkedInHereCount,\n };\n }\n if (unplannedCount === 0) {\n return { text: 'OK', status: 'ok' as const, titleKey: 'stationAssignmentWidget.statusOk', checkedInHereCount };\n }\n return {\n text: 'OK',\n status: 'warning' as const,\n titleKey: 'stationAssignmentWidget.statusUnplanned',\n checkedInHereCount,\n };\n};\n\nconst getPlanningBadge = (assignment: ListWorkplaceAssignments_WorkplaceWithAssignment) => {\n const diff = assignment.assignedCount - assignment.recommendedOperators;\n if (diff > 0) {\n return {\n text: `+${diff}`,\n status: 'overcapacity' as const,\n titleKey: 'stationAssignmentWidget.statusOvercapacity',\n };\n }\n if (diff < 0) {\n return { text: `${diff}`, status: 'missing' as const, titleKey: 'stationAssignmentWidget.statusMissing' };\n }\n return { text: 'OK', status: 'ok' as const, titleKey: 'stationAssignmentWidget.statusOk' };\n};\n\ninterface WorkplaceColumnProps {\n assignment: ListWorkplaceAssignments_WorkplaceWithAssignment;\n viewState: ViewState;\n registerRef?: (el: HTMLDivElement | null) => void;\n frozenHeight?: number;\n onOperatorClick?: (userId: string, userName: string) => void;\n onRemoveOperator?: (userId: string) => void;\n}\n\nconst WorkplaceColumn: React.FC<WorkplaceColumnProps> = ({\n assignment,\n viewState,\n registerRef,\n frozenHeight,\n onOperatorClick,\n onRemoveOperator,\n}) => {\n const { t } = useTranslation();\n const { isCurrentShift } = viewState;\n\n const sortedOperators = useMemo(\n () =>\n [...assignment.assignedOperators].sort((a, b) =>\n a.user.name.localeCompare(b.user.name, undefined, { numeric: true }),\n ),\n [assignment.assignedOperators],\n );\n\n const sortedUnplanned = useMemo(\n () =>\n isCurrentShift\n ? assignment.unplannedOperators\n .filter((op) => !op.plannedWorkplace)\n .sort((a, b) => a.user.name.localeCompare(b.user.name, undefined, { numeric: true }))\n : [],\n [assignment.unplannedOperators, isCurrentShift],\n );\n\n const { localOperators, elsewhereOperators } = useMemo(() => {\n if (!isCurrentShift) {\n return { localOperators: sortedOperators, elsewhereOperators: [] };\n }\n return {\n localOperators: sortedOperators.filter((op) => op.presenceStatus !== PresenceStatusEnum.PresentElsewhere),\n elsewhereOperators: sortedOperators.filter((op) => op.presenceStatus === PresenceStatusEnum.PresentElsewhere),\n };\n }, [sortedOperators, isCurrentShift]);\n\n const badge = isCurrentShift ? getStatusBadge(assignment, sortedUnplanned.length) : null;\n const planningBadge = !isCurrentShift ? getPlanningBadge(assignment) : null;\n const activeBadge = badge || planningBadge!;\n\n const isOvercapacity = isCurrentShift\n ? assignment.assignedCount > assignment.recommendedOperators ||\n (badge?.checkedInHereCount ?? 0) > assignment.recommendedOperators\n : assignment.assignedCount > assignment.recommendedOperators;\n\n const getBorderStatus = () => {\n if (isOvercapacity) return { status: 'overcapacity' as const, label: t('stationAssignmentWidget.overcapacity') };\n if (isCurrentShift && sortedUnplanned.length > 0)\n return { status: 'unplanned' as const, label: t('stationAssignmentWidget.unplannedStaffing') };\n return { status: 'normal' as const, label: '' };\n };\n const border = getBorderStatus();\n\n const displayCount = badge ? badge.checkedInHereCount : assignment.assignedCount;\n\n return (\n <Card\n ref={registerRef}\n sx={makeRootStyles(border.status, frozenHeight, border.label)}\n data-testid=\"stationAssignment.workplace\"\n >\n <CardHeader\n title={assignment.workplace.name}\n action={\n <Fragment>\n <Typography data-testid=\"stationAssignment.workplace.count\">{`${displayCount}/${assignment.recommendedOperators}`}</Typography>\n <Typography\n title={t(activeBadge.titleKey)}\n variant=\"caption\"\n sx={makeStatusBadgeStyles(activeBadge.status)}\n data-testid=\"stationAssignment.workplace.badge\"\n >\n {activeBadge.text}\n </Typography>\n </Fragment>\n }\n slotProps={{\n title: { variant: 'subtitle1', title: assignment.workplace.name, sx: styles.title },\n action: { sx: styles.action },\n }}\n sx={styles.header}\n />\n <CardContent sx={styles.content}>\n <DropZone\n droppableId={assignment.workplace.id}\n renderClone={(provided, _, rubric) => {\n const idx = rubric.source.index;\n const assignedCount = localOperators.length + elsewhereOperators.length;\n let user;\n if (idx < localOperators.length) {\n user = localOperators[idx]?.user;\n } else if (idx < assignedCount) {\n user = elsewhereOperators[idx - localOperators.length]?.user;\n } else {\n user = sortedUnplanned[idx - assignedCount]?.user;\n }\n if (!user)\n return <Card ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} />;\n return <DraggingOperatorCard provided={provided} user={user} />;\n }}\n >\n {() => {\n const elsewhereOffset = localOperators.length;\n const unplannedOffset = elsewhereOffset + elsewhereOperators.length;\n return (\n <Fragment>\n {localOperators.map((operator, index) => (\n <OperatorCard\n key={operator.user.id}\n user={operator.user}\n index={index}\n draggableId={operator.user.id}\n showPresence={isCurrentShift}\n presenceStatus={operator.presenceStatus}\n onClick={onOperatorClick ? () => onOperatorClick(operator.user.id, operator.user.name) : undefined}\n onRemove={onRemoveOperator ? () => onRemoveOperator(operator.user.id) : undefined}\n />\n ))}\n {elsewhereOperators.length > 0 && (\n <Fragment>\n <Typography\n variant=\"caption\"\n sx={styles.unplannedLabel}\n data-testid=\"stationAssignment.workplace.elsewhereLabel\"\n >\n {t('stationAssignmentWidget.presentElsewhereLabel')}\n </Typography>\n <Box sx={styles.unplannedSeparator} />\n </Fragment>\n )}\n {elsewhereOperators.map((operator, index) => (\n <OperatorCard\n key={operator.user.id}\n user={operator.user}\n index={elsewhereOffset + index}\n draggableId={operator.user.id}\n showPresence\n presenceStatus={operator.presenceStatus}\n onClick={onOperatorClick ? () => onOperatorClick(operator.user.id, operator.user.name) : undefined}\n onRemove={onRemoveOperator ? () => onRemoveOperator(operator.user.id) : undefined}\n />\n ))}\n {sortedUnplanned.length > 0 && (\n <Fragment>\n <Typography\n variant=\"caption\"\n sx={styles.unplannedLabel}\n data-testid=\"stationAssignment.workplace.unplannedLabel\"\n >\n {t('stationAssignmentWidget.unplannedSectionLabel')}\n </Typography>\n <Box sx={styles.unplannedSeparator} />\n </Fragment>\n )}\n {sortedUnplanned.map((unplanned, index) => (\n <OperatorCard\n key={unplanned.user.id}\n user={unplanned.user}\n index={unplannedOffset + index}\n draggableId={makeUnplannedDraggableId(unplanned.user.id)}\n isUnplanned\n onClick={\n onOperatorClick ? () => onOperatorClick(unplanned.user.id, unplanned.user.name) : undefined\n }\n />\n ))}\n </Fragment>\n );\n }}\n </DropZone>\n </CardContent>\n </Card>\n );\n};\n\nexport default WorkplaceColumn;\n","import { Theme } from '@mui/material';\n\nconst styles = {\n grid: (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignContent: 'flex-start',\n gap: theme.spacing(1),\n height: '100%',\n overflowX: 'auto',\n }),\n};\n\nexport default styles;\n","import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { DragDropContext, DragStart, DropResult } from '@hello-pangea/dnd';\nimport { Box } from '@mui/material';\nimport { GqlClients, PresenceStatusEnum } from 'andoncloud-dashboard-toolkit';\nimport { SidePanelProps } from 'andoncloud-sdk';\n\nimport { ViewState, WidgetData } from '@/types';\nimport { extractDate } from '@/utils/state';\n\nimport MainContent from './OperatorCard/SidePanel/MainContent';\nimport { extractUserId, getUpdatedData } from './helpers';\nimport PoolColumn from './PoolColumn';\nimport WorkplaceColumn from './WorkplaceColumn';\n\nimport styles from './styles';\n\ninterface AssignmentBoardProps {\n data: WidgetData;\n viewState: ViewState;\n gqlClients: GqlClients;\n updateData: (data: Partial<WidgetData>) => void;\n updateSidePanelProps: (props: Partial<SidePanelProps>) => void;\n refetchAssignments: () => void;\n}\n\nconst AssignmentBoard: React.FC<AssignmentBoardProps> = ({\n data,\n viewState,\n gqlClients,\n updateData,\n updateSidePanelProps,\n refetchAssignments,\n}) => {\n const { graphqlSdk } = gqlClients;\n const [frozenHeights, setFrozenHeights] = useState<Record<string, number>>({});\n\n // Refs to workplace column DOM elements for freezing heights during drag\n const columnRefs = useRef<Record<string, HTMLDivElement | null>>({});\n\n // Ref to access latest data in async callbacks (avoids stale closures)\n const dataRef = useRef(data);\n dataRef.current = data;\n\n const unplannedUserIds = useMemo(() => {\n const ids = new Set<string>();\n for (const wp of data.workplaces) {\n for (const op of wp.unplannedOperators) {\n ids.add(op.user.id);\n }\n }\n return ids;\n }, [data.workplaces]);\n\n const registerColumnRef = useCallback((id: string, el: HTMLDivElement | null) => {\n columnRefs.current[id] = el;\n }, []);\n\n const handleDragStart = useCallback((_: DragStart) => {\n const heights: Record<string, number> = {};\n Object.entries(columnRefs.current).forEach(([id, el]) => {\n if (el) {\n heights[id] = el.getBoundingClientRect().height;\n }\n });\n setFrozenHeights(heights);\n }, []);\n\n const handleRemoveOperator = useCallback(\n (userId: string, workplaceId: string) => {\n if (!graphqlSdk) return;\n\n const workplace = data.workplaces.find((w) => w.workplace.id === workplaceId);\n const operator = workplace?.assignedOperators.find((o) => o.user.id === userId);\n if (!workplace || !operator) return;\n\n updateData({\n workplaces: data.workplaces.map((w) =>\n w.workplace.id === workplaceId\n ? {\n ...w,\n assignedOperators: w.assignedOperators.filter((o) => o.user.id !== userId),\n assignedCount: w.assignedCount - 1,\n }\n : w,\n ),\n unassignedOperators: [operator.user, ...data.unassignedOperators],\n });\n\n graphqlSdk\n .unassignOperator({\n input: {\n userId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .catch(() => {});\n },\n [graphqlSdk, data, viewState, updateData],\n );\n\n const handleAssignUnplanned = useCallback(\n (userId: string, workplaceId: string) => {\n if (!graphqlSdk) return;\n\n updateData({\n workplaces: data.workplaces.map((w) => {\n const isTarget = w.workplace.id === workplaceId;\n const unplanned = w.unplannedOperators.find((op) => op.user.id === userId);\n return {\n ...w,\n unplannedOperators: w.unplannedOperators.filter((op) => op.user.id !== userId),\n ...(isTarget && unplanned\n ? {\n assignedOperators: [\n ...w.assignedOperators,\n { user: unplanned.user, presenceStatus: PresenceStatusEnum.Present },\n ].sort((a, b) => a.user.name.localeCompare(b.user.name, undefined, { numeric: true })),\n assignedCount: w.assignedCount + 1,\n }\n : {}),\n };\n }),\n unassignedOperators: data.unassignedOperators.filter((op) => op.id !== userId),\n });\n\n updateSidePanelProps({ open: false });\n\n graphqlSdk\n .assignOperator({\n input: {\n userId,\n workplaceId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .then(refetchAssignments)\n .catch(() => {});\n },\n [graphqlSdk, data, viewState, updateData, updateSidePanelProps, refetchAssignments],\n );\n\n const handleOperatorClick = useCallback(\n (userId: string, userName: string) => {\n updateSidePanelProps({\n open: true,\n title: userName,\n width: '25%',\n mainContent: (\n <MainContent\n userId={userId}\n data={data}\n gqlClients={gqlClients}\n viewState={viewState}\n onAssignToWorkplace={handleAssignUnplanned}\n />\n ),\n });\n },\n [data, gqlClients, viewState, updateSidePanelProps, handleAssignUnplanned],\n );\n\n const handleDragEnd = (result: DropResult) => {\n setFrozenHeights({});\n if (!graphqlSdk) return;\n\n const updatedData = getUpdatedData(data, result);\n if (!updatedData) return;\n\n updateData(updatedData);\n\n const { destination, draggableId } = result;\n const userId = extractUserId(draggableId);\n const toPool = destination!.droppableId === 'pool';\n\n if (toPool) {\n graphqlSdk\n .unassignOperator({\n input: {\n userId,\n shiftId: viewState.shift.id,\n validFrom: extractDate(viewState.date),\n },\n })\n .catch(() => {});\n } else {\n const workplaceId = destination!.droppableId;\n const assignPromise = graphqlSdk.assignOperator({\n input: {\n userId,\n workplaceId,\n shiftId: viewState.shift.id,\n validFrom: viewState.date,\n },\n });\n\n if (viewState.isCurrentShift) {\n assignPromise\n .then(() =>\n graphqlSdk.usersPresences({\n filter: {\n user_id_eq: userId,\n shift_id_eq: viewState.shift.id,\n finished_at_null: 'true',\n },\n }),\n )\n .then(({ usersPresences }) => {\n if (usersPresences.length === 0) return undefined;\n const latest = usersPresences[usersPresences.length - 1];\n const presenceStatus =\n latest.workplaceId === workplaceId ? PresenceStatusEnum.Present : PresenceStatusEnum.PresentElsewhere;\n return updateData({\n workplaces: dataRef.current.workplaces.map((w) =>\n w.workplace.id === workplaceId\n ? {\n ...w,\n assignedOperators: w.assignedOperators.map((op) =>\n op.user.id === userId ? { ...op, presenceStatus } : op,\n ),\n }\n : w,\n ),\n });\n })\n .catch(() => {});\n } else {\n assignPromise.catch(() => {});\n }\n }\n };\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <Box sx={styles.grid}>\n <PoolColumn\n operators={data.unassignedOperators}\n unplannedUserIds={viewState.isCurrentShift ? unplannedUserIds : undefined}\n onOperatorClick={viewState.isCurrentShift ? handleOperatorClick : undefined}\n />\n {data.workplaces.map((assignment) => (\n <WorkplaceColumn\n key={assignment.workplace.id}\n assignment={assignment}\n viewState={viewState}\n registerRef={(el) => registerColumnRef(assignment.workplace.id, el)}\n frozenHeight={frozenHeights[assignment.workplace.id]}\n onOperatorClick={viewState.isCurrentShift ? handleOperatorClick : undefined}\n onRemoveOperator={(userId) => handleRemoveOperator(userId, assignment.workplace.id)}\n />\n ))}\n </Box>\n </DragDropContext>\n );\n};\n\nexport default AssignmentBoard;\n","import { SxProps, Theme } from '@mui/material';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: (theme) => theme.spacing(2),\n marginBottom: (theme) => theme.spacing(1),\n padding: (theme) => theme.spacing(1),\n borderBottom: '1px solid #717171',\n background: '#525860',\n },\n label: {\n minWidth: 200,\n textAlign: 'center',\n color: 'rgba(255, 255, 255, 0.65)',\n },\n};\n\nexport default styles;\n","import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { Box, IconButton, Typography } from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { ViewState } from '@/types';\n\nimport styles from './styles';\n\ninterface NavigationProps {\n viewState: ViewState;\n departmentName?: string;\n canPrev?: boolean;\n canNext?: boolean;\n onNavigate: (direction: 'prev' | 'next') => void;\n}\n\nconst isOvernightShift = (shift: ViewState['shift']): boolean => {\n const start = dayjs(shift.startedAt);\n const end = dayjs(shift.finishedAt);\n return start.hour() * 60 + start.minute() > end.hour() * 60 + end.minute();\n};\n\nconst formatLabel = (viewState: ViewState): string => {\n const { shift } = viewState;\n const startDate = dayjs(viewState.date);\n\n if (isOvernightShift(shift)) {\n const endDate = startDate.add(1, 'day');\n const shiftStart = dayjs(shift.startedAt);\n const shiftEnd = dayjs(shift.finishedAt);\n return `${startDate.format('DD.MM')} / ${endDate.format('DD.MM')} (${shiftStart.format(\n 'HH:mm',\n )} - ${shiftEnd.format('HH:mm')})`;\n }\n\n return `${startDate.format('DD.MM')} - ${shift.name}`;\n};\n\nconst Navigation: React.FC<NavigationProps> = ({\n viewState,\n departmentName,\n canPrev = true,\n canNext = true,\n onNavigate,\n}) => (\n <Box sx={styles.root} data-testid=\"stationAssignment.navigation\">\n <IconButton\n color=\"secondary\"\n disabled={!canPrev}\n onClick={() => onNavigate('prev')}\n data-testid=\"stationAssignment.navigation.prev\"\n >\n <ChevronLeftIcon />\n </IconButton>\n <Typography sx={styles.label} data-testid=\"stationAssignment.navigation.label\">\n {formatLabel(viewState)}\n {departmentName && ` - ${departmentName}`}\n </Typography>\n <IconButton\n color=\"secondary\"\n disabled={!canNext}\n onClick={() => onNavigate('next')}\n data-testid=\"stationAssignment.navigation.next\"\n >\n <ChevronRightIcon />\n </IconButton>\n </Box>\n);\n\nexport default Navigation;\n","import { SxProps, Theme } from '@mui/material/styles';\n\nconst styles: Record<string, SxProps<Theme>> = {\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n loader: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexGrow: 1,\n },\n};\n\nexport default styles;\n","import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { Box, CircularProgress, Typography } from '@mui/material';\nimport {\n getCurrentShift,\n normalizeShifts,\n ListShifts_Shift,\n WorkplaceEvent,\n WorkplaceEventDocument,\n WorkplaceEventSubscriptionPayload,\n} from 'andoncloud-dashboard-toolkit';\nimport dayjs from 'dayjs';\nimport { print } from 'graphql';\n\nimport { ViewState, WidgetViewProps } from '@/types';\nimport { canNavigate, getInitialState, makeShiftDateTime, navigateState } from '@/utils/state';\n\nimport AssignmentBoard from '../AssignmentBoard';\nimport Navigation from '../Navigation';\n\nimport styles from './styles';\n\nconst WidgetView: React.FC<WidgetViewProps> = ({ data, updateData, gqlClients, settings, updateSidePanelProps }) => {\n const { t } = useTranslation();\n const [viewState, setViewState] = useState<ViewState | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [gqlWsSubscribed, setGqlWsSubscribed] = useState(false);\n\n const departmentName = useMemo(() => {\n if (!settings?.departmentId) return undefined;\n const department = data.departments.find((d) => d.id === settings.departmentId);\n return department?.name;\n }, [settings?.departmentId, data.departments]);\n\n const { graphqlSdk, gqlWsClient } = gqlClients;\n const shiftsRef = useRef(data.shifts);\n shiftsRef.current = data.shifts;\n\n useEffect(() => {\n if (data.shifts.length > 0 && !viewState) {\n const initialState = getInitialState(data.shifts);\n\n if (initialState) {\n setViewState(initialState);\n }\n }\n }, [data.shifts, viewState]);\n\n useEffect(() => {\n if (!gqlWsClient || !data?.workplaces?.length || gqlWsSubscribed) return;\n\n data.workplaces.forEach(({ workplace }) =>\n gqlWsClient.subscribe<WorkplaceEventSubscriptionPayload>(\n print(WorkplaceEventDocument),\n { id: workplace.id },\n ({ event, subject }) => {\n if (event === WorkplaceEvent.CurrentShiftChanged && subject) {\n const newShift = subject as ListShifts_Shift;\n const now = dayjs();\n const sorted = [...shiftsRef.current].sort((a, b) => a.startedAt.localeCompare(b.startedAt));\n const normalized = normalizeShifts(sorted, now);\n const current = getCurrentShift(now, normalized);\n const shiftDateTime = current\n ? current.startedAt.format('YYYY-MM-DDTHH:mm:ssZ')\n : makeShiftDateTime(now.format('YYYY-MM-DD'), newShift);\n\n setViewState((prev) => {\n if (!prev?.isCurrentShift) return prev;\n return { date: shiftDateTime, shift: newShift, isCurrentShift: true };\n });\n }\n },\n ),\n );\n\n setGqlWsSubscribed(true);\n }, [gqlWsClient, data?.workplaces, gqlWsSubscribed]);\n\n const fetchAssignmentsRef = useRef<(showLoading?: boolean) => void>(null!);\n\n fetchAssignmentsRef.current = (showLoading = false) => {\n if (!graphqlSdk || !viewState || !updateData) return;\n\n if (showLoading) setIsLoading(true);\n void graphqlSdk\n .workplaceAssignments({\n input: {\n date: viewState.date,\n shiftId: viewState.shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return updateData(workplaceAssignments);\n })\n .catch(() => {})\n .finally(() => {\n if (showLoading) setIsLoading(false);\n });\n };\n\n useEffect(() => {\n if (!viewState || !graphqlSdk) return;\n\n fetchAssignmentsRef.current?.(true);\n\n const refreshInterval = (settings?.refreshInterval || 60) * 1000;\n const intervalId = setInterval(() => fetchAssignmentsRef.current?.(), refreshInterval);\n\n return () => clearInterval(intervalId);\n }, [viewState, graphqlSdk, settings?.departmentId, settings?.refreshInterval]);\n\n const handleNavigate = useCallback(\n (direction: 'prev' | 'next') => {\n if (!viewState) return;\n const newState = navigateState(viewState, data.shifts, direction);\n setViewState(newState);\n },\n [viewState, data.shifts],\n );\n\n const canPrev = viewState ? canNavigate(viewState, data.shifts, 'prev') : false;\n const canNext = viewState ? canNavigate(viewState, data.shifts, 'next') : false;\n\n return (\n <Box sx={styles.root}>\n {viewState ? (\n <Fragment>\n <Navigation\n viewState={viewState}\n departmentName={departmentName}\n canPrev={canPrev}\n canNext={canNext}\n onNavigate={handleNavigate}\n />\n {isLoading ? (\n <Box sx={styles.loader} data-testid=\"stationAssignment.loader\">\n <CircularProgress />\n </Box>\n ) : (\n <AssignmentBoard\n data={data}\n viewState={viewState}\n gqlClients={gqlClients}\n updateData={updateData!}\n updateSidePanelProps={updateSidePanelProps}\n refetchAssignments={() => fetchAssignmentsRef.current?.()}\n />\n )}\n </Fragment>\n ) : (\n <Typography data-testid=\"stationAssignment.noShifts\">\n {t('stationAssignmentWidget.noShiftsAvailable')}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default WidgetView;\n","import { TFunction } from 'i18next';\nimport * as yup from 'yup';\n\nexport const getSettingsFormProps = (t: TFunction) => {\n yup.setLocale({\n mixed: {\n required: t('stationAssignmentWidget.thisFieldIsRequired'),\n },\n });\n return {\n initialValues: {\n customTitle: '',\n departmentId: undefined,\n refreshInterval: 60,\n },\n validationSchema: yup.object({\n departmentId: yup.string(),\n refreshInterval: yup.number().oneOf([15, 30, 60]).required(),\n }),\n };\n};\n","import { useEffect, useState } from 'react';\n\nimport { useGqlClients, WidgetProps } from 'andoncloud-dashboard-toolkit';\nimport { BaseWidget } from 'andoncloud-widget-base';\n\nimport locales from '@/locales';\nimport { WidgetData, WidgetSettings } from '@/types';\nimport { getInitialState } from '@/utils/state';\nimport { LIBRARY_VERSION } from '@/version';\n\nimport SettingsFormContent from '../SettingsFormContent';\nimport WidgetView from '../WidgetView';\n\nimport { getSettingsFormProps } from './utils';\n\nconst Widget: React.FC<WidgetProps<WidgetData, WidgetSettings>> = ({\n url,\n wsUrl,\n lang,\n data,\n settings,\n ...widgetProps\n}) => {\n const { graphqlSdk, gqlWsClient } = useGqlClients({ url, wsUrl, lang });\n const [widgetData, setWidgetData] = useState<WidgetData | undefined>(data);\n\n useEffect(() => {\n if (!data && graphqlSdk) {\n Promise.all([graphqlSdk.departments(), graphqlSdk.listShifts()])\n .then(([{ departments }, { shifts }]) => {\n const initialState = getInitialState(shifts);\n\n if (!initialState) {\n return;\n }\n const { date, shift } = initialState;\n\n return graphqlSdk\n .workplaceAssignments({\n input: {\n date,\n shiftId: shift.id,\n departmentId: settings?.departmentId || undefined,\n },\n })\n .then(({ workplaceAssignments }) => {\n return setWidgetData({\n ...workplaceAssignments,\n departments,\n shifts,\n });\n });\n })\n .catch(() => {});\n }\n }, [data, graphqlSdk, settings?.departmentId]);\n\n return (\n <BaseWidget\n {...widgetProps}\n lang={lang}\n locales={locales}\n data={widgetData}\n gqlClients={{ graphqlSdk, gqlWsClient }}\n WidgetView={WidgetView}\n getSettingsFormProps={getSettingsFormProps}\n SettingsFormContent={SettingsFormContent}\n version={LIBRARY_VERSION}\n data-testid=\"station-assignment-widget\"\n />\n );\n};\n\nexport default Widget;\n","import type { FilterValues } from 'andoncloud-dashboard-toolkit';\nimport i18n from 'i18next';\n\nimport type { WidgetData, WidgetSettings } from '../types';\n\nconst ns = 'stationAssignmentWidget';\n\nconst t = (key: string, lng: string, options?: Record<string, unknown>) => i18n.t(`${ns}.${key}`, { lng, ...options });\n\nexport const getDisplayName = (lang: string) => t('displayName', lang);\n\nexport const getTitle = (\n data: WidgetData | undefined,\n _settings: WidgetSettings | undefined,\n _filters: FilterValues | undefined,\n lang: string,\n): string => {\n const name = getDisplayName(lang);\n\n const workplaces = data?.workplaces;\n if (!workplaces?.length) return name;\n\n const unassignedCount = data?.unassignedOperators?.length ?? 0;\n const parts = [t('titleWorkplaces', lang, { count: workplaces.length })];\n\n if (unassignedCount > 0) {\n parts.push(t('titleUnassigned', lang, { count: unassignedCount }));\n }\n\n return `${name} — ${parts.join(', ')}`;\n};\n","export { default as Widget } from './components/Widget';\nexport { getDisplayName, getTitle } from './core/title';\n\nexport const thumbnail: string | undefined = undefined;\n\nexport const requiredFeatures: string[] = ['feature.station-assignment-widget'];\nexport const extraPermissions: string[] = [];\n\nexport { LIBRARY_VERSION as version } from './version';\n"],"mappings":"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"}