{"version":3,"file":"MttTimeline.mjs","names":["React","useState","useEffect","useRef","memo","useCallback","useMemo","makeStyles","Typography","useTheme","Fade","lighten","Button","IconRenderer","TimelineNode","TimelineWrapper","MultiDot","VisualizationDot","TimelinePreloaderNode","MttYearTag","DynamicRangeSlider","HeightAdjuster","useStyles","theme","root","horizontalDash","backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","slider","height","categoryBar","background","palette","common","black","color","white","display","alignItems","categoryBarPlacement","position","left","categoryLabel","transform","width","button","textDecoration","MttTimeline","props","showAllDetails","startRange","setStartRange","endRange","setEndRange","startDate","setStartDate","endDate","setEndDate","displayRangeFilter","setDisplayRangeFilter","threadHeight","setThreadHeight","recordLength","setRecordLength","containerWidth","setContainerWidth","showMonthMarkers","setShowMonthMarkers","showYearMarkers","setShowYearMarkers","verticalAdjuster","setVerticalAdjuster","uniqueTimelines","setUniqueTimelines","classes","data","loading","visualizationYScale","years","map","item","push","date","slice","uniqueYears","Set","sort","length","mainContainer","current","offsetWidth","movement_timer","RESET_TIMEOUT","set_dimensions","window","addEventListener","clearInterval","setTimeout","demoApiConfigDate","yearsInRange","Number","yearsToDisplay","unshift","yearRange","getSingleGroupedData","flatOne","dates","flat","flatTwo","details","sortDate","a","b","c","Date","d","dataConvertedDate","toLocaleDateString","formatDate","getPositionFromDate","initDate","start","end","rangeStart","dateList","loop","newDate","setDate","getDate","mappedToObjects","value","plots","i","mergePlots","o","filter","includes","toString","demoDates","unique","pop","getDatesFromRangeSelectionCompact","right","Math","round","rangeEnd","getNextDay","dateString","month","getMonth","day","year","getFullYear","nextDay","getRangeValues","rangeValue","processRangeValues","plotYV","plotDate","demoDatesTwo","results","resultsSorted","getTime","dtest","res","order","plot","compareDate","date1","date2","comparison","date1Month","split","date2Month","date1Day","date2Day","date1Year","date2Year","minnifyTimelineObject","object","cleanObject","notUsed","forEach","obj","timeline","subThread","firstDate","lastDate","icon","iconID","clnObj","startDateSet","endDateSet","filteredByDate","buildCategoryLines","xLine","minnifiedResult","detailedComponentSize","summaryComponentSize","summaryBreakpoint","overviewBreakpoint","checkLinearLength","uniqueNodeScaleAmount","getScale","getXScale","getYScale","topMargin","plotXV","rowIndex","reduce","s","thread","sortedRowIndex","concatIndex","result","v","index","entry","xplot","plotY","plotX","orderByThread","unordered","maxElement","sortArray","Array","e","MONTHS","convertNumberToMonths","months","orderedMonths","output","lastDayOfMonthArray","tempDates","find","dateMonth","dateYear","pushDate","fDate","fDateMonth","fDateDay","fDateYear","returnObject","timelines","subThreads","timelineSet","timelineKey","add","size","lastDayOfYearArray","dateArr","x","firstDayOfYearArray","Today","today","todaysDate","getInverseProportionalNumber","inputNumber","reciprocal","wholeNumber","visualizationSmall","visualizationLarge","rangeHandles","adjusterHeight","GuideLinesShort","xLines","zIndex","top","borderBottom","divider","preloadArray","keys","VisualizationCard","title","user","VisualizationCardMulti","borderRadius","marginBottom","padding","categoryList","label","timelineCategoryName","uniqueCategoryLegend","Map","values","uniqueCategoryLegendSorted","LegendDot","spacing","LegendItem","marginLeft","legend","plotCategoryBar","timelineNumber","uniqueSorted","localeCompare","CategoryBar","DateMarkers","bottom","overflow","id","hex","name","backgroundColor","borderTop","shortDescription","data1","description","floor","random","gap"],"sources":["../../../../src/componentSystems/multiThreadTimeline/mttMainTimeline/MttTimeline.jsx"],"sourcesContent":["import React, {\n  useState,\n  useEffect,\n  useRef,\n  memo,\n  useCallback,\n  useMemo\n} from 'react';\nimport {\n  makeStyles,\n  Typography,\n  useTheme,\n  Fade,\n  lighten,\n  Button\n} from '@material-ui/core';\nimport { IconRenderer } from '../../../UI/templates/ui/renderers/IconRenderer';\nimport { TimelineNode } from '../ui/TimelineNode';\nimport { TimelineWrapper } from '../ui/TimelineWrapper';\nimport { MultiDot } from '../ui/MultiDot';\nimport { VisualizationDot } from '../ui/VisualizationDot';\nimport { TimelinePreloaderNode } from '../ui/TimelinePreloaderNode';\nimport 'react-range-slider-input/dist/style.css';\nimport { MttYearTag } from '../ui/MttYearTag';\nimport { DynamicRangeSlider } from '../ui/DynamicRangeSlider';\nimport { HeightAdjuster } from './HeightAdjust';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n  horizontalDash: {\n    backgroundImage:\n      'linear-gradient(to right, grey 33%, rgba(255,255,255,0) 0%)',\n    backgroundPosition: 'bottom',\n    backgroundSize: '16px 1px',\n    backgroundRepeat: 'repeat-x'\n  },\n  slider: {\n    height: 600\n  },\n  categoryBar: {\n    background: lighten(theme.palette.common.black, 0.5),\n    color: theme.palette.common.white,\n    display: 'flex',\n    alignItems: 'center'\n  },\n  categoryBarPlacement: {\n    position: 'absolute',\n    left: 0\n  },\n  categoryLabel: {\n    transform: 'rotate(90deg)',\n    width: 28\n  },\n  button: {\n    '&:hover': {\n      textDecoration: 'line-through'\n    }\n  }\n}));\n// eslint-disable-next-line react/display-name\nexport const MttTimeline = memo((props) => {\n  const [showAllDetails] = useState(false);\n  const [startRange, setStartRange] = useState(10);\n  const [endRange, setEndRange] = useState();\n  const [startDate, setStartDate] = useState();\n  const [endDate, setEndDate] = useState();\n  const [displayRangeFilter, setDisplayRangeFilter] = useState(true);\n  const [threadHeight, setThreadHeight] = useState(92);\n  const [recordLength, setRecordLength] = useState();\n  const [containerWidth, setContainerWidth] = useState();\n  const [showMonthMarkers, setShowMonthMarkers] = useState(false);\n  const [showYearMarkers, setShowYearMarkers] = useState(false);\n  const [verticalAdjuster, setVerticalAdjuster] = useState(4.5);\n  const [uniqueTimelines, setUniqueTimelines] = useState(0);\n\n  const classes = useStyles(props);\n  const { data, loading } = props;\n  const theme = useTheme();\n\n  const visualizationYScale = 40;\n\n  useEffect(() => {\n    const years = [];\n    data &&\n      data.map((item) => {\n        years.push(item.date.slice(-4));\n      });\n\n    //unique years\n    const uniqueYears = [...new Set(years)].sort();\n\n    data && setStartDate(uniqueYears[0] + '-01-01');\n    data && setEndDate(uniqueYears[uniqueYears.length - 1] + '-12-31');\n  }, [data]);\n\n  const mainContainer = useRef(null);\n\n  useEffect(() => {\n    setContainerWidth(\n      mainContainer.current ? mainContainer.current.offsetWidth : 0\n    );\n  }, []);\n\n  let movement_timer = null;\n  const RESET_TIMEOUT = 10;\n\n  const set_dimensions = () => {\n    if (mainContainer.current) {\n      setContainerWidth(mainContainer.current.offsetWidth);\n    }\n  };\n\n  window.addEventListener('resize', () => {\n    clearInterval(movement_timer);\n    movement_timer = setTimeout(set_dimensions, RESET_TIMEOUT);\n  });\n\n  const years = [];\n  data &&\n    data.map((item) => {\n      years.push(item.date.slice(-4));\n    });\n\n  //unique years\n  const uniqueYears = [...new Set(years)];\n\n  let demoApiConfigDate = [];\n\n  uniqueYears.map((item) => {\n    demoApiConfigDate.push('01/01/' + item);\n  });\n\n  let yearsInRange = [];\n\n  yearsInRange.push(Number(demoApiConfigDate[1]?.slice(-4)) + 1);\n\n  let yearsToDisplay = [];\n\n  yearsInRange.map((item) => {\n    yearsToDisplay.push('01/01/' + item);\n  });\n\n  demoApiConfigDate.map((item) => {\n    yearsToDisplay.unshift(item);\n  });\n\n  const yearRange = yearsToDisplay.sort();\n\n  // could change plotting on range change by switching data with filteredByDate\n\n  const getSingleGroupedData = useCallback(() => {\n    const flatOne = data && data.map((item) => item.dates).flat();\n    const flatTwo =\n      data &&\n      flatOne &&\n      flatOne.map((item) => {\n        return item.details;\n      });\n    return flatTwo;\n  }, [data]);\n\n  // Sort date\n\n  const sortDate =\n    data &&\n    getSingleGroupedData().sort(function (a, b) {\n      const c = new Date(a.date);\n      const d = new Date(b.date);\n      return c - d;\n    });\n\n  // Convert date format\n\n  let dataConvertedDate =\n    data &&\n    sortDate.map((item) => ({\n      ...item,\n      date: new Date(item.date).toLocaleDateString()\n    }));\n\n  function formatDate(date) {\n    return new Date(date).toLocaleDateString('en-US');\n  }\n\n  const getPositionFromDate = useCallback(\n    (initDate) => {\n      const start = new Date(yearRange[1]);\n      const end = new Date(yearRange[2]);\n\n      const rangeStart = [initDate];\n\n      const dateList = [new Date(start).toLocaleDateString()];\n\n      let loop = new Date(start);\n      while (loop <= end) {\n        const newDate = loop.setDate(loop.getDate() + 1);\n        loop = new Date(newDate);\n        dateList.push(loop.toLocaleDateString());\n      }\n\n      const mappedToObjects = dateList.map(function (value) {\n        return { date: value };\n      });\n\n      const plots = [];\n      for (let i = 1; i <= dateList.length; i++) {\n        plots.push(i);\n      }\n\n      let mergePlots = mappedToObjects.map((o, i) => ({\n        ...o,\n        plots: plots[i] || null\n      }));\n\n      const startDate = mergePlots\n        .filter(({ date }) => rangeStart.includes(date))\n        .map(({ plots }) => plots)\n        .toString();\n      return startDate;\n    },\n    [yearRange]\n  );\n\n  let demoDates = [];\n\n  dataConvertedDate &&\n    dataConvertedDate.map((item) => {\n      demoDates.push(item.date);\n    });\n\n  let unique = [...new Set(demoDates)];\n\n  useEffect(() => {\n    setEndRange(\n      unique && Number(getPositionFromDate(unique.slice(-1).pop())) + 66\n    );\n  }, []);\n\n  const getDatesFromRangeSelectionCompact = useCallback(\n    (left, right) => {\n      const rangeStart = [Math.round(left)];\n      const rangeEnd = [Math.round(right)];\n      let demoDates = [];\n\n      dataConvertedDate &&\n        dataConvertedDate.map((item) => {\n          demoDates.push(item.date);\n        });\n\n      let unique = [...new Set(demoDates)];\n\n      const getNextDay = () => {\n        const dateString = unique[unique.length - 1];\n        const date = new Date(dateString);\n        date.setDate(date.getDate() + 1);\n        const month = date.getMonth() + 1;\n        const day = date.getDate();\n        const year = date.getFullYear();\n        return `${month}/${day}/${year}`;\n      };\n\n      const nextDay = getNextDay();\n      unique.push(nextDay);\n\n      const mappedToObjects = unique.map(function (value) {\n        return { date: value };\n      });\n\n      const plots = [];\n      for (let i = 1; i <= unique.length; i++) {\n        plots.push(i * 10);\n      }\n\n      let mergePlots = mappedToObjects.map((o, i) => ({\n        ...o,\n        plots: plots[i] || null\n      }));\n\n      const startDate = mergePlots\n        .filter(({ plots }) => rangeStart.includes(plots))\n        .map(({ date }) => date)\n        .toString();\n\n      const endDate = mergePlots\n        .filter(({ plots }) => rangeEnd.includes(plots))\n        .map(({ date }) => date)\n        .toString();\n\n      setStartDate(startDate);\n      setEndDate(endDate);\n    },\n    [dataConvertedDate]\n  );\n\n  const getRangeValues = useCallback((rangeValue) => {\n    const left = rangeValue[0];\n    const right = rangeValue[1];\n    setStartRange(Math.round(left));\n    setEndRange(Math.round(right));\n  }, []);\n\n  const processRangeValues = () => {\n    endRange && getDatesFromRangeSelectionCompact(startRange, endRange);\n  };\n\n  // Plot YV\n  const plotYV = useCallback(\n    (item) => {\n      const plotDate = [item];\n      let demoDates = [];\n\n      dataConvertedDate &&\n        dataConvertedDate.map((item) => {\n          demoDates.push(item.date);\n        });\n\n      let demoDatesTwo = [];\n\n      data &&\n        data.map((item) => {\n          demoDatesTwo.push(item.date);\n        });\n\n      let unique = [...new Set(demoDatesTwo)];\n\n      let results = unique.map((date) => new Date(date));\n\n      const resultsSorted = results.sort((a, b) => a.getTime() - b.getTime());\n\n      const dtest = resultsSorted.map((date) => date.toLocaleDateString());\n\n      const mappedToObjects = dtest.map(function (value) {\n        return { date: value };\n      });\n\n      const plots = [];\n      for (let i = 1; i <= unique.length; i++) {\n        plots.push(i);\n      }\n\n      let mergePlots = mappedToObjects.map((o, i) => ({\n        ...o,\n        plots: plots[i] || null\n      }));\n\n      const res = mergePlots\n        .filter(({ date }) => plotDate.includes(date))\n        .map(({ plots }) => plots);\n\n      const order = res.map((item) => {\n        return item;\n      });\n\n      const plot = order;\n\n      return plot;\n    },\n    [data, dataConvertedDate]\n  );\n\n  function compareDate(date1, date2, comparison) {\n    const date1Month = Number(date1.split('/')[0]);\n    const date2Month = Number(date2.split('/')[0]);\n    const date1Day = Number(date1.split('/')[1]);\n    const date2Day = Number(date2.split('/')[1]);\n    const date1Year = Number(date1.split('/')[2]);\n    const date2Year = Number(date2.split('/')[2]);\n    if (comparison === '>') {\n      if (date1Year > date2Year) {\n        return true;\n      } else if (date1Year === date2Year) {\n        if (date1Month > date2Month) {\n          return true;\n        } else if (date1Month === date2Month) {\n          if (date1Day > date2Day) {\n            return true;\n          }\n        }\n      }\n      return false;\n    } else {\n      if (date1Year < date2Year) {\n        return true;\n      } else if (date1Year === date2Year) {\n        if (date1Month < date2Month) {\n          return true;\n        } else if (date1Month === date2Month) {\n          if (date1Day < date2Day) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n\n  function minnifyTimelineObject(object) {\n    let cleanObject = [];\n    let notUsed = false;\n    object.forEach((obj, i) => {\n      if (cleanObject.length === 0) {\n        cleanObject.push({\n          timeline: obj.timeline,\n          subThread: obj.subThread,\n          firstDate: formatDate(obj.date),\n          lastDate: formatDate(obj.date),\n          color: obj.color,\n          icon: obj.iconID\n        });\n      } else {\n        notUsed = true;\n        cleanObject.forEach((clnObj) => {\n          if (\n            obj.timeline === clnObj.timeline &&\n            obj.subThread === clnObj.subThread\n          ) {\n            if (\n              compareDate(\n                formatDate(obj.date),\n                formatDate(clnObj.firstDate),\n                '<'\n              )\n            ) {\n              clnObj.firstDate = formatDate(obj.date);\n            } else if (\n              compareDate(\n                formatDate(obj.date),\n                formatDate(clnObj.lastDate),\n                '>'\n              )\n            ) {\n              clnObj.lastDate = formatDate(obj.date);\n            }\n            notUsed = false;\n          }\n        });\n      }\n      if (notUsed) {\n        cleanObject.push({\n          timeline: obj.timeline,\n          subThread: obj.subThread,\n          firstDate: formatDate(obj.date),\n          lastDate: formatDate(obj.date),\n          color: obj.color,\n          icon: obj.iconID\n        });\n      }\n    });\n    return cleanObject;\n  }\n\n  let dates = [];\n  dataConvertedDate &&\n    dataConvertedDate.map((item) => {\n      dates.push(item.date);\n    });\n\n  const plots = [];\n  for (let i = 1; i <= unique.length; i++) {\n    plots.push(i);\n  }\n\n  const startDateSet = useMemo(() => new Date(startDate), [startDate]);\n  const endDateSet = useMemo(() => new Date(endDate), [endDate]);\n\n  const filteredByDate =\n    data &&\n    data.filter((item) => {\n      const date = new Date(item.date);\n      return date >= startDateSet && date < endDateSet;\n    });\n\n  const buildCategoryLines = useCallback(() => {\n    const xLine =\n      data &&\n      filteredByDate?.map((item) => {\n        return item.timeline.toString() + '.' + item.subThread.toString();\n      });\n\n    let unique = [...new Set(xLine)];\n    return unique;\n  }, [filteredByDate, data]);\n\n  const minnifiedResult = data && minnifyTimelineObject(filteredByDate);\n\n  const detailedComponentSize = 130;\n  const summaryComponentSize = 73;\n  //const overviewComponentSize = 50;\n\n  //const detailBreakpoint = Math.round(containerWidth / detailedComponentSize);\n  const summaryBreakpoint = Math.round(containerWidth / detailedComponentSize);\n  const overviewBreakpoint = Math.round(containerWidth / summaryComponentSize);\n\n  useEffect(() => {\n    const filteredByDate =\n      data &&\n      data.filter((item) => {\n        const date = new Date(item.date);\n        return date >= startDateSet && date <= endDateSet;\n      });\n\n    setRecordLength(filteredByDate?.length);\n  }, [data, endDateSet, startDateSet]);\n\n  const checkLinearLength = [];\n\n  filteredByDate?.forEach((item) => {\n    checkLinearLength.push(item.date);\n  });\n\n  let uniqueNodeScaleAmount = [...new Set(checkLinearLength)].length;\n\n  const getScale = useCallback(() => {\n    if (uniqueNodeScaleAmount > overviewBreakpoint) {\n      return 50;\n    } else if (uniqueNodeScaleAmount >= summaryBreakpoint) {\n      return summaryComponentSize;\n    } else {\n      return 186;\n    }\n  }, [uniqueNodeScaleAmount, summaryBreakpoint, overviewBreakpoint]);\n\n  const getXScale = useCallback(() => {\n    if (uniqueNodeScaleAmount > overviewBreakpoint) {\n      return 50;\n    } else if (uniqueNodeScaleAmount >= summaryBreakpoint) {\n      return summaryComponentSize;\n    } else {\n      return 186;\n    }\n  }, [uniqueNodeScaleAmount, summaryBreakpoint, overviewBreakpoint]);\n\n  const getYScale = useCallback(() => {\n    if (uniqueNodeScaleAmount > overviewBreakpoint) {\n      return 50;\n    } else if (uniqueNodeScaleAmount >= summaryBreakpoint) {\n      return summaryComponentSize;\n    } else {\n      return 130;\n    }\n  }, [uniqueNodeScaleAmount, summaryBreakpoint, overviewBreakpoint]);\n\n  const topMargin = uniqueNodeScaleAmount >= summaryBreakpoint ? 48 : 0;\n\n  // Plot XV\n  const plotXV = useCallback(\n    (timeline, subThread) => {\n      const xLine =\n        data &&\n        data.map((item) => {\n          return item.timeline + '.' + item.subThread;\n        });\n\n      let unique = [...new Set(xLine)];\n\n      const rowIndex = unique.reduce(function (s, a) {\n        s.push({ thread: a });\n        return s;\n      }, []);\n\n      const sortedRowIndex = rowIndex.sort((a, b) =>\n        a.thread > b.thread ? 1 : -1\n      );\n\n      const concatIndex = timeline + '.' + subThread;\n      const result = sortedRowIndex.map((v, index) => ({\n        ...v,\n        sortedRowIndex: index\n      }));\n      const results = result.filter(function (entry) {\n        return entry.thread === concatIndex;\n      });\n      const xplot = results[0] && results[0].sortedRowIndex * 50;\n      return xplot - topMargin;\n    },\n    [data, topMargin]\n  );\n\n  const plotY = useCallback(\n    (item) => {\n      const plotDate = [item];\n\n      let demoDates = [];\n\n      dataConvertedDate &&\n        dataConvertedDate.map((item) => {\n          demoDates.push(item.date);\n        });\n\n      let demoDatesTwo = [];\n\n      dataConvertedDate &&\n        filteredByDate.map((item) => {\n          demoDatesTwo.push(item.date);\n        });\n\n      let unique = [...new Set(demoDatesTwo)];\n\n      let results = unique.map((date) => new Date(date));\n\n      const resultsSorted = results.sort((a, b) => a.getTime() - b.getTime());\n\n      const dtest = resultsSorted.map((date) => date.toLocaleDateString());\n\n      const mappedToObjects = dtest.map(function (value) {\n        return { date: value };\n      });\n\n      const plots = [];\n      for (let i = 1; i <= unique.length; i++) {\n        plots.push(i);\n      }\n\n      let mergePlots = mappedToObjects.map((o, i) => ({\n        ...o,\n        plots: plots[i] || null\n      }));\n\n      const res =\n        mergePlots &&\n        mergePlots\n          .filter(({ date }) => plotDate.includes(date))\n          .map(({ plots }) => plots);\n\n      const order =\n        mergePlots &&\n        res.map((item) => {\n          return item;\n        });\n\n      const plot = order * getYScale();\n\n      return plot - getYScale() + (getYScale() === 130 ? 32 : 8);\n    },\n    [dataConvertedDate, getYScale, filteredByDate]\n  );\n\n  const plotX = useCallback(\n    (timeline, subThread) => {\n      const xLine =\n        data &&\n        filteredByDate.map((item) => {\n          return item.timeline + '.' + item.subThread;\n        });\n\n      let unique = [...new Set(xLine)];\n\n      const rowIndex = unique.reduce(function (s, a) {\n        s.push({ thread: a });\n        return s;\n      }, []);\n\n      // const sortedRowIndex = rowIndex.sort((a, b) =>\n      //   a.thread > b.thread ? 1 : -1\n      // );\n\n      const orderByThread = (unordered) => {\n        let maxElement = 0;\n        unordered.forEach((value) => {\n          if (value.thread.split('.')[0] > maxElement) {\n            maxElement = value.thread.split('.')[0];\n          }\n        });\n        let sortArray = [...Array(+maxElement)].map((e) => (e = []));\n        unordered.forEach((value) => {\n          sortArray[+value.thread.split('.')[0] - 1].push(value);\n        });\n        sortArray.forEach((value) => {\n          value.sort((a, b) => {\n            return +a.thread.split('.')[1] - +b.thread.split('.')[1];\n          });\n        });\n        return sortArray.flat();\n      };\n\n      const sortedRowIndex = orderByThread(rowIndex);\n      const concatIndex = timeline + '.' + subThread;\n      const result = sortedRowIndex.map((v, index) => ({\n        ...v,\n        sortedRowIndex: index\n      }));\n      const results = result.filter(function (entry) {\n        return entry.thread === concatIndex;\n      });\n\n      const xplot = results[0] && results[0].sortedRowIndex * getXScale();\n      return xplot + topMargin;\n    },\n    [data, getXScale, topMargin, filteredByDate]\n  );\n\n  // Map to named months\n  const MONTHS = {\n    1: 'Jan',\n    2: 'Feb',\n    3: 'March',\n    4: 'Apr',\n    5: 'May',\n    6: 'June',\n    7: 'July',\n    8: 'Aug',\n    9: 'Sept',\n    10: 'Oct',\n    11: 'Nov',\n    12: 'Dec'\n  };\n\n  const convertNumberToMonths = (months) => {\n    // Convert months to order\n    const orderedMonths = months;\n    orderedMonths.sort(function (a, b) {\n      return a - b;\n    });\n\n    // Map to named months\n    const output = orderedMonths.map(function (i) {\n      return MONTHS[i];\n    });\n\n    return output;\n  };\n\n  function lastDayOfMonthArray(object) {\n    let tempDates = [];\n    let dates = [];\n    object.forEach((obj) => {\n      if (!tempDates.find((date) => date === formatDate(obj.date))) {\n        tempDates.push(formatDate(obj.date));\n      }\n    });\n    tempDates.forEach((date) => {\n      const dateMonth = Number(date.split('/')[0]);\n      const dateYear = Number(date.split('/')[2]);\n      let pushDate = '12/31/9999';\n      tempDates.forEach((fDate) => {\n        const fDateMonth = Number(fDate.split('/')[0]);\n        const fDateDay = Number(fDate.split('/')[1]);\n        const fDateYear = Number(fDate.split('/')[2]);\n        if (\n          fDateYear === dateYear &&\n          fDateMonth === dateMonth &&\n          fDateDay < Number(pushDate.split('/')[1])\n        ) {\n          pushDate = fDate;\n        }\n      });\n      if (pushDate !== '12/31/9999') {\n        dates.push(pushDate);\n      }\n    });\n    dates = [...new Set(dates)];\n    const returnObject = dates.map((date) => {\n      let timelines = [];\n      let subThreads = [];\n      object.forEach((obj) => {\n        if (formatDate(obj.date) === formatDate(date)) {\n          timelines.push(obj.timeline);\n          subThreads.push(obj.subThread);\n        }\n      });\n      return {\n        date: date,\n        timelines: timelines,\n        subThread: subThreads\n      };\n    });\n    return returnObject;\n  }\n\n  useEffect(() => {\n    const timelineSet = new Set();\n    data &&\n      data.forEach((item) => {\n        const timelineKey = `${item.timeline}-${item.subThread}`;\n        timelineSet.add(timelineKey);\n      });\n    setUniqueTimelines(timelineSet.size);\n  }, [data]);\n\n  function lastDayOfYearArray(object) {\n    let tempDates = [];\n    let dates = [];\n    object.forEach((obj) => {\n      if (!tempDates.find((date) => date === formatDate(obj.date))) {\n        tempDates.push(formatDate(obj.date));\n      }\n    });\n    tempDates.forEach((date) => {\n      const dateMonth = Number(date.split('/')[0]);\n      const dateYear = Number(date.split('/')[2]);\n      let pushDate = '00/00/00';\n      tempDates.forEach((fDate) => {\n        const fDateMonth = Number(fDate.split('/')[0]);\n        const fDateDay = Number(fDate.split('/')[1]);\n        const fDateYear = Number(fDate.split('/')[2]);\n        if (\n          fDateYear === dateYear &&\n          fDateMonth === dateMonth &&\n          fDateDay > Number(pushDate.split('/')[1])\n        ) {\n          pushDate = fDate;\n        }\n      });\n      if (pushDate !== '00/00/00') {\n        dates.push(pushDate);\n      }\n    });\n    dates = [...new Set(dates)];\n    dates.sort((a, b) => new Date(a) - new Date(b));\n    let dateArr = [];\n    for (let x = 0; x < dates.length; x++) {\n      if (\n        x === dates.length - 1 ||\n        Number(dates[x].split('/')[2]) !== Number(dates[x + 1].split('/')[2])\n      ) {\n        dateArr.push(dates[x]);\n      }\n    }\n    const returnObject = dateArr.map((date) => {\n      let timelines = [];\n      let subThreads = [];\n      object.forEach((obj) => {\n        if (formatDate(obj.date) === formatDate(date)) {\n          timelines.push(obj.timeline);\n          subThreads.push(obj.subThread);\n        }\n      });\n      return {\n        date: date,\n        timelines: timelines,\n        subThread: subThreads\n      };\n    });\n    return returnObject;\n  }\n\n  function firstDayOfYearArray(object) {\n    let tempDates = [];\n    let dates = [];\n    object.forEach((obj) => {\n      if (!tempDates.find((date) => date === formatDate(obj.date))) {\n        tempDates.push(formatDate(obj.date));\n      }\n    });\n    tempDates.forEach((date) => {\n      const dateMonth = Number(date.split('/')[0]);\n      const dateYear = Number(date.split('/')[2]);\n      let pushDate = '12/31/9999';\n      tempDates.forEach((fDate) => {\n        const fDateMonth = Number(fDate.split('/')[0]);\n        const fDateDay = Number(fDate.split('/')[1]);\n        const fDateYear = Number(fDate.split('/')[2]);\n        if (\n          fDateYear === dateYear &&\n          fDateMonth === dateMonth &&\n          fDateDay < Number(pushDate.split('/')[1])\n        ) {\n          pushDate = fDate;\n        }\n      });\n      if (pushDate !== '12/31/9999') {\n        dates.push(pushDate);\n      }\n    });\n    dates = [...new Set(dates)];\n    dates.sort((a, b) => new Date(b) - new Date(a));\n    let dateArr = [];\n    for (let x = 0; x < dates.length; x++) {\n      if (\n        x === dates.length - 1 ||\n        Number(dates[x].split('/')[2]) !== Number(dates[x + 1].split('/')[2])\n      ) {\n        dateArr.push(dates[x]);\n      }\n    }\n    dateArr.sort((a, b) => new Date(a) - new Date(b));\n    const returnObject = dateArr.map((date) => {\n      let timelines = [];\n      let subThreads = [];\n      object.forEach((obj) => {\n        if (formatDate(obj.date) === formatDate(date)) {\n          timelines.push(obj.timeline);\n          subThreads.push(obj.subThread);\n        }\n      });\n      return {\n        date: date,\n        timelines: timelines,\n        subThread: subThreads\n      };\n    });\n    return returnObject;\n  }\n\n  const Today = (object) => {\n    const dateList = [];\n    object &&\n      object.map((item) => {\n        dateList.push(item.date);\n      });\n\n    let unique = [...new Set(dateList)];\n\n    const today = new Date().toLocaleDateString('en-US');\n\n    //const todaysDate = unique.filter(date => date.includes('7/29/2022'));\n    const todaysDate = unique.filter((date) => date.includes(today));\n\n    return todaysDate;\n  };\n\n  const getInverseProportionalNumber = (inputNumber) => {\n    const reciprocal = 1 / inputNumber;\n    const wholeNumber = Math.round(reciprocal * 400);\n    return wholeNumber;\n  };\n\n  const visualizationSmall = 10;\n  const visualizationLarge = 30;\n  const rangeHandles = 18;\n  const adjusterHeight = 100;\n\n  // Plot category lines\n  const GuideLinesShort = () => {\n    const xLines = buildCategoryLines().map((item, index) => {\n      return (\n        <div\n          key={index}\n          style={{\n            position: 'absolute',\n            zIndex: 0,\n            top: 186 * index\n          }}\n        >\n          <div\n            className={classes.horizontalDash}\n            style={{ height: threadHeight }}\n          />\n          <div\n            style={{\n              //width: 'calc(100vw * 1.7)',\n              width:\n                // dataConvertedDate &&\n                // mergePlots.slice(-1).pop().plots * nodeWidth,\n                filteredByDate &&\n                uniqueNodeScaleAmount * getXScale() + getXScale(),\n              height: threadHeight,\n              borderBottom: `${theme.palette.divider} 1px solid`\n            }}\n          />\n        </div>\n      );\n    });\n\n    return xLines;\n  };\n\n  const preloadArray = [...Array(7).keys()];\n\n  //Format visualization hover card\n  const VisualizationCard = ({ title, data, date, user }) => {\n    return (\n      <div>\n        <Typography variant='subtitle2'> {title} </Typography>\n        <div>\n          <Typography variant='caption'> {data} </Typography>\n        </div>\n        <div>\n          <Typography variant='caption'> {date} </Typography>\n        </div>\n        <div>\n          <Typography variant='caption'> {user} </Typography>\n        </div>\n      </div>\n    );\n  };\n\n  const VisualizationCardMulti = ({ title, data, date, user }) => {\n    return (\n      <div\n        style={{\n          width: 130,\n          borderRadius: 4,\n          marginBottom: 16,\n          padding: 8\n        }}\n      >\n        <div>\n          <Typography variant='subtitle2'> {title} </Typography>\n        </div>\n        <div>\n          <Typography variant='caption'> {data} </Typography>\n        </div>\n        <div>\n          <Typography variant='caption'> {date} </Typography>\n        </div>\n        <div>\n          <Typography variant='caption'> {user} </Typography>\n        </div>\n      </div>\n    );\n  };\n\n  // Plot Legend\n\n  const categoryList = [];\n  data &&\n    filteredByDate.map((item) => {\n      categoryList.push({\n        label: item.timelineCategoryName,\n        color: item.color,\n        timeline: item.timeline\n      });\n    });\n\n  const uniqueCategoryLegend = [\n    ...new Map(categoryList.map((item) => [item['label'], item])).values()\n  ];\n\n  const uniqueCategoryLegendSorted = uniqueCategoryLegend.sort((a, b) =>\n    a.timeline > b.timeline ? 1 : -1\n  );\n\n  const LegendDot = ({ background }) => {\n    return (\n      <div\n        style={{\n          width: 30,\n          height: 15,\n          background: lighten(background, 0.5),\n          borderRadius: theme.spacing(6)\n        }}\n      />\n    );\n  };\n\n  const LegendItem = ({ label, color }) => {\n    return (\n      <div\n        style={{\n          display: 'flex',\n          alignItems: 'center'\n        }}\n      >\n        <LegendDot background={'#' + color} />\n        <div style={{ marginLeft: theme.spacing(1) }}>\n          <Typography variant='caption'>{label} </Typography>\n        </div>\n      </div>\n    );\n  };\n\n  const legend =\n    data &&\n    uniqueCategoryLegendSorted.map((item, index) => {\n      return <LegendItem key={index} color={item.color} label={item.label} />;\n    });\n\n  // Plot category bar\n  const plotCategoryBar = (timelineNumber, subThread) => {\n    const xLine =\n      data &&\n      filteredByDate.map((item) => {\n        return item.timeline.toString() + '.' + item.subThread.toString();\n      });\n\n    let unique = [...new Set(xLine)];\n\n    const uniqueSorted = unique.sort(function (a, b) {\n      return a.localeCompare(b);\n    });\n\n    const rowIndex = uniqueSorted.reduce(function (s, a) {\n      s.push({ thread: a });\n      return s;\n    }, []);\n\n    const concatIndex = timelineNumber + '.' + subThread;\n\n    const result = rowIndex.map((v, index) => ({ ...v, rowIndex: index + 1 }));\n    const results = result.filter(function (entry) {\n      return entry.thread === concatIndex;\n    });\n\n    //const xplot = results[0].rowIndex * threadHeight;\n    const xplot =\n      (results[0] && results[0].rowIndex * getXScale()) - getXScale();\n    return xplot;\n\n    // const plot = (timelineNumber * threadHeight - threadHeight) * subThread;\n    // return plot;\n  };\n\n  const CategoryBar = ({ label, height }) => {\n    return (\n      <div className={classes.categoryBar} style={{ height: height }}>\n        <div className={classes.categoryLabel}>\n          <Typography variant='subtitle2'> {label} </Typography>\n        </div>\n      </div>\n    );\n  };\n\n  const DateMarkers = (\n    <div>\n      {filteredByDate &&\n        showYearMarkers &&\n        uniqueNodeScaleAmount >= summaryBreakpoint &&\n        firstDayOfYearArray(filteredByDate).map((item, index) => {\n          return (\n            <div\n              key={index}\n              style={{\n                position: 'absolute',\n                bottom: 0,\n                left: plotY(item.date)\n              }}\n            >\n              <MttYearTag year>{item.date.split('/')[2]}</MttYearTag>\n            </div>\n          );\n        })}\n      {filteredByDate &&\n        uniqueNodeScaleAmount >= summaryBreakpoint &&\n        showMonthMarkers &&\n        lastDayOfMonthArray(filteredByDate).map((item, index) => {\n          return (\n            <div\n              key={index}\n              style={{\n                position: 'absolute',\n                bottom: 0,\n                left: plotY(item.date)\n              }}\n            >\n              <MttYearTag>\n                {convertNumberToMonths([item.date.split('/')[0]])}\n              </MttYearTag>\n            </div>\n          );\n        })}\n\n      {filteredByDate &&\n        uniqueNodeScaleAmount >= summaryBreakpoint &&\n        Today(filteredByDate).map((item) => {\n          return (\n            <div\n              style={{\n                position: 'absolute',\n                bottom: 0,\n                left: plotY(item)\n              }}\n            >\n              <MttYearTag year today>\n                <Typography variant='caption'> TODAY </Typography>\n              </MttYearTag>\n            </div>\n          );\n        })}\n    </div>\n  );\n\n  // timeline render\n  return (\n    <div>\n      <div\n        ref={mainContainer}\n        style={{\n          position: 'relative',\n          // top: 45,\n          height: '75vh',\n          overflow: 'scroll'\n        }}\n      >\n        {/* CategoryBar */}\n        {!loading && (\n          <>\n            <div style={{ zIndex: 99999999, position: 'absolute', bottom: 0 }}>\n              {DateMarkers}\n            </div>\n\n            {data &&\n              data &&\n              uniqueNodeScaleAmount < summaryBreakpoint &&\n              filteredByDate.map((item, index) => {\n                return (\n                  <div\n                    key={index}\n                    className={classes.categoryBarPlacement}\n                    style={{\n                      top:\n                        plotCategoryBar(\n                          Number(item.timeline),\n                          Number(item.subThread)\n                        ) + 0\n                    }}\n                  >\n                    <CategoryBar\n                      key={item.id}\n                      label={item.timelineCategoryName}\n                      height={data && getXScale()}\n                    />\n                  </div>\n                );\n              })}\n\n            {data &&\n              filteredByDate.map((item, index) => {\n                return item.dates.length === 1 ? (\n                  <div\n                    key={index}\n                    style={{\n                      position: 'absolute',\n                      left: plotY(\n                        new Date(item.date).toLocaleDateString('en-US')\n                      ),\n                      top: plotX(item.timeline, item.subThread),\n                      //top: 0,\n                      zIndex:\n                        999999 -\n                        plotY(new Date(item.date).toLocaleDateString('en-US')) -\n                        item.subThread\n                      //zIndex: 9999999 - index * index,\n                    }}\n                  >\n                    <TimelineNode\n                      icon={\n                        <IconRenderer\n                          noBorder\n                          value={{\n                            color: { hex: '#' + item.color },\n                            name: item.iconID\n                          }}\n                        />\n                      }\n                      dot={data && uniqueNodeScaleAmount <= overviewBreakpoint}\n                      dotColor={'#' + item.color}\n                      data={item.dates}\n                      details={\n                        data && uniqueNodeScaleAmount < summaryBreakpoint\n                      }\n                      height={\n                        (data &&\n                          uniqueNodeScaleAmount <= summaryBreakpoint &&\n                          183) ||\n                        (data &&\n                          uniqueNodeScaleAmount <= overviewBreakpoint &&\n                          30)\n                      }\n                      width={\n                        data && uniqueNodeScaleAmount < summaryBreakpoint && 130\n                      }\n                      boxStyle\n                      show={showAllDetails}\n                      iconColor={'#' + item.color}\n                    />\n                  </div>\n                ) : (\n                  <div key={item.id}>\n                    <div\n                      style={{\n                        position: 'absolute',\n                        left:\n                          plotY(\n                            new Date(item.date).toLocaleDateString('en-US')\n                          ) + 4,\n                        top: plotX(item.timeline, item.subThread),\n                        zIndex:\n                          999999 -\n                          plotY(\n                            new Date(item.date).toLocaleDateString('en-US')\n                          ) -\n                          item.timeline\n                      }}\n                    >\n                      <MultiDot map={item.dates} number={item.dates.length} />\n                    </div>\n                  </div>\n                );\n              })}\n\n            <Fade in={data && uniqueNodeScaleAmount >= summaryBreakpoint}>\n              <div>\n                {data &&\n                  minnifiedResult.map((item, index) => {\n                    return (\n                      <div\n                        key={index}\n                        style={{\n                          position: 'absolute',\n                          //zIndex: 0,\n                          left: plotY(item.firstDate) + 2,\n                          top:\n                            data && uniqueNodeScaleAmount > overviewBreakpoint\n                              ? 14 + plotX(item.timeline, item.subThread)\n                              : 4 + plotX(item.timeline, item.subThread)\n                        }}\n                      >\n                        <TimelineWrapper\n                          timeline={item.timeline}\n                          style={{\n                            width:\n                              plotY(item.lastDate) - plotY(item.firstDate) + 45,\n                            height:\n                              data && uniqueNodeScaleAmount > overviewBreakpoint\n                                ? 20\n                                : 40,\n                            backgroundColor: lighten('#' + item.color, 0.7)\n                          }}\n                        />\n                      </div>\n                    );\n                  })}\n              </div>\n            </Fade>\n            {/* <Fade in={data && filteredByDate.length < mttBreakpointMd}> */}\n            {data && uniqueNodeScaleAmount < summaryBreakpoint && (\n              <div>\n                <GuideLinesShort />\n              </div>\n            )}\n          </>\n        )}\n        {/* </Fade> */}\n      </div>\n\n      {/* lower Section //////////////////////////////////////////////////////////////////////////////////////////////// */}\n      <div style={{ width: 250 }}>\n        <HeightAdjuster\n          verticalAdjuster={verticalAdjuster}\n          setVerticalAdjuster={setVerticalAdjuster}\n        />\n      </div>\n\n      {!loading && (\n        <div\n          style={{\n            position: 'relative',\n            borderTop: '1px solid lightgrey',\n            overflow: 'scroll'\n          }}\n        >\n          <div>\n            {data && displayRangeFilter && (\n              <div\n                style={{\n                  overflow: 'scroll'\n                }}\n              >\n                <div key={data}>\n                  <DynamicRangeSlider\n                    id='range-slider'\n                    step={10}\n                    threads={10 * uniqueTimelines}\n                    width={containerWidth - rangeHandles}\n                    margin={\n                      topMargin +\n                      getInverseProportionalNumber(verticalAdjuster) * 3\n                    }\n                    defaultValue={[10, unique.length * 10]}\n                    max={unique.length * 10}\n                    min={10}\n                    onThumbDragEnd={processRangeValues}\n                    onRangeDragEnd={processRangeValues}\n                    onInput={(e) => getRangeValues(e)}\n                  />\n                </div>\n              </div>\n            )}\n\n            <div>\n              {data &&\n                data.map((item, index) => {\n                  return item.dates.length === 1 ? (\n                    <div\n                      key={index}\n                      style={{\n                        position: 'absolute',\n                        left:\n                          dataConvertedDate &&\n                          plotYV(\n                            new Date(item.date).toLocaleDateString('en-US')\n                          ) *\n                            (containerWidth / unique.length) -\n                            (visualizationSmall + rangeHandles),\n                        top:\n                          plotXV(item.timeline, item.subThread) /\n                            verticalAdjuster +\n                          visualizationYScale +\n                          adjusterHeight\n                      }}\n                    >\n                      <VisualizationDot\n                        type={item.dates[0].details.shortDescription}\n                        hover={\n                          <VisualizationCard\n                            title={item.dates[0].details.shortDescription}\n                            data={item.dates[0].details.data1}\n                            date={item.dates[0].details.date}\n                            //user={item.dates[0].details.data2}\n                          />\n                        }\n                      />\n                    </div>\n                  ) : (\n                    <div key={item.id}>\n                      <div\n                        style={{\n                          position: 'absolute',\n                          left:\n                            dataConvertedDate &&\n                            plotYV(\n                              new Date(item.date).toLocaleDateString('en-US')\n                            ) *\n                              (containerWidth / unique.length) -\n                              (visualizationSmall + rangeHandles),\n                          top:\n                            plotXV(item.timeline, item.subThread) /\n                              verticalAdjuster +\n                            visualizationYScale +\n                            adjusterHeight\n                        }}\n                      >\n                        <VisualizationDot\n                          hover={\n                            <div style={{ color: 'black' }}>\n                              {item.dates.map((item) => {\n                                return (\n                                  <VisualizationCardMulti\n                                    title={item.details.description}\n                                    date={item.details.date}\n                                    key={item.id}\n                                  />\n                                );\n                              })}\n                            </div>\n                          }\n                          multi\n                        >\n                          {item.dates.length}\n                        </VisualizationDot>\n                      </div>\n                    </div>\n                  );\n                })}\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Preloading */}\n      <div style={{ position: 'absolute', top: 0, left: 0, zIndex: 10 }}>\n        {loading &&\n          preloadArray.map((item, index) => {\n            return (\n              <div\n                key={index}\n                style={{\n                  position: 'absolute',\n                  left: Math.floor(Math.random() * 11) * 60 + 40,\n                  top: (index + 1) * 80\n                }}\n              >\n                <TimelinePreloaderNode longView loading={loading} />\n              </div>\n            );\n          })}\n      </div>\n      {/* Preloading End */}\n\n      {/* Legend */}\n      {uniqueNodeScaleAmount >= summaryBreakpoint && (\n        <div\n          style={{\n            position: 'absolute',\n            right: 0,\n            top: 0,\n            zIndex: 999999999,\n            background: 'white',\n            borderRadius: 4\n          }}\n        >\n          <div\n            style={{\n              display: 'flex',\n              padding: theme.spacing(1),\n              gap: theme.spacing(3)\n            }}\n          >\n            {legend}\n\n            <Button\n              className={classes.button}\n              onClick={() => setShowMonthMarkers(!showMonthMarkers)}\n            >\n              <span\n                style={{ textDecoration: !showMonthMarkers && 'line-through' }}\n              >\n                M\n              </span>\n            </Button>\n            <Button\n              className={classes.button}\n              onClick={() => setShowYearMarkers(!showYearMarkers)}\n            >\n              <span\n                style={{ textDecoration: !showYearMarkers && 'line-through' }}\n              >\n                Y\n              </span>\n            </Button>\n          </div>\n        </div>\n      )}\n      {/* Breakpoint testing */}\n      {/* <div\n        style={{\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          zIndex: 999999999,\n          background: 'white',\n          borderRadius: 4,\n        }}\n      >\n        <Typography variant=\"caption\">\n          Data nodes:\n          <span style={{ fontWeight: 700 }}>\n            {filteredByDate.length} ::::::::::\n          </span>\n          <span style={{ fontWeight: 700 }}>\n            {uniqueNodeScaleAmount} ::::::::::\n          </span>\n          Summary Breakpoint:\n          <span style={{ fontWeight: 700 }}>\n            {summaryBreakpoint} ::::::::::\n          </span>\n          Overview Breakpoint:\n          <span style={{ fontWeight: 700 }}>{overviewBreakpoint} ::::::::</span>\n          Container Width:\n          <span style={{ fontWeight: 700 }}>{containerWidth} :::::::::</span>\n          Summary Width: Circle\n          <span style={{ fontWeight: 700 }}>\n            {summaryComponentSize} ::::::::\n          </span>\n          Overview width: Dot\n          <span style={{ fontWeight: 700 }}>\n            {overviewComponentSize} :::::::\n          </span>\n        </Typography>\n      </div> */}\n    </div>\n  );\n});\n"],"mappings":";;;;;;;;;;;;;AA2BA,MAAMsB,YAAYf,YAAYgB,WAAW;CACvCC,MAAM,EAAE;CACRC,gBAAgB;EACdC,iBACE;EACFC,oBAAoB;EACpBC,gBAAgB;EAChBC,kBAAkB;EACnB;CACDC,QAAQ,EACNC,QAAQ,KACT;CACDC,aAAa;EACXC,YAAYtB,QAAQY,MAAMW,QAAQC,OAAOC,OAAO,GAAI;EACpDC,OAAOd,MAAMW,QAAQC,OAAOG;EAC5BC,SAAS;EACTC,YAAY;EACb;CACDC,sBAAsB;EACpBC,UAAU;EACVC,MAAM;EACP;CACDC,eAAe;EACbC,WAAW;EACXC,OAAO;EACR;CACDC,QAAQ,EACN,WAAW,EACTC,gBAAgB,gBAClB,EACF;CACD,EAAE;AAEH,MAAaC,cAAc7C,MAAM8C,UAAU;CACzC,MAAM,CAACC,kBAAkBlD,SAAS,MAAM;CACxC,MAAM,CAACmD,YAAYC,iBAAiBpD,SAAS,GAAG;CAChD,MAAM,CAACqD,UAAUC,eAAetD,UAAU;CAC1C,MAAM,CAACuD,WAAWC,gBAAgBxD,UAAU;CAC5C,MAAM,CAACyD,SAASC,cAAc1D,UAAU;CACxC,MAAM,CAAC2D,oBAAoBC,yBAAyB5D,SAAS,KAAK;CAClE,MAAM,CAAC6D,cAAcC,mBAAmB9D,SAAS,GAAG;CACpD,MAAM,CAAC+D,cAAcC,mBAAmBhE,UAAU;CAClD,MAAM,CAACiE,gBAAgBC,qBAAqBlE,UAAU;CACtD,MAAM,CAACmE,kBAAkBC,uBAAuBpE,SAAS,MAAM;CAC/D,MAAM,CAACqE,iBAAiBC,sBAAsBtE,SAAS,MAAM;CAC7D,MAAM,CAACuE,kBAAkBC,uBAAuBxE,SAAS,IAAI;CAC7D,MAAM,CAACyE,iBAAiBC,sBAAsB1E,SAAS,EAAE;CAEzD,MAAM2E,UAAUtD,UAAU4B,MAAM;CAChC,MAAM,EAAE2B,MAAMC,YAAY5B;CAC1B,MAAM3B,QAAQd,UAAU;CAExB,MAAMsE,sBAAsB;AAE5B7E,iBAAgB;EACd,MAAM8E,QAAQ,EAAE;AAChBH,UACEA,KAAKI,KAAKC,SAAS;AACjBF,SAAMG,KAAKD,KAAKE,KAAKC,MAAM,GAAG,CAAC;IAC/B;EAGJ,MAAMC,cAAc,CAAC,GAAG,IAAIC,IAAIP,MAAM,CAAC,CAACQ,MAAM;AAE9CX,UAAQpB,aAAa6B,YAAY,KAAK,SAAS;AAC/CT,UAAQlB,WAAW2B,YAAYA,YAAYG,SAAS,KAAK,SAAS;IACjE,CAACZ,KAAK,CAAC;CAEV,MAAMa,gBAAgBvF,OAAO,KAAK;AAElCD,iBAAgB;AACdiE,oBACEuB,cAAcC,UAAUD,cAAcC,QAAQC,cAAc,EAC7D;IACA,EAAE,CAAC;CAEN,IAAIC,iBAAiB;CACrB,MAAMC,gBAAgB;CAEtB,MAAMC,uBAAuB;AAC3B,MAAIL,cAAcC,QAChBxB,mBAAkBuB,cAAcC,QAAQC,YAAY;;AAIxDI,QAAOC,iBAAiB,gBAAgB;AACtCC,gBAAcL,eAAe;AAC7BA,mBAAiBM,WAAWJ,gBAAgBD,cAAc;GAC1D;CAEF,MAAMd,UAAQ,EAAE;AAChBH,SACEA,KAAKI,KAAKC,WAAS;AACjBF,UAAMG,KAAKD,OAAKE,KAAKC,MAAM,GAAG,CAAC;GAC/B;CAGJ,MAAMC,gBAAc,CAAC,GAAG,IAAIC,IAAIP,QAAM,CAAC;CAEvC,IAAIoB,oBAAoB,EAAE;AAE1Bd,eAAYL,KAAKC,WAAS;AACxBkB,oBAAkBjB,KAAK,WAAWD,OAAK;GACvC;CAEF,IAAImB,eAAe,EAAE;AAErBA,cAAalB,KAAKmB,OAAOF,kBAAkB,IAAIf,MAAM,GAAG,CAAC,GAAG,EAAE;CAE9D,IAAIkB,iBAAiB,EAAE;AAEvBF,cAAapB,KAAKC,WAAS;AACzBqB,iBAAepB,KAAK,WAAWD,OAAK;GACpC;AAEFkB,mBAAkBnB,KAAKC,WAAS;AAC9BqB,iBAAeC,QAAQtB,OAAK;GAC5B;CAEF,MAAMuB,YAAYF,eAAef,MAAM;CAIvC,MAAMkB,uBAAuBrG,kBAAkB;EAC7C,MAAMsG,UAAU9B,QAAQA,KAAKI,KAAKC,WAASA,OAAK0B,MAAM,CAACC,MAAM;AAO7D,SALEhC,QACA8B,WACAA,QAAQ1B,KAAKC,WAAS;AACpB,UAAOA,OAAK6B;IACZ;IAEH,CAAClC,KAAK,CAAC;CAIV,MAAMmC,WACJnC,QACA6B,sBAAsB,CAAClB,KAAK,SAAUyB,GAAGC,GAAG;AAG1C,SAFU,IAAIE,KAAKH,EAAE7B,KAAK,GAChB,IAAIgC,KAAKF,EAAE9B,KAAK;GAE1B;CAIJ,IAAIkC,oBACFzC,QACAmC,SAAS/B,KAAKC,YAAU;EACtB,GAAGA;EACHE,MAAM,IAAIgC,KAAKlC,OAAKE,KAAK,CAACmC,oBAAmB;EAC9C,EAAE;CAEL,SAASC,WAAWpC,MAAM;AACxB,SAAO,IAAIgC,KAAKhC,KAAK,CAACmC,mBAAmB,QAAQ;;CAGnD,MAAME,sBAAsBpH,aACzBqH,aAAa;EACZ,MAAMC,QAAQ,IAAIP,KAAKX,UAAU,GAAG;EACpC,MAAMmB,MAAM,IAAIR,KAAKX,UAAU,GAAG;EAElC,MAAMoB,aAAa,CAACH,SAAS;EAE7B,MAAMI,WAAW,CAAC,IAAIV,KAAKO,MAAM,CAACJ,oBAAoB,CAAC;EAEvD,IAAIQ,OAAO,IAAIX,KAAKO,MAAM;AAC1B,SAAOI,QAAQH,KAAK;GAClB,MAAMI,UAAUD,KAAKE,QAAQF,KAAKG,SAAS,GAAG,EAAE;AAChDH,UAAO,IAAIX,KAAKY,QAAQ;AACxBF,YAAS3C,KAAK4C,KAAKR,oBAAoB,CAAC;;EAG1C,MAAMY,kBAAkBL,SAAS7C,IAAI,SAAUmD,OAAO;AACpD,UAAO,EAAEhD,MAAMgD,OAAO;IACtB;EAEF,MAAMC,QAAQ,EAAE;AAChB,OAAK,IAAIC,IAAI,GAAGA,KAAKR,SAASrC,QAAQ6C,IACpCD,OAAMlD,KAAKmD,EAAE;AAYf,SATiBH,gBAAgBlD,KAAKuD,GAAGF,SAAO;GAC9C,GAAGE;GACHH,OAAOA,MAAMC,QAAM;GACpB,EAAE,CAGAG,QAAQ,EAAErD,MAAAA,aAAWyC,WAAWa,SAAStD,OAAK,CAAC,CAC/CH,KAAK,EAAEoD,OAAAA,cAAYA,QAAM,CACzBM,UAAU;IAGf,CAAClC,UACH,CAAC;CAED,IAAImC,YAAY,EAAE;AAElBtB,sBACEA,kBAAkBrC,KAAKC,WAAS;AAC9B0D,YAAUzD,KAAKD,OAAKE,KAAK;GACzB;CAEJ,IAAIyD,SAAS,CAAC,GAAG,IAAItD,IAAIqD,UAAU,CAAC;AAEpC1I,iBAAgB;AACdqD,cACEsF,UAAUvC,OAAOmB,oBAAoBoB,OAAOxD,MAAM,GAAG,CAACyD,KAAK,CAAC,CAAC,GAAG,GACjE;IACA,EAAE,CAAC;CAEN,MAAMC,oCAAoC1I,aACvCsC,MAAMqG,UAAU;EACf,MAAMnB,eAAa,CAACoB,KAAKC,MAAMvG,KAAK,CAAC;EACrC,MAAMwG,WAAW,CAACF,KAAKC,MAAMF,MAAM,CAAC;EACpC,IAAIJ,cAAY,EAAE;AAElBtB,uBACEA,kBAAkBrC,KAAKC,WAAS;AAC9B0D,eAAUzD,KAAKD,OAAKE,KAAK;IACzB;EAEJ,IAAIyD,WAAS,CAAC,GAAG,IAAItD,IAAIqD,YAAU,CAAC;EAEpC,MAAMQ,mBAAmB;GACvB,MAAMC,aAAaR,SAAOA,SAAOpD,SAAS;GAC1C,MAAML,SAAO,IAAIgC,KAAKiC,WAAW;AACjCjE,UAAK6C,QAAQ7C,OAAK8C,SAAS,GAAG,EAAE;AAIhC,UAAO,GAHO9C,OAAKmE,UAAU,GAAG,EAGjB,GAFHnE,OAAK8C,SAAS,CAEJ,GADT9C,OAAKsE,aAAa;;EAIjC,MAAMC,UAAUP,YAAY;AAC5BP,WAAO1D,KAAKwE,QAAQ;EAEpB,MAAMxB,oBAAkBU,SAAO5D,IAAI,SAAUmD,SAAO;AAClD,UAAO,EAAEhD,MAAMgD,SAAO;IACtB;EAEF,MAAMC,UAAQ,EAAE;AAChB,OAAK,IAAIC,MAAI,GAAGA,OAAKO,SAAOpD,QAAQ6C,MAClCD,SAAMlD,KAAKmD,MAAI,GAAG;EAGpB,IAAIC,eAAaJ,kBAAgBlD,KAAKuD,KAAGF,SAAO;GAC9C,GAAGE;GACHH,OAAOA,QAAMC,QAAM;GACpB,EAAE;EAEH,MAAM9E,cAAY+E,aACfE,QAAQ,EAAEJ,OAAAA,cAAYR,aAAWa,SAASL,QAAM,CAAC,CACjDpD,KAAK,EAAEG,MAAAA,aAAWA,OAAK,CACvBuD,UAAU;EAEb,MAAMjF,YAAU6E,aACbE,QAAQ,EAAEJ,OAAAA,cAAYc,SAAST,SAASL,QAAM,CAAC,CAC/CpD,KAAK,EAAEG,MAAAA,aAAWA,OAAK,CACvBuD,UAAU;AAEblF,eAAaD,YAAU;AACvBG,aAAWD,UAAQ;IAErB,CAAC4D,kBACH,CAAC;CAED,MAAMsC,iBAAiBvJ,aAAawJ,eAAe;EACjD,MAAMlH,SAAOkH,WAAW;EACxB,MAAMb,UAAQa,WAAW;AACzBxG,gBAAc4F,KAAKC,MAAMvG,OAAK,CAAC;AAC/BY,cAAY0F,KAAKC,MAAMF,QAAM,CAAC;IAC7B,EAAE,CAAC;CAEN,MAAMc,2BAA2B;AAC/BxG,cAAYyF,kCAAkC3F,YAAYE,SAAS;;CAIrE,MAAMyG,SAAS1J,aACZ6E,WAAS;EACR,MAAM8E,WAAW,CAAC9E,OAAK;EACvB,IAAI0D,cAAY,EAAE;AAElBtB,uBACEA,kBAAkBrC,KAAKC,YAAS;AAC9B0D,eAAUzD,KAAKD,QAAKE,KAAK;IACzB;EAEJ,IAAI6E,eAAe,EAAE;AAErBpF,UACEA,KAAKI,KAAKC,YAAS;AACjB+E,gBAAa9E,KAAKD,QAAKE,KAAK;IAC5B;EAEJ,IAAIyD,WAAS,CAAC,GAAG,IAAItD,IAAI0E,aAAa,CAAC;EAQvC,MAAM9B,oBANQU,SAAO5D,KAAKG,WAAS,IAAIgC,KAAKhC,OAAK,CAAC,CAEpBI,MAAMyB,KAAGC,QAAMD,IAAEmD,SAAS,GAAGlD,IAAEkD,SAAS,CAAC,CAE3CnF,KAAKG,WAASA,OAAKmC,oBAAoB,CAAC,CAEtCtC,IAAI,SAAUmD,SAAO;AACjD,UAAO,EAAEhD,MAAMgD,SAAO;IACtB;EAEF,MAAMC,UAAQ,EAAE;AAChB,OAAK,IAAIC,MAAI,GAAGA,OAAKO,SAAOpD,QAAQ6C,MAClCD,SAAMlD,KAAKmD,IAAE;AAkBf,SAfiBH,kBAAgBlD,KAAKuD,KAAGF,SAAO;GAC9C,GAAGE;GACHH,OAAOA,QAAMC,QAAM;GACpB,EAAE,CAGAG,QAAQ,EAAErD,MAAAA,aAAW4E,SAAStB,SAAStD,OAAK,CAAC,CAC7CH,KAAK,EAAEoD,OAAAA,cAAYA,QAAM,CAEVpD,KAAKC,YAAS;AAC9B,UAAOA;IACP;IAMJ,CAACL,MAAMyC,kBACT,CAAC;CAED,SAASmD,YAAYC,OAAOC,OAAOC,YAAY;EAC7C,MAAMC,aAAavE,OAAOoE,MAAMI,MAAM,IAAI,CAAC,GAAG;EAC9C,MAAMC,aAAazE,OAAOqE,MAAMG,MAAM,IAAI,CAAC,GAAG;EAC9C,MAAME,WAAW1E,OAAOoE,MAAMI,MAAM,IAAI,CAAC,GAAG;EAC5C,MAAMG,WAAW3E,OAAOqE,MAAMG,MAAM,IAAI,CAAC,GAAG;EAC5C,MAAMI,YAAY5E,OAAOoE,MAAMI,MAAM,IAAI,CAAC,GAAG;EAC7C,MAAMK,YAAY7E,OAAOqE,MAAMG,MAAM,IAAI,CAAC,GAAG;AAC7C,MAAIF,eAAe,KAAK;AACtB,OAAIM,YAAYC,UACd,QAAO;YACED,cAAcC;QACnBN,aAAaE,WACf,QAAO;aACEF,eAAeE;SACpBC,WAAWC,SACb,QAAO;;;AAIb,UAAO;SACF;AACL,OAAIC,YAAYC,UACd,QAAO;YACED,cAAcC;QACnBN,aAAaE,WACf,QAAO;aACEF,eAAeE;SACpBC,WAAWC,SACb,QAAO;;;AAIb,UAAO;;;CAIX,SAASG,sBAAsBC,QAAQ;EACrC,IAAIC,cAAc,EAAE;EACpB,IAAIC,UAAU;AACdF,SAAOG,SAASC,KAAKnD,QAAM;AACzB,OAAIgD,YAAY7F,WAAW,EACzB6F,aAAYnG,KAAK;IACfuG,UAAUD,IAAIC;IACdC,WAAWF,IAAIE;IACfC,WAAWpE,WAAWiE,IAAIrG,KAAK;IAC/ByG,UAAUrE,WAAWiE,IAAIrG,KAAK;IAC9B/C,OAAOoJ,IAAIpJ;IACXyJ,MAAML,IAAIM;IACX,CAAC;QACG;AACLR,cAAU;AACVD,gBAAYE,SAASQ,WAAW;AAC9B,SACEP,IAAIC,aAAaM,OAAON,YACxBD,IAAIE,cAAcK,OAAOL,WACzB;AACA,UACElB,YACEjD,WAAWiE,IAAIrG,KAAK,EACpBoC,WAAWwE,OAAOJ,UAAU,EAC5B,IACD,CAEDI,QAAOJ,YAAYpE,WAAWiE,IAAIrG,KAAK;eAEvCqF,YACEjD,WAAWiE,IAAIrG,KAAK,EACpBoC,WAAWwE,OAAOH,SAAS,EAC3B,IACD,CAEDG,QAAOH,WAAWrE,WAAWiE,IAAIrG,KAAK;AAExCmG,gBAAU;;MAEZ;;AAEJ,OAAIA,QACFD,aAAYnG,KAAK;IACfuG,UAAUD,IAAIC;IACdC,WAAWF,IAAIE;IACfC,WAAWpE,WAAWiE,IAAIrG,KAAK;IAC/ByG,UAAUrE,WAAWiE,IAAIrG,KAAK;IAC9B/C,OAAOoJ,IAAIpJ;IACXyJ,MAAML,IAAIM;IACX,CAAC;IAEJ;AACF,SAAOT;;CAGT,IAAI1E,QAAQ,EAAE;AACdU,sBACEA,kBAAkBrC,KAAKC,YAAS;AAC9B0B,QAAMzB,KAAKD,QAAKE,KAAK;GACrB;CAEJ,MAAMiD,UAAQ,EAAE;AAChB,MAAK,IAAIC,MAAI,GAAGA,OAAKO,OAAOpD,QAAQ6C,MAClCD,SAAMlD,KAAKmD,IAAE;CAGf,MAAM2D,eAAe3L,cAAc,IAAI8G,KAAK5D,UAAU,EAAE,CAACA,UAAU,CAAC;CACpE,MAAM0I,aAAa5L,cAAc,IAAI8G,KAAK1D,QAAQ,EAAE,CAACA,QAAQ,CAAC;CAE9D,MAAMyI,iBACJtH,QACAA,KAAK4D,QAAQvD,YAAS;EACpB,MAAME,SAAO,IAAIgC,KAAKlC,QAAKE,KAAK;AAChC,SAAOA,UAAQ6G,gBAAgB7G,SAAO8G;GACtC;CAEJ,MAAME,qBAAqB/L,kBAAkB;EAC3C,MAAMgM,QACJxH,QACAsH,gBAAgBlH,KAAKC,YAAS;AAC5B,UAAOA,QAAKwG,SAAS/C,UAAU,GAAG,MAAMzD,QAAKyG,UAAUhD,UAAU;IACjE;AAGJ,SADa,CAAC,GAAG,IAAIpD,IAAI8G,MAAM,CAAC;IAE/B,CAACF,gBAAgBtH,KAAK,CAAC;CAE1B,MAAMyH,kBAAkBzH,QAAQuG,sBAAsBe,eAAe;CAErE,MAAMI,wBAAwB;CAC9B,MAAMC,uBAAuB;CAI7B,MAAMC,oBAAoBxD,KAAKC,MAAMhF,iBAAiBqI,sBAAsB;CAC5E,MAAMG,qBAAqBzD,KAAKC,MAAMhF,iBAAiBsI,qBAAqB;AAE5EtM,iBAAgB;AAQd+D,mBANEY,QACAA,KAAK4D,QAAQvD,YAAS;GACpB,MAAME,SAAO,IAAIgC,KAAKlC,QAAKE,KAAK;AAChC,UAAOA,UAAQ6G,gBAAgB7G,UAAQ8G;IACvC,GAE4BzG,OAAO;IACtC;EAACZ;EAAMqH;EAAYD;EAAa,CAAC;CAEpC,MAAMU,oBAAoB,EAAE;AAE5BR,iBAAgBX,SAAStG,YAAS;AAChCyH,oBAAkBxH,KAAKD,QAAKE,KAAK;GACjC;CAEF,IAAIwH,wBAAwB,CAAC,GAAG,IAAIrH,IAAIoH,kBAAkB,CAAC,CAAClH;AAE3CpF,mBAAkB;AACjC,MAAIuM,wBAAwBF,mBAC1B,QAAO;WACEE,yBAAyBH,kBAClC,QAAOD;MAEP,QAAO;IAER;EAACI;EAAuBH;EAAmBC;EAAmB,CAAC;CAElE,MAAMI,YAAYzM,kBAAkB;AAClC,MAAIuM,wBAAwBF,mBAC1B,QAAO;WACEE,yBAAyBH,kBAClC,QAAOD;MAEP,QAAO;IAER;EAACI;EAAuBH;EAAmBC;EAAmB,CAAC;CAElE,MAAMK,YAAY1M,kBAAkB;AAClC,MAAIuM,wBAAwBF,mBAC1B,QAAO;WACEE,yBAAyBH,kBAClC,QAAOD;MAEP,QAAO;IAER;EAACI;EAAuBH;EAAmBC;EAAmB,CAAC;CAElE,MAAMM,YAAYJ,yBAAyBH,oBAAoB,KAAK;CAGpE,MAAMQ,SAAS5M,aACZqL,UAAUC,cAAc;EACvB,MAAMU,UACJxH,QACAA,KAAKI,KAAKC,YAAS;AACjB,UAAOA,QAAKwG,WAAW,MAAMxG,QAAKyG;IAClC;EASJ,MAAM2B,iBAPO,CAAC,GAAG,IAAI/H,IAAI8G,QAAM,CAAC,CAERc,OAAO,SAAUC,GAAGnG,KAAG;AAC7CmG,KAAEjI,KAAK,EAAEkI,QAAQpG,KAAG,CAAC;AACrB,UAAOmG;KACN,EAAE,CAAC,CAE0B5H,MAAMyB,KAAGC,QACvCD,IAAEoG,SAASnG,IAAEmG,SAAS,IAAI,GAC3B;EAED,MAAME,cAAc7B,WAAW,MAAMC;EAKrC,MAAMzB,YAJSoD,eAAerI,KAAKwI,GAAGC,WAAW;GAC/C,GAAGD;GACHH,gBAAgBI;GACjB,EAAE,CACoBjF,OAAO,SAAUkF,OAAO;AAC7C,UAAOA,MAAMN,WAAWE;IACxB;AAEF,UADcrD,UAAQ,MAAMA,UAAQ,GAAGoD,iBAAiB,MACzCN;IAEjB,CAACnI,MAAMmI,UACT,CAAC;CAED,MAAMa,QAAQxN,aACX6E,YAAS;EACR,MAAM8E,aAAW,CAAC9E,QAAK;EAEvB,IAAI0D,cAAY,EAAE;AAElBtB,uBACEA,kBAAkBrC,KAAKC,YAAS;AAC9B0D,eAAUzD,KAAKD,QAAKE,KAAK;IACzB;EAEJ,IAAI6E,iBAAe,EAAE;AAErB3C,uBACE6E,eAAelH,KAAKC,YAAS;AAC3B+E,kBAAa9E,KAAKD,QAAKE,KAAK;IAC5B;EAEJ,IAAIyD,WAAS,CAAC,GAAG,IAAItD,IAAI0E,eAAa,CAAC;EAQvC,MAAM9B,oBANQU,SAAO5D,KAAKG,WAAS,IAAIgC,KAAKhC,OAAK,CAAC,CAEpBI,MAAMyB,KAAGC,QAAMD,IAAEmD,SAAS,GAAGlD,IAAEkD,SAAS,CAAC,CAE3CnF,KAAKG,YAASA,QAAKmC,oBAAoB,CAAC,CAEtCtC,IAAI,SAAUmD,SAAO;AACjD,UAAO,EAAEhD,MAAMgD,SAAO;IACtB;EAEF,MAAMC,UAAQ,EAAE;AAChB,OAAK,IAAIC,MAAI,GAAGA,OAAKO,SAAOpD,QAAQ6C,MAClCD,SAAMlD,KAAKmD,IAAE;EAGf,IAAIC,eAAaJ,kBAAgBlD,KAAKuD,KAAGF,SAAO;GAC9C,GAAGE;GACHH,OAAOA,QAAMC,QAAM;GACpB,EAAE;EAEH,MAAMgC,QACJ/B,gBACAA,aACGE,QAAQ,EAAErD,MAAAA,cAAW4E,WAAStB,SAAStD,QAAK,CAAC,CAC7CH,KAAK,EAAEoD,OAAAA,cAAYA,QAAM;AAU9B,UAPEE,gBACA+B,MAAIrF,KAAKC,YAAS;AAChB,UAAOA;IACP,IAEiB6H,WAAW,GAElBA,WAAW,IAAIA,WAAW,KAAK,MAAM,KAAK;IAE1D;EAACzF;EAAmByF;EAAWZ;EACjC,CAAC;CAED,MAAM2B,QAAQzN,aACXqL,YAAUC,gBAAc;EACvB,MAAMU,UACJxH,QACAsH,eAAelH,KAAKC,YAAS;AAC3B,UAAOA,QAAKwG,WAAW,MAAMxG,QAAKyG;IAClC;EAIJ,MAAMuB,aAFO,CAAC,GAAG,IAAI3H,IAAI8G,QAAM,CAAC,CAERc,OAAO,SAAUC,KAAGnG,KAAG;AAC7CmG,OAAEjI,KAAK,EAAEkI,QAAQpG,KAAG,CAAC;AACrB,UAAOmG;KACN,EAAE,CAAC;EAMN,MAAMW,iBAAiBC,cAAc;GACnC,IAAIC,aAAa;AACjBD,aAAUxC,SAASpD,YAAU;AAC3B,QAAIA,QAAMiF,OAAOvC,MAAM,IAAI,CAAC,KAAKmD,WAC/BA,cAAa7F,QAAMiF,OAAOvC,MAAM,IAAI,CAAC;KAEvC;GACF,IAAIoD,YAAY,CAAC,GAAGC,MAAM,CAACF,WAAW,CAAC,CAAChJ,KAAKmJ,MAAOA,IAAI,EAAG,CAAC;AAC5DJ,aAAUxC,SAASpD,YAAU;AAC3B8F,cAAU,CAAC9F,QAAMiF,OAAOvC,MAAM,IAAI,CAAC,KAAK,GAAG3F,KAAKiD,QAAM;KACtD;AACF8F,aAAU1C,SAASpD,YAAU;AAC3BA,YAAM5C,MAAMyB,KAAGC,QAAM;AACnB,YAAO,CAACD,IAAEoG,OAAOvC,MAAM,IAAI,CAAC,KAAK,CAAC5D,IAAEmG,OAAOvC,MAAM,IAAI,CAAC;MACtD;KACF;AACF,UAAOoD,UAAUrH,MAAM;;EAGzB,MAAMyG,mBAAiBS,cAAcb,WAAS;EAC9C,MAAMK,gBAAc7B,aAAW,MAAMC;EAKrC,MAAMzB,YAJSoD,iBAAerI,KAAKwI,KAAGC,aAAW;GAC/C,GAAGD;GACHH,gBAAgBI;GACjB,EAAE,CACoBjF,OAAO,SAAUkF,SAAO;AAC7C,UAAOA,QAAMN,WAAWE;IACxB;AAGF,UADcrD,UAAQ,MAAMA,UAAQ,GAAGoD,iBAAiBR,WAAW,IACpDE;IAEjB;EAACnI;EAAMiI;EAAWE;EAAWb;EAC/B,CAAC;CAGD,MAAMkC,SAAS;EACb,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,IAAI;EACJ,IAAI;EACJ,IAAI;EACL;CAED,MAAMC,yBAAyBC,WAAW;EAExC,MAAMC,gBAAgBD;AACtBC,gBAAchJ,KAAK,SAAUyB,KAAGC,KAAG;AACjC,UAAOD,MAAIC;IACX;AAOF,SAJesH,cAAcvJ,IAAI,SAAUqD,KAAG;AAC5C,UAAO+F,OAAO/F;IACd;;CAKJ,SAASoG,oBAAoBrD,UAAQ;EACnC,IAAIsD,YAAY,EAAE;EAClB,IAAI/H,UAAQ,EAAE;AACdyE,WAAOG,SAASC,UAAQ;AACtB,OAAI,CAACkD,UAAUC,MAAMxJ,YAASA,YAASoC,WAAWiE,MAAIrG,KAAK,CAAC,CAC1DuJ,WAAUxJ,KAAKqC,WAAWiE,MAAIrG,KAAK,CAAC;IAEtC;AACFuJ,YAAUnD,SAASpG,YAAS;GAC1B,MAAMyJ,YAAYvI,OAAOlB,QAAK0F,MAAM,IAAI,CAAC,GAAG;GAC5C,MAAMgE,WAAWxI,OAAOlB,QAAK0F,MAAM,IAAI,CAAC,GAAG;GAC3C,IAAIiE,WAAW;AACfJ,aAAUnD,SAASwD,UAAU;IAC3B,MAAMC,aAAa3I,OAAO0I,MAAMlE,MAAM,IAAI,CAAC,GAAG;IAC9C,MAAMoE,WAAW5I,OAAO0I,MAAMlE,MAAM,IAAI,CAAC,GAAG;AAE5C,QADkBxE,OAAO0I,MAAMlE,MAAM,IAAI,CAAC,GAAG,KAE7BgE,YACdG,eAAeJ,aACfK,WAAW5I,OAAOyI,SAASjE,MAAM,IAAI,CAAC,GAAG,CAEzCiE,YAAWC;KAEb;AACF,OAAID,aAAa,aACfnI,SAAMzB,KAAK4J,SAAS;IAEtB;AACFnI,YAAQ,CAAC,GAAG,IAAIrB,IAAIqB,QAAM,CAAC;AAgB3B,SAfqBA,QAAM3B,KAAKG,YAAS;GACvC,IAAIiK,YAAY,EAAE;GAClB,IAAIC,aAAa,EAAE;AACnBjE,YAAOG,SAASC,UAAQ;AACtB,QAAIjE,WAAWiE,MAAIrG,KAAK,KAAKoC,WAAWpC,QAAK,EAAE;AAC7CiK,eAAUlK,KAAKsG,MAAIC,SAAS;AAC5B4D,gBAAWnK,KAAKsG,MAAIE,UAAU;;KAEhC;AACF,UAAO;IACLvG,MAAMA;IACKiK;IACX1D,WAAW2D;IACZ;IACD;;AAIJpP,iBAAgB;EACd,MAAMqP,8BAAc,IAAIhK,KAAK;AAC7BV,UACEA,KAAK2G,SAAStG,YAAS;GACrB,MAAMsK,cAAc,GAAGtK,QAAKwG,SAAQ,GAAIxG,QAAKyG;AAC7C4D,eAAYE,IAAID,YAAY;IAC5B;AACJ7K,qBAAmB4K,YAAYG,KAAK;IACnC,CAAC7K,KAAK,CAAC;CA2DV,SAASiL,oBAAoBzE,UAAQ;EACnC,IAAIsD,cAAY,EAAE;EAClB,IAAI/H,UAAQ,EAAE;AACdyE,WAAOG,SAASC,UAAQ;AACtB,OAAI,CAACkD,YAAUC,MAAMxJ,YAASA,YAASoC,WAAWiE,MAAIrG,KAAK,CAAC,CAC1DuJ,aAAUxJ,KAAKqC,WAAWiE,MAAIrG,KAAK,CAAC;IAEtC;AACFuJ,cAAUnD,SAASpG,YAAS;GAC1B,MAAMyJ,cAAYvI,OAAOlB,QAAK0F,MAAM,IAAI,CAAC,GAAG;GAC5C,MAAMgE,aAAWxI,OAAOlB,QAAK0F,MAAM,IAAI,CAAC,GAAG;GAC3C,IAAIiE,aAAW;AACfJ,eAAUnD,SAASwD,YAAU;IAC3B,MAAMC,eAAa3I,OAAO0I,QAAMlE,MAAM,IAAI,CAAC,GAAG;IAC9C,MAAMoE,aAAW5I,OAAO0I,QAAMlE,MAAM,IAAI,CAAC,GAAG;AAE5C,QADkBxE,OAAO0I,QAAMlE,MAAM,IAAI,CAAC,GAAG,KAE7BgE,cACdG,iBAAeJ,eACfK,aAAW5I,OAAOyI,WAASjE,MAAM,IAAI,CAAC,GAAG,CAEzCiE,cAAWC;KAEb;AACF,OAAID,eAAa,aACfnI,SAAMzB,KAAK4J,WAAS;IAEtB;AACFnI,YAAQ,CAAC,GAAG,IAAIrB,IAAIqB,QAAM,CAAC;AAC3BA,UAAMpB,MAAMyB,KAAGC,QAAM,IAAIE,KAAKF,IAAE,GAAG,IAAIE,KAAKH,IAAE,CAAC;EAC/C,IAAI2I,YAAU,EAAE;AAChB,OAAK,IAAIC,MAAI,GAAGA,MAAIjJ,QAAMnB,QAAQoK,MAChC,KACEA,QAAMjJ,QAAMnB,SAAS,KACrBa,OAAOM,QAAMiJ,KAAG/E,MAAM,IAAI,CAAC,GAAG,KAAKxE,OAAOM,QAAMiJ,MAAI,GAAG/E,MAAM,IAAI,CAAC,GAAG,CAErE8E,WAAQzK,KAAKyB,QAAMiJ,KAAG;AAG1BD,YAAQpK,MAAMyB,KAAGC,QAAM,IAAIE,KAAKH,IAAE,GAAG,IAAIG,KAAKF,IAAE,CAAC;AAgBjD,SAfqB0I,UAAQ3K,KAAKG,YAAS;GACzC,IAAIiK,cAAY,EAAE;GAClB,IAAIC,eAAa,EAAE;AACnBjE,YAAOG,SAASC,UAAQ;AACtB,QAAIjE,WAAWiE,MAAIrG,KAAK,KAAKoC,WAAWpC,QAAK,EAAE;AAC7CiK,iBAAUlK,KAAKsG,MAAIC,SAAS;AAC5B4D,kBAAWnK,KAAKsG,MAAIE,UAAU;;KAEhC;AACF,UAAO;IACLvG,MAAMA;IACNiK,WAAWA;IACX1D,WAAW2D;IACZ;IACD;;CAIJ,MAAMS,SAAS1E,aAAW;EACxB,MAAMvD,aAAW,EAAE;AACnBuD,cACEA,SAAOpG,KAAKC,YAAS;AACnB4C,cAAS3C,KAAKD,QAAKE,KAAK;IACxB;EAEJ,IAAIyD,WAAS,CAAC,GAAG,IAAItD,IAAIuC,WAAS,CAAC;EAEnC,MAAMkI,yBAAQ,IAAI5I,MAAM,EAACG,mBAAmB,QAAQ;AAKpD,SAFmBsB,SAAOJ,QAAQrD,YAASA,QAAKsD,SAASsH,MAAM,CAAC;;CAKlE,MAAME,gCAAgCC,gBAAgB;EACpD,MAAMC,aAAa,IAAID;AAEvB,SADoBlH,KAAKC,MAAMkH,aAAa,IAAI;;CAIlD,MAAME,qBAAqB;CAE3B,MAAME,eAAe;CACrB,MAAMC,iBAAiB;CAGvB,MAAMC,wBAAwB;AA+B5B,SA9BetE,oBAAoB,CAACnH,KAAKC,SAAMwI,YAAU;AACvD,UACE,sBAAA,cAAC,OAAD;IACE,KAAKA;IACL,OAAO;KACLhL,UAAU;KACVkO,QAAQ;KACRC,KAAK,MAAMnD;KACZ;IAkBG,EAhBJ,sBAAA,cAAC,OAAD;IACE,WAAW9I,QAAQnD;IACnB,OAAO,EAAEM,QAAQ+B,cAAc;IAAC,CAAA,EAElC,sBAAA,cAAC,OAAD,EACE,OAAO;IAELhB,OAGEqJ,kBACAS,wBAAwBE,WAAW,GAAGA,WAAW;IACnD/K,QAAQ+B;IACRgN,cAAc,GAAGvP,MAAMW,QAAQ6O,QAAO;IACvC,EAAC,CAAA,CAEA;IAER;;CAKJ,MAAMC,eAAe,CAAC,GAAG7C,MAAM,EAAE,CAAC8C,MAAM,CAAC;CAGzC,MAAMC,qBAAqB,EAAEC,OAAOtM,MAAAA,QAAMO,MAAAA,SAAMgM,WAAW;AACzD,SACE,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,aAAiC,EAArB,KAAED,OAAM,IAAa,EACrD,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEtM,QAAK,IAAa,CAC/C,EACL,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEO,SAAK,IAAa,CAC/C,EACL,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEgM,MAAK,IAAa,CAC/C,CACD;;CAIV,MAAMC,0BAA0B,EAAEF,OAAAA,SAAOtM,MAAAA,QAAMO,MAAAA,SAAMgM,MAAAA,aAAW;AAC9D,SACE,sBAAA,cAAC,OAAD,EACE,OAAO;GACLtO,OAAO;GACPwO,cAAc;GACdC,cAAc;GACdC,SAAS;GACV,EAcG,EAZJ,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,aAAiC,EAArB,KAAEL,SAAM,IAAa,CAClD,EACL,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEtM,QAAK,IAAa,CAC/C,EACL,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEO,SAAK,IAAa,CAC/C,EACL,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAApB,KAAEgM,QAAK,IAAa,CAC/C,CACD;;CAMV,MAAMK,eAAe,EAAE;AACvB5M,SACEsH,eAAelH,KAAKC,YAAS;AAC3BuM,eAAatM,KAAK;GAChBuM,OAAOxM,QAAKyM;GACZtP,OAAO6C,QAAK7C;GACZqJ,UAAUxG,QAAKwG;GAChB,CAAC;GACF;CAMJ,MAAMqG,6BAJuB,CAC3B,GAAG,IAAIF,IAAIJ,aAAaxM,KAAKC,YAAS,CAACA,QAAK,UAAUA,QAAK,CAAC,CAAC,CAAC4M,QAAQ,CACvE,CAEuDtM,MAAMyB,MAAGC,QAC/DD,KAAEyE,WAAWxE,IAAEwE,WAAW,IAAI,GAC/B;CAED,MAAMsG,aAAa,EAAE/P,iBAAiB;AACpC,SACE,sBAAA,cAAC,OAAD,EACE,OAAO;GACLa,OAAO;GACPf,QAAQ;GACRE,YAAYtB,QAAQsB,YAAY,GAAI;GACpCqP,cAAc/P,MAAM0Q,QAAQ,EAAC;GAC9B,EACD,CAAA;;CAIN,MAAMC,cAAc,EAAER,OAAOrP,YAAY;AACvC,SACE,sBAAA,cAAC,OAAD,EACE,OAAO;GACLE,SAAS;GACTC,YAAY;GACb,EAMG,EAJJ,sBAAA,cAAC,WAAD,EAAW,YAAY,MAAMH,OAAM,CAAA,EACnC,sBAAA,cAAC,OAAD,EAAK,OAAO,EAAE8P,YAAY5Q,MAAM0Q,QAAQ,EAAC,EAAG,EAEvC,EADH,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA8B,EAAnBP,OAAM,IAAa,CAC/C,CACD;;CAIV,MAAMU,SACJvN,QACAkN,2BAA2B9M,KAAKC,SAAMwI,YAAU;AAC9C,SAAO,sBAAA,cAAC,YAAD;GAAY,KAAKA;GAAO,OAAOxI,QAAK7C;GAAO,OAAO6C,QAAKwM;GAAS,CAAA;GACvE;CAGJ,MAAMW,mBAAmBC,gBAAgB3G,gBAAc;EACrD,MAAMU,UACJxH,QACAsH,eAAelH,KAAKC,YAAS;AAC3B,UAAOA,QAAKwG,SAAS/C,UAAU,GAAG,MAAMzD,QAAKyG,UAAUhD,UAAU;IACjE;EAQJ,MAAMuE,aANO,CAAC,GAAG,IAAI3H,IAAI8G,QAAM,CAAC,CAEJ7G,KAAK,SAAUyB,MAAGC,KAAG;AAC/C,UAAOD,KAAEuL,cAActL,IAAE;IACzB,CAE4BiG,OAAO,SAAUC,KAAGnG,MAAG;AACnDmG,OAAEjI,KAAK,EAAEkI,QAAQpG,MAAG,CAAC;AACrB,UAAOmG;KACN,EAAE,CAAC;EAEN,MAAMG,gBAAc+E,iBAAiB,MAAM3G;EAG3C,MAAMzB,YADSgD,WAASjI,KAAKwI,KAAGC,aAAW;GAAE,GAAGD;GAAGP,UAAUQ,UAAQ;GAAG,EAAE,CACnDjF,OAAO,SAAUkF,SAAO;AAC7C,UAAOA,QAAMN,WAAWE;IACxB;AAKF,UADGrD,UAAQ,MAAMA,UAAQ,GAAGgD,WAAWJ,WAAW,IAAIA,WAAW;;CAOnE,MAAM2F,eAAe,EAAEf,OAAAA,SAAO3P,aAAa;AACzC,SACE,sBAAA,cAAC,OAAD;GAAK,WAAW6C,QAAQ5C;GAAa,OAAO,EAAUD,QAAQ;GAIxD,EAHJ,sBAAA,cAAC,OAAD,EAAK,WAAW6C,QAAQhC,eAEnB,EADH,sBAAA,cAAC,YAAD,EAAY,SAAQ,aAAiC,EAArB,KAAE8O,SAAM,IAAa,CAClD,CACD;;CAIV,MAAMgB,cACJ,sBAAA,cAAC,OAAA,MACEvG,kBACC7H,mBACAsI,yBAAyBH,qBACzBqD,oBAAoB3D,eAAe,CAAClH,KAAKC,SAAMwI,YAAU;AACvD,SACE,sBAAA,cAAC,OAAD;GACE,KAAKA;GACL,OAAO;IACLhL,UAAU;IACViQ,QAAQ;IACRhQ,MAAMkL,MAAM3I,QAAKE,KAAI;IACtB;GAGG,EADJ,sBAAA,cAAC,YAAD,EAAY,MAAA,MAA0C,EAApCF,QAAKE,KAAK0F,MAAM,IAAI,CAAC,GAAe,CAClD;GAER,EACHqB,kBACCS,yBAAyBH,qBACzBrI,oBACAsK,oBAAoBvC,eAAe,CAAClH,KAAKC,SAAMwI,YAAU;AACvD,SACE,sBAAA,cAAC,OAAD;GACE,KAAKA;GACL,OAAO;IACLhL,UAAU;IACViQ,QAAQ;IACRhQ,MAAMkL,MAAM3I,QAAKE,KAAI;IACtB;GAKG,EAHJ,sBAAA,cAAC,YAAA,MACEkJ,sBAAsB,CAACpJ,QAAKE,KAAK0F,MAAM,IAAI,CAAC,GAAG,CAAC,CACvC,CACR;GAER,EAEHqB,kBACCS,yBAAyBH,qBACzBsD,MAAM5D,eAAe,CAAClH,KAAKC,YAAS;AAClC,SACE,sBAAA,cAAC,OAAD,EACE,OAAO;GACLxC,UAAU;GACViQ,QAAQ;GACRhQ,MAAMkL,MAAM3I,QAAI;GACjB,EAKG,EAHJ,sBAAA,cAAC,YAAD;GAAY,MAAA;GAAK,OAAA;GAEL,EADV,sBAAA,cAAC,YAAD,EAAY,SAAQ,WAA6B,EAAnB,UAAmB,CACvC,CACR;GAER,CAEP;AAGD,QACE,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,OAAD;EACE,KAAKQ;EACL,OAAO;GACLhD,UAAU;GAEVX,QAAQ;GACR6Q,UAAU;GACX;EAwJE,EArJF,CAAC9N,WACA,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAAC,OAAD,EAAK,OAAO;EAAE8L,QAAQ;EAAUlO,UAAU;EAAYiQ,QAAQ;EAAG,EAE5D,EADFD,YACE,EAEJ7N,QACCA,QACA+H,wBAAwBH,qBACxBN,eAAelH,KAAKC,SAAMwI,YAAU;AAClC,SACE,sBAAA,cAAC,OAAD;GACE,KAAKA;GACL,WAAW9I,QAAQnC;GACnB,OAAO,EACLoO,KACEwB,gBACE/L,OAAOpB,QAAKwG,SAAS,EACrBpF,OAAOpB,QAAKyG,UACd,CAAC,GAAG,GACP;GAOG,EALJ,sBAAA,cAAC,aAAD;GACE,KAAKzG,QAAK2N;GACV,OAAO3N,QAAKyM;GACZ,QAAQ9M,QAAQiI,WAAW;GAAC,CAAA,CAE1B;GAER,EAEHjI,QACCsH,eAAelH,KAAKC,SAAMwI,YAAU;AAClC,SAAOxI,QAAK0B,MAAMnB,WAAW,IAC3B,sBAAA,cAAC,OAAD;GACE,KAAKiI;GACL,OAAO;IACLhL,UAAU;IACVC,MAAMkL,MACJ,IAAIzG,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QACzC,CAAC;IACDsJ,KAAK/C,MAAM5I,QAAKwG,UAAUxG,QAAKyG,UAAU;IAEzCiF,QACE,SACA/C,MAAM,IAAIzG,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QAAQ,CAAC,GACtDrC,QAAKyG;IAER;GAiCG,EA/BJ,sBAAA,cAAC,cAAD;GACE,MACE,sBAAA,cAAC,cAAD;IACE,UAAA;IACA,OAAO;KACLtJ,OAAO,EAAEyQ,KAAK,MAAM5N,QAAK7C,OAAO;KAChC0Q,MAAM7N,QAAK6G;KACZ;IAEL,CAAA;GACA,KAAKlH,QAAQ+H,yBAAyBF;GACtC,UAAU,MAAMxH,QAAK7C;GACrB,MAAM6C,QAAK0B;GACX,SACE/B,QAAQ+H,wBAAwBH;GAElC,QACG5H,QACC+H,yBAAyBH,qBACzB,OACD5H,QACC+H,yBAAyBF,sBACzB;GAEJ,OACE7H,QAAQ+H,wBAAwBH,qBAAqB;GAEvD,UAAA;GACA,MAAMtJ;GACN,WAAW,MAAM+B,QAAK7C;GAAM,CAAA,CAE1B,GAEN,sBAAA,cAAC,OAAD,EAAK,KAAK6C,QAAK2N,IAoBhB,EAnBG,sBAAA,cAAC,OAAD,EACE,OAAO;GACLnQ,UAAU;GACVC,MACEkL,MACE,IAAIzG,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QACzC,CAAC,GAAG;GACNsJ,KAAK/C,MAAM5I,QAAKwG,UAAUxG,QAAKyG,UAAU;GACzCiF,QACE,SACA/C,MACE,IAAIzG,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QACzC,CAAC,GACDrC,QAAKwG;GACR,EAGE,EADH,sBAAA,cAAC,UAAD;GAAU,KAAKxG,QAAK0B;GAAO,QAAQ1B,QAAK0B,MAAMnB;GAAO,CAAA,CAClD,CAER;GACD,EAEJ,sBAAA,cAAC,MAAD,EAAM,IAAIZ,QAAQ+H,yBAAyBH,mBAiCrC,EAhCJ,sBAAA,cAAC,OAAA,MACE5H,QACCyH,gBAAgBrH,KAAKC,SAAMwI,YAAU;AACnC,SACE,sBAAA,cAAC,OAAD;GACE,KAAKA;GACL,OAAO;IACLhL,UAAU;IAEVC,MAAMkL,MAAM3I,QAAK0G,UAAU,GAAG;IAC9BiF,KACEhM,QAAQ+H,wBAAwBF,qBAC5B,KAAKoB,MAAM5I,QAAKwG,UAAUxG,QAAKyG,UAAU,GACzC,IAAImC,MAAM5I,QAAKwG,UAAUxG,QAAKyG,UAAS;IAC9C;GAcG,EAZJ,sBAAA,cAAC,iBAAD;GACE,UAAUzG,QAAKwG;GACf,OAAO;IACL5I,OACE+K,MAAM3I,QAAK2G,SAAS,GAAGgC,MAAM3I,QAAK0G,UAAU,GAAG;IACjD7J,QACE8C,QAAQ+H,wBAAwBF,qBAC5B,KACA;IACNsG,iBAAiBrS,QAAQ,MAAMuE,QAAK7C,OAAO,GAAG;IAC/C;GAAC,CAAA,CAEA;GAER,CACD,CACD,EAELwC,QAAQ+H,wBAAwBH,qBAC/B,sBAAA,cAAC,OAAA,MACC,sBAAA,cAAC,iBAAA,KAAe,CAEnB,CAEJ,CAEE,EAGL,sBAAA,cAAC,OAAD,EAAK,OAAO,EAAE3J,OAAO,KAAK,EAKrB,EAJH,sBAAA,cAAC,gBAAD;EACoB0B;EACGC;EAAoB,CAAA,CAExC,EAEJ,CAACK,WACA,sBAAA,cAAC,OAAD,EACE,OAAO;EACLpC,UAAU;EACVuQ,WAAW;EACXL,UAAU;EACX,EA4GJ,EA1GG,sBAAA,cAAC,OAAA,MACE/N,QAAQjB,sBACP,sBAAA,cAAC,OAAD,EACE,OAAO,EACLgP,UAAU,UACX,EAqBJ,EAnBG,sBAAA,cAAC,OAAD,EAAK,KAAK/N,MAiBL,EAhBH,sBAAA,cAAC,oBAAD;EACE,IAAG;EACH,MAAM;EACN,SAAS,KAAKH;EACd,OAAOR,iBAAiBsM;EACxB,QACExD,YACAkD,6BAA6B1L,iBAAiB,GAAG;EAEnD,cAAc,CAAC,IAAIqE,OAAOpD,SAAS,GAAG;EACtC,KAAKoD,OAAOpD,SAAS;EACrB,KAAK;EACL,gBAAgBqE;EAChB,gBAAgBA;EAChB,UAAUsE,QAAMxE,eAAewE,IAAE;EAAC,CAAA,CAEjC,CAER,EAED,sBAAA,cAAC,OAAA,MACEvJ,QACCA,KAAKI,KAAKC,SAAMwI,YAAU;AACxB,SAAOxI,QAAK0B,MAAMnB,WAAW,IAC3B,sBAAA,cAAC,OAAD;GACE,KAAKiI;GACL,OAAO;IACLhL,UAAU;IACVC,MACE2E,qBACAyC,OACE,IAAI3C,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QACzC,CAAC,IACErD,iBAAiB2E,OAAOpD,WACxB6K,qBAAqBE;IAC1BK,KACE5D,OAAO/H,QAAKwG,UAAUxG,QAAKyG,UAAU,GACnCnH,mBACFO,sBACA0L;IACH;GAaG,EAXJ,sBAAA,cAAC,kBAAD;GACE,MAAMvL,QAAK0B,MAAM,GAAGG,QAAQmM;GAC5B,OACE,sBAAA,cAAC,mBAAD;IACE,OAAOhO,QAAK0B,MAAM,GAAGG,QAAQmM;IAC7B,MAAMhO,QAAK0B,MAAM,GAAGG,QAAQoM;IAC5B,MAAMjO,QAAK0B,MAAM,GAAGG,QAAQ3B;IAGhC,CAAA;GAAC,CAAA,CAEC,GAEN,sBAAA,cAAC,OAAD,EAAK,KAAKF,QAAK2N,IAsChB,EArCG,sBAAA,cAAC,OAAD,EACE,OAAO;GACLnQ,UAAU;GACVC,MACE2E,qBACAyC,OACE,IAAI3C,KAAKlC,QAAKE,KAAK,CAACmC,mBAAmB,QACzC,CAAC,IACErD,iBAAiB2E,OAAOpD,WACxB6K,qBAAqBE;GAC1BK,KACE5D,OAAO/H,QAAKwG,UAAUxG,QAAKyG,UAAU,GACnCnH,mBACFO,sBACA0L;GACH,EAoBE,EAlBH,sBAAA,cAAC,kBAAD;GACE,OACE,sBAAA,cAAC,OAAD,EAAK,OAAO,EAAEpO,OAAO,SAAS,EAWhC,EAVK6C,QAAK0B,MAAM3B,KAAKC,YAAS;AACxB,WACE,sBAAA,cAAC,wBAAD;KACE,OAAOA,QAAK6B,QAAQqM;KACpB,MAAMlO,QAAK6B,QAAQ3B;KACnB,KAAKF,QAAK2N;KACV,CAAA;KAEJ,CAEN;GACA,OAAA;GAGgB,EADf3N,QAAK0B,MAAMnB,OACI,CACf,CAER;GACD,CACD,CACF,CAER,EAGD,sBAAA,cAAC,OAAD,EAAK,OAAO;EAAE/C,UAAU;EAAYmO,KAAK;EAAGlO,MAAM;EAAGiO,QAAQ;EAAI,EAgB5D,EAfF9L,WACCkM,aAAa/L,KAAKC,SAAMwI,aAAU;AAChC,SACE,sBAAA,cAAC,OAAD;GACE,KAAKA;GACL,OAAO;IACLhL,UAAU;IACVC,MAAMsG,KAAKoK,MAAMpK,KAAKqK,QAAQ,GAAG,GAAG,GAAG,KAAK;IAC5CzC,MAAMnD,WAAQ,KAAK;IACpB;GAGG,EADJ,sBAAA,cAAC,uBAAD;GAAuB,UAAA;GAAkB5I;GAAQ,CAAA,CAC7C;GAER,CACD,EAIJ8H,yBAAyBH,qBACxB,sBAAA,cAAC,OAAD,EACE,OAAO;EACL/J,UAAU;EACVsG,OAAO;EACP6H,KAAK;EACLD,QAAQ;EACR3O,YAAY;EACZqP,cAAc;EACf,EAiCJ,EA/BG,sBAAA,cAAC,OAAD,EACE,OAAO;EACL/O,SAAS;EACTiP,SAASjQ,MAAM0Q,QAAQ,EAAE;EACzBsB,KAAKhS,MAAM0Q,QAAQ,EAAC;EACrB,EAwBE,EAtBFG,QAED,sBAAA,cAAC,QAAD;EACE,WAAWxN,QAAQ7B;EACnB,eAAesB,oBAAoB,CAACD,iBAAiB;EAO/C,EALN,sBAAA,cAAC,QAAD,EACE,OAAO,EAAEpB,gBAAgB,CAACoB,oBAAoB,gBAAgB,EAG1D,EAH2D,IAG3D,CACA,EACR,sBAAA,cAAC,QAAD;EACE,WAAWQ,QAAQ7B;EACnB,eAAewB,mBAAmB,CAACD,gBAAgB;EAO7C,EALN,sBAAA,cAAC,QAAD,EACE,OAAO,EAAEtB,gBAAgB,CAACsB,mBAAmB,gBAAgB,EAGzD,EAH0D,IAG1D,CACA,CACL,CAER,CAsCG;EAER"}