{"version":3,"file":"ngx-daterangepicker-material-w2v.mjs","sources":["../../src/daterangepicker/daterangepicker.config.ts","../../src/daterangepicker/locale.service.ts","../../src/daterangepicker/daterangepicker.component.ts","../../src/daterangepicker/daterangepicker.component.html","../../src/daterangepicker/daterangepicker.directive.ts","../../src/daterangepicker/daterangepicker.module.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport dayjs from 'dayjs/esm';\r\nimport localeData from 'dayjs/esm/plugin/localeData';\r\ndayjs.extend(localeData);\r\n\r\nexport const LOCALE_CONFIG = new InjectionToken<LocaleConfig>('daterangepicker.config');\r\n/**\r\n *  LocaleConfig Interface\r\n */\r\nexport interface LocaleConfig {\r\n  direction?: string;\r\n  separator?: string;\r\n  weekLabel?: string;\r\n  applyLabel?: string;\r\n  cancelLabel?: string;\r\n  clearLabel?: string;\r\n  customRangeLabel?: string;\r\n  daysOfWeek?: string[];\r\n  monthNames?: string[];\r\n  firstDay?: number;\r\n  format?: string;\r\n  displayFormat?: string;\r\n  locale?: any;\r\n}\r\n/**\r\n *  DefaultLocaleConfig\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const DefaultLocaleConfig: LocaleConfig = {\r\n  direction: 'ltr',\r\n  separator: ' - ',\r\n  weekLabel: 'W',\r\n  applyLabel: 'Apply',\r\n  cancelLabel: 'Cancel',\r\n  clearLabel: 'Clear',\r\n  customRangeLabel: 'Custom range',\r\n  daysOfWeek: dayjs.weekdaysMin(),\r\n  monthNames: dayjs.monthsShort(),\r\n  firstDay: dayjs.localeData().firstDayOfWeek()\r\n};\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport { LOCALE_CONFIG, DefaultLocaleConfig, LocaleConfig } from './daterangepicker.config';\r\n\r\n@Injectable()\r\nexport class LocaleService {\r\n  constructor(@Inject(LOCALE_CONFIG) private configHolder: LocaleConfig) {}\r\n\r\n  get config() {\r\n    if (!this.configHolder) {\r\n      return DefaultLocaleConfig;\r\n    }\r\n    return { ...DefaultLocaleConfig, ...this.configHolder };\r\n  }\r\n\r\n  configWithLocale(locale) {\r\n    if (!this.configHolder && !locale) {\r\n      return DefaultLocaleConfig;\r\n    }\r\n    return {\r\n      ...DefaultLocaleConfig,\r\n      ...{ daysOfWeek: locale.weekdaysMin, monthNames: locale.monthsShort, firstDay: locale.weekStart },\r\n      ...this.configHolder\r\n    };\r\n  }\r\n}\r\n","import {\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    forwardRef,\r\n    HostListener,\r\n    Input,\r\n    OnChanges,\r\n    OnInit,\r\n    Output,\r\n    SimpleChanges,\r\n    ViewChild,\r\n    ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport dayjs, { Dayjs } from 'dayjs/esm';\r\nimport { LocaleConfig } from './daterangepicker.config';\r\nimport { LocaleService } from './locale.service';\r\n\r\nimport localeData from 'dayjs/esm/plugin/localeData';\r\nimport LocalizedFormat from 'dayjs/esm/plugin/localizedFormat';\r\nimport isoWeek from 'dayjs/esm/plugin/isoWeek';\r\nimport week from 'dayjs/esm/plugin/weekOfYear';\r\nimport customParseFormat from 'dayjs/esm/plugin/customParseFormat';\r\nimport utc from 'dayjs/esm/plugin/utc';\r\n\r\ndayjs.extend(localeData);\r\ndayjs.extend(LocalizedFormat);\r\ndayjs.extend(isoWeek);\r\ndayjs.extend(week);\r\ndayjs.extend(customParseFormat);\r\ndayjs.extend(utc);\r\n\r\nexport enum SideEnum {\r\n    left = 'left',\r\n    right = 'right',\r\n}\r\n\r\nexport interface DateRanges {\r\n    [index: string]: [Dayjs, Dayjs];\r\n}\r\n\r\nexport interface DateRange {\r\n    label: string;\r\n    dates: [Dayjs, Dayjs];\r\n}\r\n\r\nexport interface ChosenDate {\r\n    chosenLabel: string;\r\n    startDate: Dayjs;\r\n    endDate: Dayjs;\r\n}\r\n\r\nexport interface TimePeriod {\r\n    [index: string]: Dayjs;\r\n\r\n    startDate: Dayjs;\r\n    endDate: Dayjs;\r\n}\r\n\r\nexport interface StartDate {\r\n    startDate: Dayjs;\r\n}\r\n\r\nexport interface EndDate {\r\n    endDate: Dayjs;\r\n}\r\n\r\ninterface TimePickerVariables {\r\n    secondsLabel: string[];\r\n    selectedMinute: number;\r\n    selectedSecond: number;\r\n    hours: number[];\r\n    seconds: number[];\r\n    disabledHours: number[];\r\n    disabledMinutes: number[];\r\n    minutes: number[];\r\n    minutesLabel: string[];\r\n    selectedHour: number;\r\n    disabledSeconds: number[];\r\n    amDisabled?: boolean;\r\n    pmDisabled?: boolean;\r\n    ampmModel?: string;\r\n    selected: Dayjs;\r\n}\r\n\r\ninterface TimePickerVariablesHolder {\r\n    [index: string]: TimePickerVariables;\r\n}\r\n\r\ninterface CalendarRowClasses {\r\n    [index: number]: string;\r\n\r\n    classList: string;\r\n}\r\n\r\ninterface CalendarClasses {\r\n    [index: number]: CalendarRowClasses;\r\n}\r\n\r\ninterface Dropdowns {\r\n    inMaxYear: boolean;\r\n    yearArrays: number[];\r\n    maxYear: number;\r\n    minYear: number;\r\n    currentMonth: number;\r\n    inMinYear: boolean;\r\n    monthArrays: number[];\r\n    currentYear: number;\r\n}\r\n\r\ntype CalendarArrayWithProps<T> = T[] & { firstDay?: Dayjs; lastDay?: Dayjs };\r\n\r\ninterface CalendarVariables {\r\n    calRows: number[];\r\n    calCols: number[];\r\n    calendar: CalendarArrayWithProps<Dayjs[]>;\r\n    minDate: dayjs.Dayjs;\r\n    year: number;\r\n    classes: CalendarClasses;\r\n    lastMonth: number;\r\n    minute: number;\r\n    second: number;\r\n    daysInMonth: number;\r\n    dayOfWeek: number;\r\n    month: number;\r\n    hour: number;\r\n    firstDay: dayjs.Dayjs;\r\n    lastYear: number;\r\n    lastDay: dayjs.Dayjs;\r\n    maxDate: dayjs.Dayjs;\r\n    daysInLastMonth: number;\r\n    dropdowns?: Dropdowns;\r\n}\r\n\r\ninterface CalendarVariableHolder {\r\n    [index: string]: CalendarVariables;\r\n}\r\n\r\ninterface VisibleCalendar {\r\n    month: Dayjs;\r\n    calendar: CalendarArrayWithProps<Dayjs[]>;\r\n}\r\n\r\n@Component({\r\n    selector: 'ngx-daterangepicker-material',\r\n    styleUrls: ['./daterangepicker.component.scss'],\r\n    templateUrl: './daterangepicker.component.html',\r\n    encapsulation: ViewEncapsulation.None,\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => DaterangepickerComponent),\r\n            multi: true,\r\n        },\r\n    ],\r\n})\r\nexport class DaterangepickerComponent implements OnInit, OnChanges {\r\n    @Input()\r\n    startDate = dayjs().utc(true).startOf('day');\r\n\r\n    @Input()\r\n    endDate = dayjs().utc(true).endOf('day');\r\n\r\n    @Input()\r\n    dateLimit: number = null;\r\n\r\n    // general\r\n    @Input()\r\n    autoApply = false;\r\n\r\n    @Input()\r\n    singleDatePicker = false;\r\n\r\n    @Input()\r\n    showDropdowns = false;\r\n\r\n    @Input()\r\n    showWeekNumbers = false;\r\n\r\n    @Input()\r\n    showISOWeekNumbers = false;\r\n\r\n    @Input()\r\n    linkedCalendars = false;\r\n\r\n    @Input()\r\n    autoUpdateInput = true;\r\n\r\n    @Input()\r\n    alwaysShowCalendars = false;\r\n\r\n    @Input()\r\n    maxSpan = false;\r\n\r\n    @Input()\r\n    lockStartDate = false;\r\n\r\n    // timepicker variables\r\n    @Input()\r\n    timePicker = false;\r\n\r\n    @Input()\r\n    timePicker24Hour = false;\r\n\r\n    @Input()\r\n    timePickerIncrement = 1;\r\n\r\n    @Input()\r\n    timePickerSeconds = false;\r\n\r\n    // end of timepicker variables\r\n    @Input()\r\n    showClearButton = false;\r\n\r\n    @Input()\r\n    firstMonthDayClass: string = null;\r\n\r\n    @Input()\r\n    lastMonthDayClass: string = null;\r\n\r\n    @Input()\r\n    emptyWeekRowClass: string = null;\r\n\r\n    @Input()\r\n    emptyWeekColumnClass: string = null;\r\n\r\n    @Input()\r\n    firstDayOfNextMonthClass: string = null;\r\n\r\n    @Input()\r\n    lastDayOfPreviousMonthClass: string = null;\r\n\r\n    @Input()\r\n    showCustomRangeLabel: boolean;\r\n\r\n    @Input()\r\n    showCancel = false;\r\n\r\n    @Input()\r\n    keepCalendarOpeningWithRange = false;\r\n\r\n    @Input()\r\n    showRangeLabelOnInput = false;\r\n\r\n    @Input()\r\n    customRangeDirection = false;\r\n\r\n    @Input() drops: string;\r\n    @Input() opens: string;\r\n    @Input() closeOnAutoApply = true;\r\n    @Output() choosedDate: EventEmitter<ChosenDate>;\r\n    @Output() rangeClicked: EventEmitter<DateRange>;\r\n    @Output() datesUpdated: EventEmitter<TimePeriod>;\r\n    @Output() startDateChanged: EventEmitter<StartDate>;\r\n    @Output() endDateChanged: EventEmitter<EndDate>;\r\n    @Output() cancelClicked: EventEmitter<void>;\r\n    @Output() clearClicked: EventEmitter<void>;\r\n    @Output() monthChangeArrowClicked: EventEmitter<string>;\r\n    @ViewChild('pickerContainer', { static: true }) pickerContainer: ElementRef;\r\n\r\n    public chosenLabel: string;\r\n\r\n    public calendarVariables: CalendarVariableHolder = {};\r\n    // tooltiptext = []; // for storing tooltiptext\r\n    public timepickerVariables: TimePickerVariablesHolder = {};\r\n    daterangepicker: { start: FormControl; end: FormControl } = { start: new FormControl(), end: new FormControl() };\r\n\r\n    public applyBtn: { disabled: boolean } = { disabled: false };\r\n\r\n    // used in template for compile time support of enum values.\r\n    public sideEnum = SideEnum;\r\n    public chosenRange: string;\r\n\r\n    public rangesArray: Array<string> = [];\r\n    // some state information\r\n\r\n    public isShown = false;\r\n    public inline = true;\r\n    leftCalendar: VisibleCalendar = { month: null, calendar: [] };\r\n    rightCalendar: VisibleCalendar = { month: null, calendar: [] };\r\n    public showCalInRanges = false;\r\n    nowHoveredDate = null;\r\n    pickingDate = false;\r\n    // options: any = {}; // should get some opt from user\r\n    // protected\r\n\r\n    protected minDateHolder: dayjs.Dayjs;\r\n    protected maxDateHolder: dayjs.Dayjs;\r\n    protected localeHolder: LocaleConfig = {};\r\n    protected rangesHolder: DateRanges = {};\r\n    private cachedVersion: { start: Dayjs; end: Dayjs } = { start: null, end: null };\r\n\r\n    constructor(private el: ElementRef, private ref: ChangeDetectorRef, private localeHolderService: LocaleService) {\r\n        this.choosedDate = new EventEmitter();\r\n        this.rangeClicked = new EventEmitter();\r\n        this.datesUpdated = new EventEmitter();\r\n        this.startDateChanged = new EventEmitter();\r\n        this.endDateChanged = new EventEmitter();\r\n        this.cancelClicked = new EventEmitter();\r\n        this.clearClicked = new EventEmitter();\r\n        this.monthChangeArrowClicked = new EventEmitter();\r\n    }\r\n\r\n    // accessors\r\n    get minDate(): dayjs.Dayjs {\r\n        return this.minDateHolder;\r\n    }\r\n\r\n    @Input()\r\n    set minDate(value: dayjs.Dayjs | string) {\r\n        if (dayjs.isDayjs(value)) {\r\n            this.minDateHolder = value;\r\n        } else if (typeof value === 'string') {\r\n            this.minDateHolder = dayjs(value).utc(true);\r\n        } else {\r\n            this.minDateHolder = null;\r\n        }\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n    get locale(): LocaleConfig {\r\n        return this.localeHolder;\r\n    }\r\n\r\n    @Input() set locale(value: LocaleConfig) {\r\n        this.localeHolder = { ...this.localeHolderService.config, ...value };\r\n        if (value.locale) {\r\n            this.localeHolder = this.localeHolderService.configWithLocale(value.locale);\r\n        }\r\n    }\r\n\r\n    // custom ranges\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n    get ranges(): DateRanges {\r\n        return this.rangesHolder;\r\n    }\r\n\r\n    @Input() set ranges(value: DateRanges) {\r\n        this.rangesHolder = value;\r\n        this.renderRanges();\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n    get maxDate(): dayjs.Dayjs {\r\n        return this.maxDateHolder;\r\n    }\r\n\r\n    @Input()\r\n    set maxDate(value: dayjs.Dayjs | string) {\r\n        if (dayjs.isDayjs(value)) {\r\n            this.maxDateHolder = value;\r\n        } else if (typeof value === 'string') {\r\n            this.maxDateHolder = dayjs(value).utc(true);\r\n        } else {\r\n            this.maxDateHolder = null;\r\n        }\r\n    }\r\n\r\n    @Input()\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    isInvalidDate(date: Dayjs): boolean {\r\n        return false;\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n\r\n    @Input()\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    isCustomDate(date: Dayjs): boolean {\r\n        return false;\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/member-ordering\r\n\r\n    @Input()\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    isTooltipDate(date: Dayjs): string | boolean | null {\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * handle click on all element in the component, useful for outside of click\r\n     *\r\n     * @param e event\r\n     */\r\n    @HostListener('click', ['$event'])\r\n    handleInternalClick(e: MouseEvent): void {\r\n        return e.stopPropagation();\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if ((changes.startDate || changes.endDate) && this.inline) {\r\n            this.updateView();\r\n        }\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.buildLocale();\r\n        const daysOfWeek = [...this.locale.daysOfWeek];\r\n        this.locale.firstDay = this.locale.firstDay % 7;\r\n        if (this.locale.firstDay !== 0) {\r\n            let iterator = this.locale.firstDay;\r\n\r\n            while (iterator > 0) {\r\n                daysOfWeek.push(daysOfWeek.shift());\r\n                iterator--;\r\n            }\r\n        }\r\n        this.locale.daysOfWeek = daysOfWeek;\r\n        if (this.inline) {\r\n            this.cachedVersion.start = this.startDate.clone();\r\n            this.cachedVersion.end = this.endDate.clone();\r\n        }\r\n\r\n        if (this.startDate && this.timePicker) {\r\n            this.setStartDate(this.startDate);\r\n            this.renderTimePicker(SideEnum.left);\r\n        }\r\n\r\n        if (this.endDate && this.timePicker) {\r\n            this.setEndDate(this.endDate);\r\n            this.renderTimePicker(SideEnum.right);\r\n        }\r\n\r\n        this.updateMonthsInView();\r\n        this.renderCalendar(SideEnum.left);\r\n        this.renderCalendar(SideEnum.right);\r\n        this.renderRanges();\r\n    }\r\n\r\n    renderRanges(): void {\r\n        this.rangesArray = [];\r\n        let start;\r\n        let end;\r\n        if (typeof this.ranges === 'object') {\r\n            for (const range in this.ranges) {\r\n                if (this.ranges[range]) {\r\n                    if (typeof this.ranges[range][0] === 'string') {\r\n                        start = dayjs(this.ranges[range][0], this.locale.format).utc(true);\r\n                    } else {\r\n                        start = dayjs(this.ranges[range][0]).utc(true);\r\n                    }\r\n                    if (typeof this.ranges[range][1] === 'string') {\r\n                        end = dayjs(this.ranges[range][1], this.locale.format).utc(true);\r\n                    } else {\r\n                        end = dayjs(this.ranges[range][1]).utc(true);\r\n                    }\r\n                    // If the start or end date exceed those allowed by the minDate or maxSpan\r\n                    // options, shorten the range to the allowable period.\r\n                    if (this.minDate && start.isBefore(this.minDate)) {\r\n                        start = this.minDate.clone();\r\n                    }\r\n                    let maxDate = this.maxDate;\r\n                    if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate)) {\r\n                        maxDate = start.clone().add(this.maxSpan);\r\n                    }\r\n                    if (maxDate && end.isAfter(maxDate)) {\r\n                        end = maxDate.clone();\r\n                    }\r\n                    // If the end of the range is before the minimum or the start of the range is\r\n                    // after the maximum, don't display this range option at all.\r\n                    if (\r\n                        (this.minDate && end.isBefore(this.minDate, this.timePicker ? 'minute' : 'day')) ||\r\n                        (maxDate && start.isAfter(maxDate, this.timePicker ? 'minute' : 'day'))\r\n                    ) {\r\n                        continue;\r\n                    }\r\n                    // Support unicode chars in the range names.\r\n                    const elem = document.createElement('textarea');\r\n                    elem.innerHTML = range;\r\n                    const rangeHtml = elem.value;\r\n                    this.ranges[rangeHtml] = [start, end];\r\n                }\r\n            }\r\n            for (const range in this.ranges) {\r\n                if (this.ranges[range]) {\r\n                    this.rangesArray.push(range);\r\n                }\r\n            }\r\n            if (this.showCustomRangeLabel) {\r\n                this.rangesArray.push(this.locale.customRangeLabel);\r\n            }\r\n            this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;\r\n            if (!this.timePicker) {\r\n                this.startDate = this.startDate.startOf('day');\r\n                this.endDate = this.endDate.endOf('day');\r\n            }\r\n        }\r\n    }\r\n\r\n    renderTimePicker(side: SideEnum): void {\r\n        let selected: Dayjs;\r\n        let minDate: Dayjs;\r\n        const maxDate = this.maxDate;\r\n        if (side === SideEnum.left) {\r\n            selected = this.startDate.clone();\r\n            minDate = this.minDate;\r\n        } else if (side === SideEnum.right && this.endDate) {\r\n            selected = this.endDate.clone();\r\n            minDate = this.startDate;\r\n        } else if (side === SideEnum.right && !this.endDate) {\r\n            // don't have an end date, use the start date then put the selected time for the right side as the time\r\n            selected = this.getDateWithTime(this.startDate, SideEnum.right);\r\n            if (selected.isBefore(this.startDate)) {\r\n                selected = this.startDate.clone(); // set it back to the start date the time was backwards\r\n            }\r\n            minDate = this.startDate;\r\n        }\r\n        const start = this.timePicker24Hour ? 0 : 1;\r\n        const end = this.timePicker24Hour ? 23 : 12;\r\n        this.timepickerVariables[side] = {\r\n            hours: [],\r\n            minutes: [],\r\n            minutesLabel: [],\r\n            seconds: [],\r\n            secondsLabel: [],\r\n            disabledHours: [],\r\n            disabledMinutes: [],\r\n            disabledSeconds: [],\r\n            selectedHour: 0,\r\n            selectedMinute: 0,\r\n            selectedSecond: 0,\r\n            selected,\r\n        };\r\n        // generate hours\r\n        for (let i = start; i <= end; i++) {\r\n            let iIn24 = i;\r\n            if (!this.timePicker24Hour) {\r\n                iIn24 = selected.hour() >= 12 ? (i === 12 ? 12 : i + 12) : i === 12 ? 0 : i;\r\n            }\r\n\r\n            const time = selected.clone().hour(iIn24);\r\n            let disabled = false;\r\n            if (minDate && time.minute(59).isBefore(minDate)) {\r\n                disabled = true;\r\n            }\r\n            if (maxDate && time.minute(0).isAfter(maxDate)) {\r\n                disabled = true;\r\n            }\r\n\r\n            this.timepickerVariables[side].hours.push(i);\r\n            if (iIn24 === selected.hour() && !disabled) {\r\n                this.timepickerVariables[side].selectedHour = i;\r\n            } else if (disabled) {\r\n                this.timepickerVariables[side].disabledHours.push(i);\r\n            }\r\n        }\r\n\r\n        // generate minutes\r\n        for (let i = 0; i < 60; i += this.timePickerIncrement) {\r\n            const padded = i < 10 ? `0${i}` : `${i}`;\r\n            const time = selected.clone().minute(i);\r\n\r\n            let disabled = false;\r\n            if (minDate && time.second(59).isBefore(minDate)) {\r\n                disabled = true;\r\n            }\r\n            if (maxDate && time.second(0).isAfter(maxDate)) {\r\n                disabled = true;\r\n            }\r\n            this.timepickerVariables[side].minutes.push(i);\r\n            this.timepickerVariables[side].minutesLabel.push(padded);\r\n            if (selected.minute() === i && !disabled) {\r\n                this.timepickerVariables[side].selectedMinute = i;\r\n            } else if (disabled) {\r\n                this.timepickerVariables[side].disabledMinutes.push(i);\r\n            }\r\n        }\r\n        // generate seconds\r\n        if (this.timePickerSeconds) {\r\n            for (let i = 0; i < 60; i++) {\r\n                const padded = i < 10 ? `0${i}` : `${i}`;\r\n                const time = selected.clone().second(i);\r\n\r\n                let disabled = false;\r\n                if (minDate && time.isBefore(minDate)) {\r\n                    disabled = true;\r\n                }\r\n                if (maxDate && time.isAfter(maxDate)) {\r\n                    disabled = true;\r\n                }\r\n\r\n                this.timepickerVariables[side].seconds.push(i);\r\n                this.timepickerVariables[side].secondsLabel.push(padded);\r\n                if (selected.second() === i && !disabled) {\r\n                    this.timepickerVariables[side].selectedSecond = i;\r\n                } else if (disabled) {\r\n                    this.timepickerVariables[side].disabledSeconds.push(i);\r\n                }\r\n            }\r\n        }\r\n        // generate AM/PM\r\n        if (!this.timePicker24Hour) {\r\n            if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate)) {\r\n                this.timepickerVariables[side].amDisabled = true;\r\n            }\r\n\r\n            if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate)) {\r\n                this.timepickerVariables[side].pmDisabled = true;\r\n            }\r\n            if (selected.hour() >= 12) {\r\n                this.timepickerVariables[side].ampmModel = 'PM';\r\n            } else {\r\n                this.timepickerVariables[side].ampmModel = 'AM';\r\n            }\r\n        }\r\n        this.timepickerVariables[side].selected = selected;\r\n    }\r\n\r\n    renderCalendar(side: SideEnum): void {\r\n        // side enum\r\n        const mainCalendar: VisibleCalendar = side === SideEnum.left ? this.leftCalendar : this.rightCalendar;\r\n        const month: number = mainCalendar.month.month();\r\n        const year: number = mainCalendar.month.year();\r\n        const hour: number = mainCalendar.month.hour();\r\n        const minute: number = mainCalendar.month.minute();\r\n        const second: number = mainCalendar.month.second();\r\n        const daysInMonth: number = dayjs(new Date(year, month)).utc(true).daysInMonth();\r\n        const firstDay: Dayjs = dayjs(new Date(year, month, 1)).utc(true);\r\n        const lastDay: Dayjs = dayjs(new Date(year, month, daysInMonth)).utc(true);\r\n        const lastMonth: number = dayjs(firstDay).utc(true).subtract(1, 'month').month();\r\n        const lastYear: number = dayjs(firstDay).utc(true).subtract(1, 'month').year();\r\n        const daysInLastMonth: number = dayjs(new Date(lastYear, lastMonth)).utc(true).daysInMonth();\r\n        const dayOfWeek: number = firstDay.day();\r\n        // initialize 6 rows x 7 columns array for the calendar\r\n        const calendar: CalendarArrayWithProps<Dayjs[]> = [];\r\n        calendar.firstDay = firstDay;\r\n        calendar.lastDay = lastDay;\r\n\r\n        for (let i = 0; i < 6; i++) {\r\n            calendar[i] = [];\r\n        }\r\n\r\n        // populate the calendar with date objects\r\n        let startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\r\n        if (startDay > daysInLastMonth) {\r\n            startDay -= 7;\r\n        }\r\n\r\n        if (dayOfWeek === this.locale.firstDay) {\r\n            startDay = daysInLastMonth - 6;\r\n        }\r\n\r\n        let curDate = dayjs(new Date(lastYear, lastMonth, startDay, 12, minute, second)).utc(true);\r\n\r\n        for (let i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = dayjs(curDate).utc(true).add(24, 'hours')) {\r\n            if (i > 0 && col % 7 === 0) {\r\n                col = 0;\r\n                row++;\r\n            }\r\n            calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\r\n            curDate = curDate.hour(12);\r\n\r\n            if (\r\n                this.minDate &&\r\n                calendar[row][col].format('YYYY-MM-DD') === this.minDate.format('YYYY-MM-DD') &&\r\n                calendar[row][col].isBefore(this.minDate) &&\r\n                side === 'left'\r\n            ) {\r\n                calendar[row][col] = this.minDate.clone();\r\n            }\r\n\r\n            if (\r\n                this.maxDate &&\r\n                calendar[row][col].format('YYYY-MM-DD') === this.maxDate.format('YYYY-MM-DD') &&\r\n                calendar[row][col].isAfter(this.maxDate) &&\r\n                side === 'right'\r\n            ) {\r\n                calendar[row][col] = this.maxDate.clone();\r\n            }\r\n        }\r\n\r\n        // make the calendar object available to hoverDate/clickDate\r\n        if (side === SideEnum.left) {\r\n            this.leftCalendar.calendar = calendar;\r\n        } else {\r\n            this.rightCalendar.calendar = calendar;\r\n        }\r\n        //\r\n        // Display the calendar\r\n        //\r\n        let minDate = side === 'left' ? this.minDate : this.startDate;\r\n        let maxDate = this.maxDate;\r\n        // adjust maxDate to reflect the dateLimit setting in order to\r\n        // grey out end dates beyond the dateLimit\r\n        if (this.endDate === null && this.dateLimit) {\r\n            const maxLimit = this.startDate.clone().add(this.dateLimit, 'day').endOf('day');\r\n            if (!maxDate || maxLimit.isBefore(maxDate)) {\r\n                maxDate = maxLimit;\r\n            }\r\n\r\n            if (this.customRangeDirection) {\r\n                minDate = this.minDate;\r\n                const minLimit = this.startDate.clone().subtract(this.dateLimit, 'day').endOf('day');\r\n                if (!minDate || minLimit.isAfter(minDate)) {\r\n                    minDate = minLimit;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.calendarVariables[side] = {\r\n            month,\r\n            year,\r\n            hour,\r\n            minute,\r\n            second,\r\n            daysInMonth,\r\n            firstDay,\r\n            lastDay,\r\n            lastMonth,\r\n            lastYear,\r\n            daysInLastMonth,\r\n            dayOfWeek,\r\n            // other vars\r\n            calRows: Array.from(Array(6).keys()),\r\n            calCols: Array.from(Array(7).keys()),\r\n            classes: {},\r\n            minDate,\r\n            maxDate,\r\n            calendar,\r\n        };\r\n        if (this.showDropdowns) {\r\n            const currentMonth: number = calendar[1][1].month();\r\n            const currentYear: number = calendar[1][1].year();\r\n            const realCurrentYear: number = dayjs().utc(true).year();\r\n            const maxYear: number = (maxDate && maxDate.year()) || realCurrentYear + 5;\r\n            const minYear: number = (minDate && minDate.year()) || realCurrentYear - 50;\r\n            const inMinYear: boolean = currentYear === minYear;\r\n            const inMaxYear: boolean = currentYear === maxYear;\r\n            const years: number[] = [];\r\n            for (let y = minYear; y <= maxYear; y++) {\r\n                years.push(y);\r\n            }\r\n            this.calendarVariables[side].dropdowns = {\r\n                currentMonth,\r\n                currentYear,\r\n                maxYear,\r\n                minYear,\r\n                inMinYear,\r\n                inMaxYear,\r\n                monthArrays: Array.from(Array(12).keys()),\r\n                yearArrays: years,\r\n            };\r\n        }\r\n\r\n        this.buildCells(calendar, side);\r\n    }\r\n\r\n    setStartDate(startDate: string | Dayjs): void {\r\n        if (typeof startDate === 'string') {\r\n            this.startDate = dayjs(startDate, this.locale.format).utc(true);\r\n        }\r\n\r\n        if (typeof startDate === 'object') {\r\n            this.pickingDate = true;\r\n            this.startDate = dayjs(startDate).utc(true);\r\n        }\r\n        if (!this.timePicker) {\r\n            this.pickingDate = true;\r\n            this.startDate = this.startDate.startOf('day');\r\n        }\r\n\r\n        if (this.timePicker && this.timePickerIncrement) {\r\n            this.startDate = this.startDate.minute(\r\n                Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement\r\n            );\r\n        }\r\n\r\n        if (this.minDate && this.startDate.isBefore(this.minDate)) {\r\n            this.startDate = this.minDate.clone();\r\n            if (this.timePicker && this.timePickerIncrement) {\r\n                this.startDate = this.startDate.minute(\r\n                    Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement\r\n                );\r\n            }\r\n        }\r\n\r\n        if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\r\n            this.startDate = this.maxDate.clone();\r\n            if (this.timePicker && this.timePickerIncrement) {\r\n                this.startDate = this.startDate.minute(\r\n                    Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement\r\n                );\r\n            }\r\n        }\r\n\r\n        if (!this.isShown) {\r\n            this.updateElement();\r\n        }\r\n        this.startDateChanged.emit({ startDate: this.startDate });\r\n        this.updateMonthsInView();\r\n    }\r\n\r\n    setEndDate(endDate: string | Dayjs): void {\r\n        if (typeof endDate === 'string') {\r\n            this.endDate = dayjs(endDate, this.locale.format).utc(true);\r\n        }\r\n\r\n        if (typeof endDate === 'object') {\r\n            this.pickingDate = false;\r\n            this.endDate = dayjs(endDate).utc(true);\r\n        }\r\n        if (!this.timePicker) {\r\n            this.pickingDate = false;\r\n            this.endDate = this.endDate.add(1, 'd').startOf('day').subtract(1, 'second');\r\n        }\r\n\r\n        if (this.timePicker && this.timePickerIncrement) {\r\n            this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\r\n        }\r\n\r\n        if (this.endDate.isBefore(this.startDate)) {\r\n            this.endDate = this.startDate.clone();\r\n        }\r\n\r\n        if (this.maxDate && this.endDate.isAfter(this.maxDate)) {\r\n            this.endDate = this.maxDate.clone();\r\n        }\r\n\r\n        if (this.dateLimit && this.startDate.clone().add(this.dateLimit, 'day').isBefore(this.endDate)) {\r\n            this.endDate = this.startDate.clone().add(this.dateLimit, 'day');\r\n        }\r\n\r\n        if (!this.isShown) {\r\n            // this.updateElement();\r\n        }\r\n        this.endDateChanged.emit({ endDate: this.endDate });\r\n        this.updateMonthsInView();\r\n    }\r\n\r\n    updateView(): void {\r\n        if (this.timePicker) {\r\n            this.renderTimePicker(SideEnum.left);\r\n            this.renderTimePicker(SideEnum.right);\r\n        }\r\n        this.updateMonthsInView();\r\n        this.updateCalendars();\r\n    }\r\n\r\n    updateMonthsInView(): void {\r\n        if (this.endDate) {\r\n            // if both dates are visible already, do nothing\r\n            if (\r\n                !this.singleDatePicker &&\r\n                this.leftCalendar.month &&\r\n                this.rightCalendar.month &&\r\n                ((this.startDate && this.leftCalendar && this.startDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM')) ||\r\n                    (this.startDate &&\r\n                        this.rightCalendar &&\r\n                        this.startDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM'))) &&\r\n                (this.endDate.format('YYYY-MM') === this.leftCalendar.month.format('YYYY-MM') ||\r\n                    this.endDate.format('YYYY-MM') === this.rightCalendar.month.format('YYYY-MM'))\r\n            ) {\r\n                return;\r\n            }\r\n            if (this.startDate) {\r\n                this.leftCalendar.month = this.startDate.clone().date(2);\r\n                if (\r\n                    !this.linkedCalendars &&\r\n                    (this.endDate.month() !== this.startDate.month() || this.endDate.year() !== this.startDate.year())\r\n                ) {\r\n                    this.rightCalendar.month = this.endDate.clone().date(2);\r\n                } else {\r\n                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n                }\r\n            }\r\n        } else {\r\n            if (\r\n                this.leftCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM') &&\r\n                this.rightCalendar.month.format('YYYY-MM') !== this.startDate.format('YYYY-MM')\r\n            ) {\r\n                this.leftCalendar.month = this.startDate.clone().date(2);\r\n                this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');\r\n            }\r\n        }\r\n        if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\r\n            this.rightCalendar.month = this.maxDate.clone().date(2);\r\n            this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  This is responsible for updating the calendars\r\n     */\r\n    updateCalendars(): void {\r\n        this.renderCalendar(SideEnum.left);\r\n        this.renderCalendar(SideEnum.right);\r\n\r\n        if (this.endDate === null) {\r\n            return;\r\n        }\r\n        this.calculateChosenLabel();\r\n    }\r\n\r\n    updateElement(): void {\r\n        const format = this.locale.displayFormat ? this.locale.displayFormat : this.locale.format;\r\n        if (!this.singleDatePicker && this.autoUpdateInput) {\r\n            if (this.startDate && this.endDate) {\r\n                // if we use ranges and should show range label on input\r\n                if (\r\n                    this.rangesArray.length &&\r\n                    this.showRangeLabelOnInput === true &&\r\n                    this.chosenRange &&\r\n                    this.locale.customRangeLabel !== this.chosenRange\r\n                ) {\r\n                    this.chosenLabel = this.chosenRange;\r\n                } else {\r\n                    this.chosenLabel = this.startDate.format(format) + this.locale.separator + this.endDate.format(format);\r\n                }\r\n            }\r\n        } else if (this.autoUpdateInput) {\r\n            this.chosenLabel = this.startDate.format(format);\r\n        }\r\n    }\r\n\r\n    remove(): void {\r\n        this.isShown = false;\r\n    }\r\n\r\n    /**\r\n     * this should calculate the label\r\n     */\r\n    calculateChosenLabel(): void {\r\n        if (!this.locale || !this.locale.separator) {\r\n            this.buildLocale();\r\n        }\r\n        let customRange = true;\r\n        let i = 0;\r\n        if (this.rangesArray.length > 0) {\r\n            for (const range in this.ranges) {\r\n                if (this.ranges[range]) {\r\n                    if (this.timePicker) {\r\n                        const format = this.timePickerSeconds ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD HH:mm';\r\n                        // ignore times when comparing dates if time picker seconds is not enabled\r\n                        if (\r\n                            this.startDate.format(format) === this.ranges[range][0].format(format) &&\r\n                            this.endDate.format(format) === this.ranges[range][1].format(format)\r\n                        ) {\r\n                            customRange = false;\r\n                            this.chosenRange = this.rangesArray[i];\r\n                            break;\r\n                        }\r\n                    } else {\r\n                        // ignore times when comparing dates if time picker is not enabled\r\n                        if (\r\n                            this.startDate.format('YYYY-MM-DD') === this.ranges[range][0].format('YYYY-MM-DD') &&\r\n                            this.endDate.format('YYYY-MM-DD') === this.ranges[range][1].format('YYYY-MM-DD')\r\n                        ) {\r\n                            customRange = false;\r\n                            this.chosenRange = this.rangesArray[i];\r\n                            break;\r\n                        }\r\n                    }\r\n                    i++;\r\n                }\r\n            }\r\n            if (customRange) {\r\n                if (this.showCustomRangeLabel) {\r\n                    this.chosenRange = this.locale.customRangeLabel;\r\n                } else {\r\n                    this.chosenRange = null;\r\n                }\r\n                // if custom label: show calendar\r\n                this.showCalInRanges = true;\r\n            }\r\n        }\r\n\r\n        this.updateElement();\r\n    }\r\n\r\n    clickApply(e?: MouseEvent): void {\r\n        if (!this.singleDatePicker && this.startDate && !this.endDate) {\r\n            this.endDate = this.getDateWithTime(this.startDate, SideEnum.right);\r\n\r\n            this.calculateChosenLabel();\r\n        }\r\n        if (this.isInvalidDate && this.startDate && this.endDate) {\r\n            // get if there are invalid date between range\r\n\r\n            let d = this.startDate.clone();\r\n            while (d.isBefore(this.endDate)) {\r\n                if (this.isInvalidDate(d)) {\r\n                    this.endDate = d.subtract(1, 'days');\r\n                    this.calculateChosenLabel();\r\n                    break;\r\n                }\r\n                d = d.add(1, 'days');\r\n            }\r\n        }\r\n        if (this.chosenLabel) {\r\n            this.choosedDate.emit({ chosenLabel: this.chosenLabel, startDate: this.startDate, endDate: this.endDate });\r\n        }\r\n\r\n        this.datesUpdated.emit({ startDate: this.startDate, endDate: this.endDate });\r\n        if (e || (this.closeOnAutoApply && !e)) {\r\n            this.hide();\r\n        }\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    clickCancel(e: MouseEvent): void {\r\n        this.startDate = this.cachedVersion.start;\r\n        this.endDate = this.cachedVersion.end;\r\n        if (this.inline) {\r\n            this.updateView();\r\n        }\r\n        this.cancelClicked.emit();\r\n        this.hide();\r\n    }\r\n\r\n    /**\r\n     * called when month is changed\r\n     *\r\n     * @param monthEvent get value in event.target.value\r\n     * @param side left or right\r\n     */\r\n    monthChanged(monthEvent: Event, side: SideEnum): void {\r\n        const year = this.calendarVariables[side].dropdowns.currentYear;\r\n        const month = parseInt((monthEvent.target as HTMLSelectElement).value, 10);\r\n        this.monthOrYearChanged(month, year, side);\r\n    }\r\n\r\n    /**\r\n     * called when year is changed\r\n     *\r\n     * @param yearEvent get value in event.target.value\r\n     * @param side left or right\r\n     */\r\n    yearChanged(yearEvent: Event, side: SideEnum): void {\r\n        const month = this.calendarVariables[side].dropdowns.currentMonth;\r\n        const year = parseInt((yearEvent.target as HTMLSelectElement).value, 10);\r\n        this.monthOrYearChanged(month, year, side);\r\n    }\r\n\r\n    /**\r\n     * called when time is changed\r\n     *\r\n     * @param timeEvent  an event\r\n     * @param side left or right\r\n     */\r\n    timeChanged(timeEvent: Event, side: SideEnum): void {\r\n        let hour = parseInt(String(this.timepickerVariables[side].selectedHour), 10);\r\n        const minute = parseInt(String(this.timepickerVariables[side].selectedMinute), 10);\r\n        const second = this.timePickerSeconds ? parseInt(String(this.timepickerVariables[side].selectedSecond), 10) : 0;\r\n\r\n        if (!this.timePicker24Hour) {\r\n            const ampm = this.timepickerVariables[side].ampmModel;\r\n            if (ampm === 'PM' && hour < 12) {\r\n                hour += 12;\r\n            }\r\n            if (ampm === 'AM' && hour === 12) {\r\n                hour = 0;\r\n            }\r\n        }\r\n\r\n        if (side === SideEnum.left) {\r\n            let start = this.startDate.clone();\r\n            start = start.hour(hour);\r\n            start = start.minute(minute);\r\n            start = start.second(second);\r\n            this.setStartDate(start);\r\n            if (this.singleDatePicker) {\r\n                this.endDate = this.startDate.clone();\r\n            } else if (this.endDate && this.endDate.format('YYYY-MM-DD') === start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {\r\n                this.setEndDate(start.clone());\r\n            } else if (!this.endDate && this.timePicker) {\r\n                const startClone = this.getDateWithTime(start, SideEnum.right);\r\n\r\n                if (startClone.isBefore(start)) {\r\n                    this.timepickerVariables[SideEnum.right].selectedHour = hour;\r\n                    this.timepickerVariables[SideEnum.right].selectedMinute = minute;\r\n                    this.timepickerVariables[SideEnum.right].selectedSecond = second;\r\n                }\r\n            }\r\n        } else if (this.endDate) {\r\n            let end = this.endDate.clone();\r\n            end = end.hour(hour);\r\n            end = end.minute(minute);\r\n            end = end.second(second);\r\n            this.setEndDate(end);\r\n        }\r\n\r\n        // update the calendars so all clickable dates reflect the new time component\r\n        this.updateCalendars();\r\n\r\n        // re-render the time pickers because changing one selection can affect what's enabled in another\r\n        this.renderTimePicker(SideEnum.left);\r\n        this.renderTimePicker(SideEnum.right);\r\n\r\n        if (this.autoApply) {\r\n            this.clickApply();\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  call when month or year changed\r\n     *\r\n     * @param month month number 0 -11\r\n     * @param year year eg: 1995\r\n     * @param side left or right\r\n     */\r\n    monthOrYearChanged(month: number, year: number, side: SideEnum): void {\r\n        const isLeft = side === SideEnum.left;\r\n        let newMonth = month;\r\n        let newYear = year;\r\n\r\n        if (!isLeft) {\r\n            if (newYear < this.startDate.year() || (newYear === this.startDate.year() && newMonth < this.startDate.month())) {\r\n                newMonth = this.startDate.month();\r\n                newYear = this.startDate.year();\r\n            }\r\n        }\r\n\r\n        if (this.minDate) {\r\n            if (newYear < this.minDate.year() || (newYear === this.minDate.year() && newMonth < this.minDate.month())) {\r\n                newMonth = this.minDate.month();\r\n                newYear = this.minDate.year();\r\n            }\r\n        }\r\n\r\n        if (this.maxDate) {\r\n            if (newYear > this.maxDate.year() || (newYear === this.maxDate.year() && newMonth > this.maxDate.month())) {\r\n                newMonth = this.maxDate.month();\r\n                newYear = this.maxDate.year();\r\n            }\r\n        }\r\n        this.calendarVariables[side].dropdowns.currentYear = newYear;\r\n        this.calendarVariables[side].dropdowns.currentMonth = newMonth;\r\n        if (isLeft) {\r\n            this.leftCalendar.month = this.leftCalendar.month.month(newMonth).year(newYear);\r\n            if (this.linkedCalendars) {\r\n                this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');\r\n            }\r\n        } else {\r\n            this.rightCalendar.month = this.rightCalendar.month.month(newMonth).year(newYear);\r\n            if (this.linkedCalendars) {\r\n                this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');\r\n            }\r\n        }\r\n        this.updateCalendars();\r\n    }\r\n\r\n    /**\r\n     * Click on previous month\r\n     *\r\n     * @param side left or right calendar\r\n     */\r\n    clickPrev(side: SideEnum): void {\r\n        if (side === SideEnum.left) {\r\n            this.leftCalendar.month = this.leftCalendar.month.subtract(1, 'month');\r\n            if (this.linkedCalendars) {\r\n                this.rightCalendar.month = this.rightCalendar.month.subtract(1, 'month');\r\n            }\r\n        } else {\r\n            this.rightCalendar.month = this.rightCalendar.month.subtract(1, 'month');\r\n        }\r\n        this.updateCalendars();\r\n    }\r\n\r\n    /**\r\n     * Click on next month\r\n     *\r\n     * @param side left or right calendar\r\n     */\r\n    clickNext = (side: SideEnum) => {\r\n        if (side === SideEnum.left) {\r\n            this.leftCalendar.month = this.leftCalendar.month.add(1, 'month');\r\n        } else {\r\n            this.rightCalendar.month = this.rightCalendar.month.add(1, 'month');\r\n            if (this.linkedCalendars) {\r\n                this.leftCalendar.month = this.leftCalendar.month.add(1, 'month');\r\n            }\r\n        }\r\n        this.updateCalendars();\r\n    };\r\n\r\n    /**\r\n     * When hovering a date\r\n     *\r\n     * @param e event: get value by e.target.value\r\n     * @param side left or right\r\n     * @param row row position of the current date clicked\r\n     * @param col col position of the current date clicked\r\n     */\r\n    hoverDate(e: Event, side: SideEnum, row: number, col: number): void {\r\n        const leftCalDate = this.calendarVariables.left.calendar[row][col];\r\n        const rightCalDate = this.calendarVariables.right.calendar[row][col];\r\n        if (this.pickingDate) {\r\n            this.nowHoveredDate = side === SideEnum.left ? leftCalDate : rightCalDate;\r\n            this.renderCalendar(SideEnum.left);\r\n            this.renderCalendar(SideEnum.right);\r\n        }\r\n        // const tooltip = side === SideEnum.left ? this.tooltiptext[leftCalDate] : this.tooltiptext[rightCalDate];\r\n        // if (tooltip.length > 0) {\r\n        //   (e.target as HTMLTableCellElement).setAttribute('title', tooltip);\r\n        // }\r\n    }\r\n\r\n    /**\r\n     * When selecting a date\r\n     *\r\n     * @param e event: get value by e.target.value\r\n     * @param side left or right\r\n     * @param row row position of the current date clicked\r\n     * @param col col position of the current date clicked\r\n     */\r\n    clickDate(e: Event, side: SideEnum, row: number, col: number): void {\r\n        if ((e.target as HTMLTableCellElement).tagName === 'TD') {\r\n            if (!(e.target as HTMLTableCellElement).classList.contains('available')) {\r\n                return;\r\n            }\r\n        } else if ((e.target as HTMLSpanElement).tagName === 'SPAN') {\r\n            if (!(e.target as HTMLSpanElement).parentElement.classList.contains('available')) {\r\n                return;\r\n            }\r\n        }\r\n        if (this.rangesArray.length) {\r\n            this.chosenRange = this.locale.customRangeLabel;\r\n        }\r\n\r\n        let date = side === SideEnum.left ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\r\n\r\n        if (\r\n            (this.endDate || (date.isBefore(this.startDate, 'day') && this.customRangeDirection === false)) &&\r\n            this.lockStartDate === false\r\n        ) {\r\n            // picking start\r\n            if (this.timePicker) {\r\n                date = this.getDateWithTime(date, SideEnum.left);\r\n            }\r\n            this.endDate = null;\r\n            this.setStartDate(date.clone());\r\n        } else if (!this.endDate && date.isBefore(this.startDate) && this.customRangeDirection === false) {\r\n            // special case: clicking the same date for start/end,\r\n            // but the time of the end date is before the start date\r\n            this.setEndDate(this.startDate.clone());\r\n        } else {\r\n            // picking end\r\n            if (this.timePicker) {\r\n                date = this.getDateWithTime(date, SideEnum.right);\r\n            }\r\n            if (date.isBefore(this.startDate, 'day') === true && this.customRangeDirection === true) {\r\n                this.setEndDate(this.startDate);\r\n                this.setStartDate(date.clone());\r\n            } else {\r\n                this.setEndDate(date.clone());\r\n            }\r\n\r\n            if (this.autoApply) {\r\n                this.calculateChosenLabel();\r\n            }\r\n        }\r\n\r\n        if (this.singleDatePicker) {\r\n            this.setEndDate(this.startDate);\r\n            this.updateElement();\r\n            if (this.autoApply) {\r\n                this.clickApply();\r\n            }\r\n        }\r\n\r\n        this.updateView();\r\n\r\n        if (this.autoApply && this.startDate && this.endDate) {\r\n            this.clickApply();\r\n        }\r\n\r\n        // This is to cancel the blur event handler if the mouse was in one of the inputs\r\n        e.stopPropagation();\r\n    }\r\n\r\n    /**\r\n     *  Click on the custom range\r\n     *\r\n     * @param e: Event\r\n     * @param label\r\n     */\r\n    clickRange(e: MouseEvent, label: string): void {\r\n        this.chosenRange = label;\r\n        if (label === this.locale.customRangeLabel) {\r\n            this.isShown = true; // show calendars\r\n            this.showCalInRanges = true;\r\n        } else {\r\n            const dates = this.ranges[label];\r\n            console.log('1 ', dates);\r\n            this.startDate = dates[0].clone();\r\n            this.endDate = dates[1].clone();\r\n            if (this.showRangeLabelOnInput && label !== this.locale.customRangeLabel) {\r\n                this.chosenLabel = label;\r\n            } else {\r\n                this.calculateChosenLabel();\r\n            }\r\n            this.showCalInRanges = !this.rangesArray.length || this.alwaysShowCalendars;\r\n\r\n            if (!this.timePicker) {\r\n                this.startDate = this.startDate.startOf('day');\r\n                this.endDate = this.endDate.endOf('day');\r\n            }\r\n\r\n            if (!this.alwaysShowCalendars) {\r\n                this.isShown = false; // hide calendars\r\n            }\r\n            this.rangeClicked.emit({ label, dates });\r\n            if (!this.keepCalendarOpeningWithRange || this.autoApply) {\r\n                this.clickApply();\r\n            } else {\r\n                if (!this.alwaysShowCalendars) {\r\n                    return this.clickApply();\r\n                }\r\n                if (this.maxDate && this.maxDate.isSame(dates[0], 'month')) {\r\n                    this.rightCalendar.month = this.rightCalendar.month.month(dates[0].month());\r\n                    this.rightCalendar.month = this.rightCalendar.month.year(dates[0].year());\r\n                    this.leftCalendar.month = this.leftCalendar.month.month(dates[0].month() - 1);\r\n                    this.leftCalendar.month = this.leftCalendar.month.year(dates[1].year());\r\n                } else {\r\n                    this.leftCalendar.month = this.leftCalendar.month.month(dates[0].month());\r\n                    this.leftCalendar.month = this.leftCalendar.month.year(dates[0].year());\r\n                    // get the right calendar value\r\n                    const nextMonth = !this.linkedCalendars ? dates[1].clone() : dates[0].clone().add(1, 'month');\r\n                    this.rightCalendar.month = this.rightCalendar.month.month(nextMonth.month());\r\n                    this.rightCalendar.month = this.rightCalendar.month.year(nextMonth.year());\r\n                }\r\n                this.updateCalendars();\r\n                if (this.timePicker) {\r\n                    this.renderTimePicker(SideEnum.left);\r\n                    this.renderTimePicker(SideEnum.right);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    show(e?: Event): void {\r\n        if (this.isShown) {\r\n            return;\r\n        }\r\n        this.cachedVersion.start = this.startDate.clone();\r\n        this.cachedVersion.end = this.endDate.clone();\r\n        this.isShown = true;\r\n        this.updateView();\r\n    }\r\n\r\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n    hide(e?: Event): void {\r\n        if (!this.isShown) {\r\n            return;\r\n        }\r\n        // incomplete date selection, revert to last values\r\n        if (!this.endDate) {\r\n            if (this.cachedVersion.start) {\r\n                this.startDate = this.cachedVersion.start.clone();\r\n            }\r\n            if (this.cachedVersion.end) {\r\n                this.endDate = this.cachedVersion.end.clone();\r\n            }\r\n        }\r\n\r\n        // if a new date range was selected, invoke the user callback function\r\n        if (!this.startDate.isSame(this.cachedVersion.start) || !this.endDate.isSame(this.cachedVersion.end)) {\r\n            // this.callback(this.startDate, this.endDate, this.chosenLabel);\r\n        }\r\n\r\n        // if picker is attached to a text input, update it\r\n        this.updateElement();\r\n        this.isShown = false;\r\n        this.ref.detectChanges();\r\n    }\r\n\r\n    /**\r\n     * update the locale options\r\n     *\r\n     * @param locale\r\n     */\r\n    updateLocale(locale: LocaleConfig): void {\r\n        for (const key in locale) {\r\n            if (Object.prototype.hasOwnProperty.call(locale, key)) {\r\n                this.locale[key] = locale[key];\r\n                if (key === 'customRangeLabel') {\r\n                    this.renderRanges();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  clear the daterange picker\r\n     */\r\n    clear(): void {\r\n        this.startDate = dayjs().utc(true).startOf('day');\r\n        this.endDate = dayjs().utc(true).endOf('day');\r\n        this.choosedDate.emit({ chosenLabel: '', startDate: null, endDate: null });\r\n        this.datesUpdated.emit({ startDate: null, endDate: null });\r\n        this.clearClicked.emit();\r\n        this.hide();\r\n    }\r\n\r\n    /**\r\n     * Find out if the selected range should be disabled if it doesn't\r\n     * fit into minDate and maxDate limitations.\r\n     */\r\n    disableRange(range: string): boolean {\r\n        if (range === this.locale.customRangeLabel) {\r\n            return false;\r\n        }\r\n        const rangeMarkers = this.ranges[range];\r\n        const areBothBefore = rangeMarkers.every((date) => {\r\n            if (!this.minDate) {\r\n                return false;\r\n            }\r\n            return date.isBefore(this.minDate);\r\n        });\r\n\r\n        const areBothAfter = rangeMarkers.every((date) => {\r\n            if (!this.maxDate) {\r\n                return false;\r\n            }\r\n            return date.isAfter(this.maxDate);\r\n        });\r\n        return areBothBefore || areBothAfter;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param date the date to add time\r\n     * @param side left or right\r\n     */\r\n    private getDateWithTime(date, side: SideEnum): dayjs.Dayjs {\r\n        let hour = parseInt(String(this.timepickerVariables[side].selectedHour), 10);\r\n        if (!this.timePicker24Hour) {\r\n            const ampm = this.timepickerVariables[side].ampmModel;\r\n            if (ampm === 'PM' && hour < 12) {\r\n                hour += 12;\r\n            }\r\n            if (ampm === 'AM' && hour === 12) {\r\n                hour = 0;\r\n            }\r\n        }\r\n        const minute = parseInt(String(this.timepickerVariables[side].selectedMinute), 10);\r\n        const second = this.timePickerSeconds ? parseInt(String(this.timepickerVariables[side].selectedSecond), 10) : 0;\r\n        return date.clone().hour(hour).minute(minute).second(second);\r\n    }\r\n\r\n    /**\r\n     *  build the locale config\r\n     */\r\n    private buildLocale() {\r\n        this.locale = { ...this.localeHolderService.config, ...this.locale };\r\n        if (!this.locale.format) {\r\n            if (this.timePicker) {\r\n                this.locale.format = dayjs.localeData().longDateFormat('lll');\r\n            } else {\r\n                this.locale.format = dayjs.localeData().longDateFormat('L');\r\n            }\r\n        }\r\n    }\r\n\r\n    private buildCells(calendar, side: SideEnum) {\r\n        for (let row = 0; row < 6; row++) {\r\n            this.calendarVariables[side].classes[row] = { classList: '' };\r\n            const rowClasses = [];\r\n            if (\r\n                this.emptyWeekRowClass &&\r\n                Array.from(Array(7).keys()).some((i) => calendar[row][i].month() !== this.calendarVariables[side].month)\r\n            ) {\r\n                rowClasses.push(this.emptyWeekRowClass);\r\n            }\r\n            for (let col = 0; col < 7; col++) {\r\n                const classes = [];\r\n                // empty week row class\r\n                if (this.emptyWeekColumnClass) {\r\n                    if (calendar[row][col].month() !== this.calendarVariables[side].month) {\r\n                        classes.push(this.emptyWeekColumnClass);\r\n                    }\r\n                }\r\n                // highlight today's date\r\n                if (calendar[row][col].isSame(dayjs().utc(true), 'day')) {\r\n                    classes.push('today');\r\n                }\r\n                // highlight weekends\r\n                if (calendar[row][col].isoWeekday() > 5) {\r\n                    classes.push('weekend');\r\n                }\r\n                // grey out the dates in other months displayed at beginning and end of this calendar\r\n                if (calendar[row][col].month() !== calendar[1][1].month()) {\r\n                    classes.push('off');\r\n\r\n                    // mark the last day of the previous month in this calendar\r\n                    if (\r\n                        this.lastDayOfPreviousMonthClass &&\r\n                        (calendar[row][col].month() < calendar[1][1].month() || calendar[1][1].month() === 0) &&\r\n                        calendar[row][col].date() === this.calendarVariables[side].daysInLastMonth\r\n                    ) {\r\n                        classes.push(this.lastDayOfPreviousMonthClass);\r\n                    }\r\n\r\n                    // mark the first day of the next month in this calendar\r\n                    if (\r\n                        this.firstDayOfNextMonthClass &&\r\n                        (calendar[row][col].month() > calendar[1][1].month() || calendar[row][col].month() === 0) &&\r\n                        calendar[row][col].date() === 1\r\n                    ) {\r\n                        classes.push(this.firstDayOfNextMonthClass);\r\n                    }\r\n                }\r\n                // mark the first day of the current month with a custom class\r\n                if (\r\n                    this.firstMonthDayClass &&\r\n                    calendar[row][col].month() === calendar[1][1].month() &&\r\n                    calendar[row][col].date() === calendar.firstDay.date()\r\n                ) {\r\n                    classes.push(this.firstMonthDayClass);\r\n                }\r\n                // mark the last day of the current month with a custom class\r\n                if (\r\n                    this.lastMonthDayClass &&\r\n                    calendar[row][col].month() === calendar[1][1].month() &&\r\n                    calendar[row][col].date() === calendar.lastDay.date()\r\n                ) {\r\n                    classes.push(this.lastMonthDayClass);\r\n                }\r\n                // don't allow selection of dates before the minimum date\r\n                if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) {\r\n                    classes.push('off', 'disabled');\r\n                }\r\n                // don't allow selection of dates after the maximum date\r\n                if (this.calendarVariables[side].maxDate && calendar[row][col].isAfter(this.calendarVariables[side].maxDate, 'day')) {\r\n                    classes.push('off', 'disabled');\r\n                }\r\n                // don't allow selection of date if a custom function decides it's invalid\r\n                if (this.isInvalidDate(calendar[row][col])) {\r\n                    classes.push('off', 'disabled', 'invalid');\r\n                }\r\n                // highlight the currently selected start date\r\n                if (this.startDate && calendar[row][col].format('YYYY-MM-DD') === this.startDate.format('YYYY-MM-DD')) {\r\n                    classes.push('active', 'start-date');\r\n                }\r\n                // highlight the currently selected end date\r\n                if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') === this.endDate.format('YYYY-MM-DD')) {\r\n                    classes.push('active', 'end-date');\r\n                }\r\n                // highlight dates in-between the selected dates\r\n                if (\r\n                    ((this.nowHoveredDate != null && this.pickingDate) || this.endDate != null) &&\r\n                    calendar[row][col] > this.startDate &&\r\n                    (calendar[row][col] < this.endDate || (calendar[row][col] < this.nowHoveredDate && this.pickingDate)) &&\r\n                    !classes.find((el) => el === 'off')\r\n                ) {\r\n                    classes.push('in-range');\r\n                }\r\n                // apply custom classes for this date\r\n                const isCustom = this.isCustomDate(calendar[row][col]);\r\n                if (isCustom !== false) {\r\n                    if (typeof isCustom === 'string') {\r\n                        classes.push(isCustom);\r\n                    } else {\r\n                        Array.prototype.push.apply(classes, isCustom);\r\n                    }\r\n                }\r\n                // apply custom tooltip for this date\r\n                // const isTooltip = this.isTooltipDate(calendar[row][col]);\r\n                // if (isTooltip) {\r\n                //   if (typeof isTooltip === 'string') {\r\n                //     this.tooltiptext[calendar[row][col]] = isTooltip; // setting tooltiptext for custom date\r\n                //   } else {\r\n                //     this.tooltiptext[calendar[row][col]] = 'Put the tooltip as the returned value of isTooltipDate';\r\n                //   }\r\n                // } else {\r\n                //   this.tooltiptext[calendar[row][col]] = '';\r\n                // }\r\n                // store classes var\r\n                let cname = '';\r\n                let disabled = false;\r\n                for (const className of classes) {\r\n                    cname += className + ' ';\r\n                    if (className === 'disabled') {\r\n                        disabled = true;\r\n                    }\r\n                }\r\n                if (!disabled) {\r\n                    cname += 'available';\r\n                }\r\n                this.calendarVariables[side].classes[row][col] = cname.replace(/^\\s+|\\s+$/g, '');\r\n            }\r\n            this.calendarVariables[side].classes[row].classList = rowClasses.join(' ');\r\n        }\r\n    }\r\n}\r\n","<div\r\n    class=\"md-drppicker\"\r\n    #pickerContainer\r\n    [ngClass]=\"{\r\n        ltr: locale.direction === 'ltr',\r\n        rtl: this.locale.direction === 'rtl',\r\n        shown: isShown || inline,\r\n        hidden: !isShown && !inline,\r\n        inline: inline,\r\n        double: !singleDatePicker && showCalInRanges,\r\n        'show-ranges': rangesArray.length\r\n    }\"\r\n    [class]=\"'drops-' + drops + '-' + opens\"\r\n>\r\n    <ng-container *ngIf=\"rangesArray.length\">\r\n        <div class=\"ranges\">\r\n            <ul>\r\n                <li *ngFor=\"let range of rangesArray\">\r\n                    <button\r\n                        type=\"button\"\r\n                        (click)=\"clickRange($event, range)\"\r\n                        [disabled]=\"disableRange(range)\"\r\n                        [ngClass]=\"{ active: range === chosenRange }\"\r\n                    >\r\n                        {{ range }}\r\n                    </button>\r\n                </li>\r\n            </ul>\r\n        </div>\r\n    </ng-container>\r\n    <div class=\"calendar\" [ngClass]=\"{ right: singleDatePicker, left: !singleDatePicker }\" *ngIf=\"showCalInRanges\">\r\n        <div class=\"calendar-table\">\r\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\r\n                <thead>\r\n                    <tr>\r\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\r\n                        <ng-container>\r\n                            <th (click)=\"clickPrev(sideEnum.left)\" class=\"prev available\"></th>\r\n                        </ng-container>\r\n                        <ng-container\r\n                            *ngIf=\"\r\n                                !(\r\n                                    !calendarVariables.left.minDate ||\r\n                                    (calendarVariables.left.minDate.isBefore(calendarVariables.left.calendar.firstDay) &&\r\n                                        (!this.linkedCalendars || true))\r\n                                )\r\n                            \"\r\n                        >\r\n                            <th></th>\r\n                        </ng-container>\r\n                        <th colspan=\"5\" class=\"month drp-animate\">\r\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.left.dropdowns\">\r\n                                <div class=\"dropdowns\">\r\n                                    {{ this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()] }}\r\n                                    <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.left)\">\r\n                                        <option\r\n                                            [disabled]=\"\r\n                                                (calendarVariables.left.dropdowns.inMinYear &&\r\n                                                    m < calendarVariables.left.minDate.month()) ||\r\n                                                (calendarVariables.left.dropdowns.inMaxYear && m > calendarVariables.left.maxDate.month())\r\n                                            \"\r\n                                            *ngFor=\"let m of calendarVariables.left.dropdowns.monthArrays\"\r\n                                            [value]=\"m\"\r\n                                            [selected]=\"calendarVariables.left.dropdowns.currentMonth === m\"\r\n                                        >\r\n                                            {{ locale.monthNames[m] }}\r\n                                        </option>\r\n                                    </select>\r\n                                </div>\r\n                                <div class=\"dropdowns\">\r\n                                    {{ calendarVariables?.left?.calendar[1][1].format(' YYYY') }}\r\n                                    <select class=\"yearselect\" (change)=\"yearChanged($event, sideEnum.left)\">\r\n                                        <option\r\n                                            *ngFor=\"let y of calendarVariables.left.dropdowns.yearArrays\"\r\n                                            [selected]=\"y === calendarVariables.left.dropdowns.currentYear\"\r\n                                        >\r\n                                            {{ y }}\r\n                                        </option>\r\n                                    </select>\r\n                                </div>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.left.dropdowns\">\r\n                                {{ this.locale.monthNames[calendarVariables?.left?.calendar[1][1].month()] }}\r\n                                {{ calendarVariables?.left?.calendar[1][1].format(' YYYY') }}\r\n                            </ng-container>\r\n                        </th>\r\n                        <!-- <ng-container\r\n                            *ngIf=\"\r\n                                (!calendarVariables.left.maxDate ||\r\n                                    calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) &&\r\n                                (!linkedCalendars || singleDatePicker)\r\n                            \"\r\n                        >\r\n                            <th class=\"next available\" (click)=\"clickNext(sideEnum.left)\"></th>\r\n                        </ng-container> -->\r\n                        <ng-container\r\n                            *ngIf=\"\r\n                                !(\r\n                                    (!calendarVariables.left.maxDate ||\r\n                                        calendarVariables.left.maxDate.isAfter(calendarVariables.left.calendar.lastDay)) &&\r\n                                    (!linkedCalendars || singleDatePicker)\r\n                                )\r\n                            \"\r\n                        >\r\n                            <th></th>\r\n                        </ng-container>\r\n                    </tr>\r\n                    <tr class=\"week-days\">\r\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\">\r\n                            <span>{{ this.locale.weekLabel }}</span>\r\n                        </th>\r\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\">\r\n                            <span>{{ dayofweek }}</span>\r\n                        </th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody class=\"drp-animate\">\r\n                    <tr *ngFor=\"let row of calendarVariables.left.calRows\" [class]=\"calendarVariables.left.classes[row].classList\">\r\n                        <!-- add week number -->\r\n                        <td class=\"week\" *ngIf=\"showWeekNumbers\">\r\n                            <span>{{ calendarVariables.left.calendar[row][0].week() }}</span>\r\n                        </td>\r\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\r\n                            <span>{{ calendarVariables.left.calendar[row][0].isoWeek() }}</span>\r\n                        </td>\r\n                        <!-- cal -->\r\n                        <td\r\n                            *ngFor=\"let col of calendarVariables.left.calCols\"\r\n                            [class]=\"calendarVariables.left.classes[row][col]\"\r\n                            (click)=\"clickDate($event, sideEnum.left, row, col)\"\r\n                            (mouseenter)=\"hoverDate($event, sideEnum.left, row, col)\"\r\n                        >\r\n                            <span>{{ calendarVariables.left.calendar[row][col].date() }}</span>\r\n                        </td>\r\n                    </tr>\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"hourselect select-item\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.left.selectedHour\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.left.hours\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.left.disabledHours.indexOf(i) > -1\"\r\n                    >\r\n                        {{ i }}\r\n                    </option>\r\n                </select>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"select-item minuteselect\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.left.selectedMinute\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.left.minutes; let index = index\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.left.disabledMinutes.indexOf(i) > -1\"\r\n                    >\r\n                        {{ timepickerVariables.left.minutesLabel[index] }}\r\n                    </option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"select-item secondselect\"\r\n                    *ngIf=\"timePickerSeconds\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.left.selectedSecond\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.left.seconds; let index = index\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.left.disabledSeconds.indexOf(i) > -1\"\r\n                    >\r\n                        {{ timepickerVariables.left.secondsLabel[index] }}\r\n                    </option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"select-item ampmselect\"\r\n                    *ngIf=\"!timePicker24Hour\"\r\n                    [(ngModel)]=\"timepickerVariables.left.ampmModel\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.left)\"\r\n                >\r\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.left.amDisabled\">AM</option>\r\n                    <option value=\"PM\" [disabled]=\"timepickerVariables.left.pmDisabled\">PM</option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"calendar right\" *ngIf=\"showCalInRanges && !singleDatePicker\">\r\n        <div class=\"calendar-table\">\r\n            <table class=\"table-condensed\" *ngIf=\"calendarVariables\">\r\n                <thead>\r\n                    <tr>\r\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\"></th>\r\n                        <!-- <ng-container\r\n                            *ngIf=\"\r\n                                (!calendarVariables.right.minDate ||\r\n                                    calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) &&\r\n                                !this.linkedCalendars\r\n                            \"\r\n                        >\r\n                            <th (click)=\"clickPrev(sideEnum.right)\" class=\"prev available\"></th>\r\n                        </ng-container> -->\r\n                        <ng-container\r\n                            *ngIf=\"\r\n                                !(\r\n                                    (!calendarVariables.right.minDate ||\r\n                                        calendarVariables.right.minDate.isBefore(calendarVariables.right.calendar.firstDay)) &&\r\n                                    !this.linkedCalendars\r\n                                )\r\n                            \"\r\n                        >\r\n                            <th></th>\r\n                        </ng-container>\r\n                        <th colspan=\"5\" class=\"month\">\r\n                            <ng-container *ngIf=\"showDropdowns && calendarVariables.right.dropdowns\">\r\n                                <div class=\"dropdowns\">\r\n                                    {{ this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()] }}\r\n                                    <select class=\"monthselect\" (change)=\"monthChanged($event, sideEnum.right)\">\r\n                                        <option\r\n                                            [disabled]=\"\r\n                                                (calendarVariables.right.dropdowns.inMinYear &&\r\n                                                    calendarVariables.right.minDate &&\r\n                                                    m < calendarVariables.right.minDate.month()) ||\r\n                                                (calendarVariables.right.dropdowns.inMaxYear &&\r\n                                                    calendarVariables.right.maxDate &&\r\n                                                    m > calendarVariables.right.maxDate.month())\r\n                                            \"\r\n                                            *ngFor=\"let m of calendarVariables.right.dropdowns.monthArrays\"\r\n                                            [value]=\"m\"\r\n                                            [selected]=\"calendarVariables.right.dropdowns.currentMonth === m\"\r\n                                        >\r\n                                            {{ locale.monthNames[m] }}\r\n                                        </option>\r\n                                    </select>\r\n                                </div>\r\n                                <div class=\"dropdowns\">\r\n                                    {{ calendarVariables?.right?.calendar[1][1].format(' YYYY') }}\r\n                                    <select class=\"yearselect\" (change)=\"yearChanged($event, sideEnum.right)\">\r\n                                        <option\r\n                                            *ngFor=\"let y of calendarVariables.right.dropdowns.yearArrays\"\r\n                                            [selected]=\"y === calendarVariables.right.dropdowns.currentYear\"\r\n                                        >\r\n                                            {{ y }}\r\n                                        </option>\r\n                                    </select>\r\n                                </div>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"!showDropdowns || !calendarVariables.right.dropdowns\">\r\n                                {{ this.locale.monthNames[calendarVariables?.right?.calendar[1][1].month()] }}\r\n                                {{ calendarVariables?.right?.calendar[1][1].format(' YYYY') }}\r\n                            </ng-container>\r\n                        </th>\r\n                        <ng-container>\r\n                            <th class=\"next available\" (click)=\"clickNext(sideEnum.right)\"></th>\r\n                        </ng-container>\r\n                        <ng-container\r\n                            *ngIf=\"\r\n                                !(\r\n                                    !calendarVariables.right.maxDate ||\r\n                                    (calendarVariables.right.maxDate.isAfter(calendarVariables.right.calendar.lastDay) &&\r\n                                        (!linkedCalendars || singleDatePicker || true))\r\n                                )\r\n                            \"\r\n                        >\r\n                            <th></th>\r\n                        </ng-container>\r\n                    </tr>\r\n\r\n                    <tr class=\"week-days\">\r\n                        <th *ngIf=\"showWeekNumbers || showISOWeekNumbers\" class=\"week\">\r\n                            <span>{{ this.locale.weekLabel }}</span>\r\n                        </th>\r\n                        <th *ngFor=\"let dayofweek of locale.daysOfWeek\">\r\n                            <span>{{ dayofweek }}</span>\r\n                        </th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    <tr *ngFor=\"let row of calendarVariables.right.calRows\" [class]=\"calendarVariables.right.classes[row].classList\">\r\n                        <td class=\"week\" *ngIf=\"showWeekNumbers\">\r\n                            <span>{{ calendarVariables.right.calendar[row][0].week() }}</span>\r\n                        </td>\r\n                        <td class=\"week\" *ngIf=\"showISOWeekNumbers\">\r\n                            <span>{{ calendarVariables.right.calendar[row][0].isoWeek() }}</span>\r\n                        </td>\r\n                        <td\r\n                            *ngFor=\"let col of calendarVariables.right.calCols\"\r\n                            [class]=\"calendarVariables.right.classes[row][col]\"\r\n                            (click)=\"clickDate($event, sideEnum.right, row, col)\"\r\n                            (mouseenter)=\"hoverDate($event, sideEnum.right, row, col)\"\r\n                        >\r\n                            <span>{{ calendarVariables.right.calendar[row][col].date() }}</span>\r\n                        </td>\r\n                    </tr>\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n        <div class=\"calendar-time\" *ngIf=\"timePicker\">\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"select-item hourselect\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.right.selectedHour\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.right.hours\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.right.disabledHours.indexOf(i) > -1\"\r\n                    >\r\n                        {{ i }}\r\n                    </option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    class=\"select-item minuteselect\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.right.selectedMinute\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.right.minutes; let index = index\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.right.disabledMinutes.indexOf(i) > -1\"\r\n                    >\r\n                        {{ timepickerVariables.right.minutesLabel[index] }}\r\n                    </option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    *ngIf=\"timePickerSeconds\"\r\n                    class=\"select-item secondselect\"\r\n                    [disabled]=\"!startDate\"\r\n                    [(ngModel)]=\"timepickerVariables.right.selectedSecond\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\"\r\n                >\r\n                    <option\r\n                        *ngFor=\"let i of timepickerVariables.right.seconds; let index = index\"\r\n                        [value]=\"i\"\r\n                        [disabled]=\"timepickerVariables.right.disabledSeconds.indexOf(i) > -1\"\r\n                    >\r\n                        {{ timepickerVariables.right.secondsLabel[index] }}\r\n                    </option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n            <div class=\"select\">\r\n                <select\r\n                    *ngIf=\"!timePicker24Hour\"\r\n                    class=\"select-item ampmselect\"\r\n                    [(ngModel)]=\"timepickerVariables.right.ampmModel\"\r\n                    (ngModelChange)=\"timeChanged($event, sideEnum.right)\"\r\n                >\r\n                    <option value=\"AM\" [disabled]=\"timepickerVariables.right.amDisabled\">AM</option>\r\n                    <option value=\"PM\" [disabled]=\"timepickerVariables.right.pmDisabled\">PM</option>\r\n                </select>\r\n                <span class=\"select-highlight\"></span>\r\n                <span class=\"select-bar\"></span>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"buttons\" *ngIf=\"!autoApply && (!rangesArray.length || (showCalInRanges && !singleDatePicker))\">\r\n        <div class=\"buttons_input\">\r\n            <button *ngIf=\"showClearButton\" class=\"btn btn-default clear\" type=\"button\" (click)=\"clear()\" [title]=\"locale.clearLabel\">\r\n                {{ locale.clearLabel }}\r\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"30\" height=\"30\" viewBox=\"0 -5 24 24\">\r\n                    <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" />\r\n                </svg>\r\n            </button>\r\n            <button class=\"btn btn-default\" *ngIf=\"showCancel\" type=\"button\" (click)=\"clickCancel($event)\">{{ locale.cancelLabel }}</button>\r\n            <button class=\"btn\" [disabled]=\"applyBtn.disabled\" type=\"button\" (click)=\"clickApply($event)\">{{ locale.applyLabel }}</button>\r\n        </div>\r\n    </div>\r\n</div>\r\n","import {\r\n  Directive,\r\n  ViewContainerRef,\r\n  ElementRef,\r\n  HostListener,\r\n  forwardRef,\r\n  ChangeDetectorRef,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  Input,\r\n  DoCheck,\r\n  KeyValueDiffer,\r\n  KeyValueDiffers,\r\n  Output,\r\n  EventEmitter,\r\n  Renderer2,\r\n  HostBinding\r\n} from '@angular/core';\r\nimport { ChosenDate, DateRange, DaterangepickerComponent, DateRanges, EndDate, StartDate, TimePeriod } from './daterangepicker.component';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport dayjs from 'dayjs/esm';\r\nimport { LocaleConfig } from './daterangepicker.config';\r\nimport { LocaleService } from './locale.service';\r\n\r\n@Directive({\r\n  // eslint-disable-next-line @angular-eslint/directive-selector\r\n  selector: 'input[ngxDaterangepickerMd]',\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => DaterangepickerDirective),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\n// eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\r\nexport class DaterangepickerDirective implements OnInit, OnChanges, DoCheck {\r\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix,@angular-eslint/no-output-native,@angular-eslint/no-output-rename\r\n  @Output('change') onChange: EventEmitter<TimePeriod | null> = new EventEmitter();\r\n  // eslint-disable-next-line @angular-eslint/no-output-rename\r\n  @Output('rangeClicked') rangeClicked: EventEmitter<DateRange> = new EventEmitter();\r\n  // eslint-disable-next-line @angular-eslint/no-output-rename\r\n  @Output('datesUpdated') datesUpdated: EventEmitter<TimePeriod> = new EventEmitter();\r\n  @Output() startDateChanged: EventEmitter<StartDate> = new EventEmitter();\r\n  @Output() endDateChanged: EventEmitter<EndDate> = new EventEmitter();\r\n  @Output() clearClicked: EventEmitter<void> = new EventEmitter();\r\n\r\n  @Input()\r\n  minDate: dayjs.Dayjs;\r\n\r\n  @Input()\r\n  maxDate: dayjs.Dayjs;\r\n\r\n  @Input()\r\n  autoApply: boolean;\r\n\r\n  @Input()\r\n  alwaysShowCalendars: boolean;\r\n\r\n  @Input()\r\n  showCustomRangeLabel: boolean;\r\n\r\n  @Input()\r\n  linkedCalendars: boolean;\r\n\r\n  @Input()\r\n  dateLimit: number = null;\r\n\r\n  @Input()\r\n  singleDatePicker: boolean;\r\n\r\n  @Input()\r\n  showWeekNumbers: boolean;\r\n\r\n  @Input()\r\n  showISOWeekNumbers: boolean;\r\n\r\n  @Input()\r\n  showDropdowns: boolean;\r\n\r\n  @Input()\r\n  isInvalidDate: (Dayjs) => boolean;\r\n\r\n  @Input()\r\n  isCustomDate: (Dayjs) => string | boolean;\r\n\r\n  @Input()\r\n  isTooltipDate: (Dayjs) => string | boolean | null;\r\n\r\n  @Input()\r\n  showClearButton: boolean;\r\n\r\n  @Input()\r\n  customRangeDirection: boolean;\r\n\r\n  @Input()\r\n  ranges: DateRanges;\r\n\r\n  @Input()\r\n  opens: string;\r\n\r\n  @Input()\r\n  drops: string;\r\n\r\n  @Input()\r\n  firstMonthDayClass: string;\r\n\r\n  @Input()\r\n  lastMonthDayClass: string;\r\n\r\n  @Input()\r\n  emptyWeekRowClass: string;\r\n\r\n  @Input()\r\n  emptyWeekColumnClass: string;\r\n\r\n  @Input()\r\n  firstDayOfNextMonthClass: string;\r\n\r\n  @Input()\r\n  lastDayOfPreviousMonthClass: string;\r\n\r\n  @Input()\r\n  keepCalendarOpeningWithRange: boolean;\r\n\r\n  @Input()\r\n  showRangeLabelOnInput: boolean;\r\n\r\n  @Input()\r\n  showCancel = false;\r\n\r\n  @Input()\r\n  lockStartDate = false;\r\n\r\n  // timepicker variables\r\n  @Input()\r\n  timePicker = false;\r\n\r\n  @Input()\r\n  timePicker24Hour = false;\r\n\r\n  @Input()\r\n  timePickerIncrement = 1;\r\n\r\n  @Input()\r\n  timePickerSeconds = false;\r\n\r\n  @Input() closeOnAutoApply = true;\r\n  @Input()\r\n  private endKeyHolder: string;\r\n\r\n  public picker: DaterangepickerComponent;\r\n  private startKeyHolder: string;\r\n  private notForChangesProperty: Array<string> = ['locale', 'endKey', 'startKey'];\r\n  private onChangeFn = Function.prototype;\r\n  private onTouched = Function.prototype;\r\n  private validatorChange = Function.prototype;\r\n  private disabledHolder: boolean;\r\n  private valueHolder: TimePeriod | null;\r\n  private localeDiffer: KeyValueDiffer<string, any>;\r\n  private localeHolder: LocaleConfig = {};\r\n\r\n  constructor(\r\n    public viewContainerRef: ViewContainerRef,\r\n    public ref: ChangeDetectorRef,\r\n    private el: ElementRef,\r\n    private renderer: Renderer2,\r\n    private differs: KeyValueDiffers,\r\n    private localeHolderService: LocaleService,\r\n    private elementRef: ElementRef\r\n  ) {\r\n    this.endKey = 'endDate';\r\n    this.startKey = 'startDate';\r\n    this.drops = 'down';\r\n    this.opens = 'auto';\r\n    viewContainerRef.clear();\r\n    const componentRef = viewContainerRef.createComponent(DaterangepickerComponent);\r\n    this.picker = componentRef.instance as DaterangepickerComponent;\r\n    this.picker.inline = false; // set inline to false for all directive usage\r\n  }\r\n\r\n  @HostBinding('disabled') get disabled(): boolean {\r\n    return this.disabledHolder;\r\n  }\r\n\r\n  @Input() set startKey(value: string) {\r\n    if (value !== null) {\r\n      this.startKeyHolder = value;\r\n    } else {\r\n      this.startKeyHolder = 'startDate';\r\n    }\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/member-ordering\r\n  get locale(): LocaleConfig {\r\n    return this.localeHolder;\r\n  }\r\n\r\n  @Input() set locale(value: LocaleConfig) {\r\n    this.localeHolder = { ...this.localeHolderService.config, ...value };\r\n  }\r\n\r\n  @Input() set endKey(value: string) {\r\n    if (value !== null) {\r\n      this.endKeyHolder = value;\r\n    } else {\r\n      this.endKeyHolder = 'endDate';\r\n    }\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/member-ordering\r\n  get value(): TimePeriod | null {\r\n    return this.valueHolder || null;\r\n  }\r\n\r\n  set value(val: TimePeriod | null) {\r\n    this.valueHolder = val;\r\n    this.onChangeFn(val);\r\n    this.ref.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * For click outside the calendar's container\r\n   *\r\n   * @param event event object\r\n   */\r\n  @HostListener('document:click', ['$event'])\r\n  outsideClick(event: Event): void {\r\n    if (!event.target) {\r\n      return;\r\n    }\r\n\r\n    if ((event.target as HTMLElement).classList.contains('ngx-daterangepicker-action')) {\r\n      return;\r\n    }\r\n\r\n    if (!this.elementRef.nativeElement.contains(event.target)) {\r\n      this.hide();\r\n    }\r\n  }\r\n\r\n  @HostListener('keyup.esc', ['$event'])\r\n  hide(e?: Event): void {\r\n    this.picker.hide(e);\r\n  }\r\n\r\n  @HostListener('blur')\r\n  onBlur(): void {\r\n    this.onTouched();\r\n  }\r\n\r\n  @HostListener('keyup', ['$event'])\r\n  inputChanged(e: KeyboardEvent): void {\r\n    if ((e.target as HTMLElement).tagName.toLowerCase() !== 'input') {\r\n      return;\r\n    }\r\n    if (!(e.target as HTMLInputElement).value.length) {\r\n      return;\r\n    }\r\n    const dateString = (e.target as HTMLInputElement).value.split(this.picker.locale.separator);\r\n    let start = null;\r\n    let end = null;\r\n    if (dateString.length === 2) {\r\n      start = dayjs(dateString[0], this.picker.locale.format);\r\n      end = dayjs(dateString[1], this.picker.locale.format);\r\n    }\r\n    if (this.singleDatePicker || start === null || end === null) {\r\n      start = dayjs((e.target as HTMLInputElement).value, this.picker.locale.format);\r\n      end = start;\r\n    }\r\n    if (!start.isValid() || !end.isValid()) {\r\n      return;\r\n    }\r\n    this.picker.setStartDate(start);\r\n    this.picker.setEndDate(end);\r\n    this.picker.updateView();\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  open(event?: Event): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n    this.picker.show(event);\r\n    setTimeout(() => {\r\n      this.setPosition();\r\n    });\r\n  }\r\n\r\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\r\n  ngOnInit(): void {\r\n    this.picker.startDateChanged.asObservable().subscribe((itemChanged: StartDate) => {\r\n      this.startDateChanged.emit(itemChanged);\r\n    });\r\n    this.picker.endDateChanged.asObservable().subscribe((itemChanged: EndDate) => {\r\n      this.endDateChanged.emit(itemChanged);\r\n    });\r\n    this.picker.rangeClicked.asObservable().subscribe((range: DateRange) => {\r\n      this.rangeClicked.emit(range);\r\n    });\r\n    this.picker.datesUpdated.asObservable().subscribe((range: TimePeriod) => {\r\n      this.datesUpdated.emit(range);\r\n    });\r\n    this.picker.clearClicked.asObservable().subscribe(() => {\r\n      this.clearClicked.emit();\r\n    });\r\n    this.picker.choosedDate.asObservable().subscribe((change: ChosenDate) => {\r\n      if (change) {\r\n        const value = {\r\n          [this.startKeyHolder]: change.startDate,\r\n          [this.endKeyHolder]: change.endDate\r\n        };\r\n        this.value = value as TimePeriod;\r\n        this.onChange.emit(value as TimePeriod);\r\n        if (typeof change.chosenLabel === 'string') {\r\n          this.el.nativeElement.value = change.chosenLabel;\r\n        }\r\n      }\r\n    });\r\n    this.picker.firstMonthDayClass = this.firstMonthDayClass;\r\n    this.picker.lastMonthDayClass = this.lastMonthDayClass;\r\n    this.picker.emptyWeekRowClass = this.emptyWeekRowClass;\r\n    this.picker.emptyWeekColumnClass = this.emptyWeekColumnClass;\r\n    this.picker.firstDayOfNextMonthClass = this.firstDayOfNextMonthClass;\r\n    this.picker.lastDayOfPreviousMonthClass = this.lastDayOfPreviousMonthClass;\r\n    this.picker.drops = this.drops;\r\n    this.picker.opens = this.opens;\r\n    this.localeDiffer = this.differs.find(this.locale).create();\r\n    this.picker.closeOnAutoApply = this.closeOnAutoApply;\r\n  }\r\n\r\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    for (const change in changes) {\r\n      if (Object.prototype.hasOwnProperty.call(changes, change)) {\r\n        if (this.notForChangesProperty.indexOf(change) === -1) {\r\n          this.picker[change] = changes[change].currentValue;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle\r\n  ngDoCheck(): void {\r\n    if (this.localeDiffer) {\r\n      const changes = this.localeDiffer.diff(this.locale);\r\n      if (changes) {\r\n        this.picker.updateLocale(this.locale);\r\n      }\r\n    }\r\n  }\r\n\r\n  toggle(e?: Event): void {\r\n    if (this.picker.isShown) {\r\n      this.hide(e);\r\n    } else {\r\n      this.open(e);\r\n    }\r\n  }\r\n\r\n  clear(): void {\r\n    this.picker.clear();\r\n  }\r\n\r\n  writeValue(value: TimePeriod): void {\r\n    this.setValue(value);\r\n  }\r\n\r\n  registerOnChange(fn: () => TimePeriod | null): void {\r\n    this.onChangeFn = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(state: boolean): void {\r\n    this.disabledHolder = state;\r\n  }\r\n\r\n  /**\r\n   * Set position of the calendar\r\n   */\r\n  setPosition(): void {\r\n    let style;\r\n    let containerTop;\r\n    const container = this.picker.pickerContainer.nativeElement;\r\n    const element = this.el.nativeElement;\r\n    if (this.drops && this.drops === 'up') {\r\n      containerTop = element.offsetTop - container.clientHeight + 'px';\r\n    } else {\r\n      containerTop = 'auto';\r\n    }\r\n    if (this.opens === 'left') {\r\n      style = {\r\n        top: containerTop,\r\n        left: element.offsetLeft - container.clientWidth + element.clientWidth + 'px',\r\n        right: 'auto'\r\n      };\r\n    } else if (this.opens === 'center') {\r\n      style = {\r\n        top: containerTop,\r\n        left: element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2 + 'px',\r\n        right: 'auto'\r\n      };\r\n    } else if (this.opens === 'right') {\r\n      style = {\r\n        top: containerTop,\r\n        left: element.offsetLeft + 'px',\r\n        right: 'auto'\r\n      };\r\n    } else {\r\n      const position = element.offsetLeft + element.clientWidth / 2 - container.clientWidth / 2;\r\n      if (position < 0) {\r\n        style = {\r\n          top: containerTop,\r\n          left: element.offsetLeft + 'px',\r\n          right: 'auto'\r\n        };\r\n      } else {\r\n        style = {\r\n          top: containerTop,\r\n          left: position + 'px',\r\n          right: 'auto'\r\n        };\r\n      }\r\n    }\r\n    if (style) {\r\n      this.renderer.setStyle(container, 'top', style.top);\r\n      this.renderer.setStyle(container, 'left', style.left);\r\n      this.renderer.setStyle(container, 'right', style.right);\r\n    }\r\n  }\r\n\r\n  private setValue(val: TimePeriod) {\r\n    if (val) {\r\n      this.value = val;\r\n      if (val[this.startKeyHolder]) {\r\n        this.picker.setStartDate(val[this.startKeyHolder]);\r\n      }\r\n      if (val[this.endKeyHolder]) {\r\n        this.picker.setEndDate(val[this.endKeyHolder]);\r\n      }\r\n      this.picker.calculateChosenLabel();\r\n      if (this.picker.chosenLabel) {\r\n        this.el.nativeElement.value = this.picker.chosenLabel;\r\n      }\r\n    } else {\r\n      this.picker.clear();\r\n    }\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { DaterangepickerComponent } from './daterangepicker.component';\r\nimport { DaterangepickerDirective } from './daterangepicker.directive';\r\nimport { LocaleConfig, LOCALE_CONFIG } from './daterangepicker.config';\r\nimport { LocaleService } from './locale.service';\r\n\r\n@NgModule({\r\n  declarations: [DaterangepickerComponent, DaterangepickerDirective],\r\n  imports: [CommonModule, FormsModule, ReactiveFormsModule],\r\n  providers: [],\r\n  exports: [DaterangepickerComponent, DaterangepickerDirective]\r\n})\r\nexport class NgxDaterangepickerMd {\r\n  constructor() {}\r\n\r\n  static forRoot(config: LocaleConfig = {}): ModuleWithProviders<NgxDaterangepickerMd> {\r\n    return {\r\n      ngModule: NgxDaterangepickerMd,\r\n      providers: [\r\n        { provide: LOCALE_CONFIG, useValue: config },\r\n        { provide: LocaleService, useClass: LocaleService, deps: [LOCALE_CONFIG] }\r\n      ]\r\n    };\r\n  }\r\n}\r\n"],"names":["i1.LocaleService"],"mappings":";;;;;;;;;;;;;;AAGA,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;MAEZ,aAAa,GAAG,IAAI,cAAc,CAAe,wBAAwB,EAAE;AAuB3E,MAAA,mBAAmB,GAAiB;AAC/C,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,WAAW,EAAE,QAAQ;AACrB,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,gBAAgB,EAAE,cAAc;AAChC,IAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE;AAC/B,IAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE;AAC/B,IAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE;;;MClClC,aAAa,CAAA;AACxB,IAAA,WAAA,CAA2C,YAA0B,EAAA;QAA1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;KAAI;AAEzE,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,mBAAmB,CAAC;AAC5B,SAAA;QACD,OAAO,EAAE,GAAG,mBAAmB,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;KACzD;AAED,IAAA,gBAAgB,CAAC,MAAM,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE;AACjC,YAAA,OAAO,mBAAmB,CAAC;AAC5B,SAAA;QACD,OAAO;AACL,YAAA,GAAG,mBAAmB;AACtB,YAAA,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE;YACjG,GAAG,IAAI,CAAC,YAAY;SACrB,CAAC;KACH;;AAnBU,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,kBACJ,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GADtB,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;;0BAEI,MAAM;2BAAC,aAAa,CAAA;;;ACsBnC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzB,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAC9B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAChC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAElB,IAAY,QAGX,CAAA;AAHD,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACnB,CAAC,EAHW,QAAQ,KAAR,QAAQ,GAGnB,EAAA,CAAA,CAAA,CAAA;MAyHY,wBAAwB,CAAA;AAwIjC,IAAA,WAAA,CAAoB,EAAc,EAAU,GAAsB,EAAU,mBAAkC,EAAA;QAA1F,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAe;AAtI9G,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAG7C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAGzC,IAAS,CAAA,SAAA,GAAW,IAAI,CAAC;QAIzB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAGlB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAGzB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAGtB,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QAGxB,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;QAG3B,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QAGxB,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;QAGvB,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAG5B,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAGhB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAItB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGnB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAGzB,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;QAGxB,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAI1B,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QAGxB,IAAkB,CAAA,kBAAA,GAAW,IAAI,CAAC;QAGlC,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC;QAGjC,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC;QAGjC,IAAoB,CAAA,oBAAA,GAAW,IAAI,CAAC;QAGpC,IAAwB,CAAA,wBAAA,GAAW,IAAI,CAAC;QAGxC,IAA2B,CAAA,2BAAA,GAAW,IAAI,CAAC;QAM3C,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGnB,IAA4B,CAAA,4BAAA,GAAG,KAAK,CAAC;QAGrC,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;QAG9B,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;QAIpB,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;QAa1B,IAAiB,CAAA,iBAAA,GAA2B,EAAE,CAAC;QAE/C,IAAmB,CAAA,mBAAA,GAA8B,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,eAAe,GAA6C,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC;AAE1G,QAAA,IAAA,CAAA,QAAQ,GAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAGtD,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC;QAGpB,IAAW,CAAA,WAAA,GAAkB,EAAE,CAAC;QAGhC,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC;QACrB,IAAY,CAAA,YAAA,GAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC9D,IAAa,CAAA,aAAA,GAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACxD,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QAC/B,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;QACtB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QAMV,IAAY,CAAA,YAAA,GAAiB,EAAE,CAAC;QAChC,IAAY,CAAA,YAAA,GAAe,EAAE,CAAC;QAChC,IAAa,CAAA,aAAA,GAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAw2BjF,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,IAAc,KAAI;AAC3B,YAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,iBAAA;AACJ,aAAA;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3B,SAAC,CAAC;AA/2BE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,EAAE,CAAC;KACrD;AAGD,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IACI,OAAO,CAAC,KAA2B,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC9B,SAAA;AAAM,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,SAAA;KACJ;AAGD,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAa,MAAM,CAAC,KAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACrE,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/E,SAAA;KACJ;AAID,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAa,MAAM,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;AAGD,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IACI,OAAO,CAAC,KAA2B,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC9B,SAAA;AAAM,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,SAAA;KACJ;AAID,IAAA,aAAa,CAAC,IAAW,EAAA;AACrB,QAAA,OAAO,KAAK,CAAC;KAChB;AAKD,IAAA,YAAY,CAAC,IAAW,EAAA;AACpB,QAAA,OAAO,KAAK,CAAC;KAChB;AAKD,IAAA,aAAa,CAAC,IAAW,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC;KACf;AAQD,IAAA,mBAAmB,CAAC,CAAa,EAAA;AAC7B,QAAA,OAAO,CAAC,CAAC,eAAe,EAAE,CAAC;KAC9B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;YACvD,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;KACJ;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;AAC5B,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAEpC,OAAO,QAAQ,GAAG,CAAC,EAAE;gBACjB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,gBAAA,QAAQ,EAAE,CAAC;AACd,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACjD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,SAAA;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;AACjC,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpB,oBAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBAC3C,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtE,qBAAA;AAAM,yBAAA;AACH,wBAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,qBAAA;AACD,oBAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBAC3C,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpE,qBAAA;AAAM,yBAAA;AACH,wBAAA,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChD,qBAAA;AAGD,oBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC9C,wBAAA,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAChC,qBAAA;AACD,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC3B,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC7E,wBAAA,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,qBAAA;oBACD,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACjC,wBAAA,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,qBAAA;oBAGD,IACI,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;yBAC9E,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,EACzE;wBACE,SAAS;AACZ,qBAAA;oBAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAChD,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzC,iBAAA;AACJ,aAAA;AACD,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,iBAAA;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACvD,aAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC;AAC5E,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,gBAAgB,CAAC,IAAc,EAAA;AAC3B,QAAA,IAAI,QAAe,CAAC;AACpB,QAAA,IAAI,OAAc,CAAC;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACxB,YAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClC,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC1B,SAAA;aAAM,IAAI,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAChD,YAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAChC,YAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5B,SAAA;aAAM,IAAI,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAEjD,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACnC,gBAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACrC,aAAA;AACD,YAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC5B,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG;AAC7B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;YACjB,QAAQ;SACX,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,gBAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/E,aAAA;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC9C,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA;AACD,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC5C,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA;AAED,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;AACnD,aAAA;AAAM,iBAAA,IAAI,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,aAAA;AACJ,SAAA;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACnD,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAI,CAAA,EAAA,CAAC,EAAE,GAAG,CAAG,EAAA,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAExC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC9C,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA;AACD,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC5C,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;AACrD,aAAA;AAAM,iBAAA,IAAI,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,aAAA;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AACzB,gBAAA,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAI,CAAA,EAAA,CAAC,EAAE,GAAG,CAAG,EAAA,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAExC,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBACnC,QAAQ,GAAG,IAAI,CAAC;AACnB,iBAAA;gBACD,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAClC,QAAQ,GAAG,IAAI,CAAC;AACnB,iBAAA;AAED,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzD,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;AACrD,iBAAA;AAAM,qBAAA,IAAI,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1D,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC5E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;AACpD,aAAA;YAED,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;AACpD,aAAA;AACD,YAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;AACnD,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;AACnD,aAAA;AACJ,SAAA;QACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;KACtD;AAED,IAAA,cAAc,CAAC,IAAc,EAAA;AAEzB,QAAA,MAAM,YAAY,GAAoB,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACtG,MAAM,KAAK,GAAW,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,IAAI,GAAW,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAW,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAW,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,MAAM,GAAW,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,WAAW,GAAW,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACjF,QAAA,MAAM,QAAQ,GAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClE,QAAA,MAAM,OAAO,GAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAW,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAW,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,MAAM,eAAe,GAAW,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7F,QAAA,MAAM,SAAS,GAAW,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEzC,MAAM,QAAQ,GAAoC,EAAE,CAAC;AACrD,QAAA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,QAAA,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACpB,SAAA;AAGD,QAAA,IAAI,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtE,IAAI,QAAQ,GAAG,eAAe,EAAE;YAC5B,QAAQ,IAAI,CAAC,CAAC;AACjB,SAAA;AAED,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpC,YAAA,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC;AAClC,SAAA;QAED,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE3F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;YACvG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;gBACxB,GAAG,GAAG,CAAC,CAAC;AACR,gBAAA,GAAG,EAAE,CAAC;AACT,aAAA;YACD,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9E,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE3B,IACI,IAAI,CAAC,OAAO;AACZ,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7E,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;gBACzC,IAAI,KAAK,MAAM,EACjB;AACE,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC7C,aAAA;YAED,IACI,IAAI,CAAC,OAAO;AACZ,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7E,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBACxC,IAAI,KAAK,OAAO,EAClB;AACE,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC7C,aAAA;AACJ,SAAA;AAGD,QAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC1C,SAAA;AAID,QAAA,IAAI,OAAO,GAAG,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAG3B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChF,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACxC,OAAO,GAAG,QAAQ,CAAC;AACtB,aAAA;YAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrF,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACvC,OAAO,GAAG,QAAQ,CAAC;AACtB,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG;YAC3B,KAAK;YACL,IAAI;YACJ,IAAI;YACJ,MAAM;YACN,MAAM;YACN,WAAW;YACX,QAAQ;YACR,OAAO;YACP,SAAS;YACT,QAAQ;YACR,eAAe;YACf,SAAS;AAET,YAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,YAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,YAAA,OAAO,EAAE,EAAE;YACX,OAAO;YACP,OAAO;YACP,QAAQ;SACX,CAAC;QACF,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,YAAY,GAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACpD,YAAA,MAAM,WAAW,GAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,YAAA,MAAM,eAAe,GAAW,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,YAAA,MAAM,OAAO,GAAW,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,eAAe,GAAG,CAAC,CAAC;AAC3E,YAAA,MAAM,OAAO,GAAW,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,eAAe,GAAG,EAAE,CAAC;AAC5E,YAAA,MAAM,SAAS,GAAY,WAAW,KAAK,OAAO,CAAC;AACnD,YAAA,MAAM,SAAS,GAAY,WAAW,KAAK,OAAO,CAAC;YACnD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG;gBACrC,YAAY;gBACZ,WAAW;gBACX,OAAO;gBACP,OAAO;gBACP,SAAS;gBACT,SAAS;AACT,gBAAA,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,gBAAA,UAAU,EAAE,KAAK;aACpB,CAAC;AACL,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACnC;AAED,IAAA,YAAY,CAAC,SAAyB,EAAA;AAClC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnE,SAAA;AAED,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAC5F,CAAC;AACL,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC7C,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAC5F,CAAC;AACL,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC7C,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAC5F,CAAC;AACL,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;AAED,IAAA,UAAU,CAAC,OAAuB,EAAA;AAC9B,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,SAAA;AAED,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChF,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChH,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACzC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACvC,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5F,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACpE,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAElB,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;IAED,UAAU,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,kBAAkB,GAAA;QACd,IAAI,IAAI,CAAC,OAAO,EAAE;YAEd,IACI,CAAC,IAAI,CAAC,gBAAgB;gBACtB,IAAI,CAAC,YAAY,CAAC,KAAK;gBACvB,IAAI,CAAC,aAAa,CAAC,KAAK;AACxB,iBAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;qBAClH,IAAI,CAAC,SAAS;AACX,wBAAA,IAAI,CAAC,aAAa;AAClB,wBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACzF,iBAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AACzE,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EACpF;gBACE,OAAO;AACV,aAAA;YACD,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzD,IACI,CAAC,IAAI,CAAC,eAAe;AACrB,qBAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EACpG;AACE,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3D,iBAAA;AAAM,qBAAA;oBACH,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7E,iBAAA;AACJ,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IACI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9E,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EACjF;AACE,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7E,aAAA;AACJ,SAAA;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;AAC3G,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/E,SAAA;KACJ;IAKD,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;YACvB,OAAO;AACV,SAAA;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,aAAa,GAAA;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1F,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;AAEhC,gBAAA,IACI,IAAI,CAAC,WAAW,CAAC,MAAM;oBACvB,IAAI,CAAC,qBAAqB,KAAK,IAAI;AACnC,oBAAA,IAAI,CAAC,WAAW;oBAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC,WAAW,EACnD;AACE,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACvC,iBAAA;AAAM,qBAAA;oBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1G,iBAAA;AACJ,aAAA;AACJ,SAAA;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpD,SAAA;KACJ;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;IAKD,oBAAoB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACxC,IAAI,CAAC,WAAW,EAAE,CAAC;AACtB,SAAA;QACD,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACpB,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,qBAAqB,GAAG,kBAAkB,CAAC;wBAEnF,IACI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;4BACtE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EACtE;4BACE,WAAW,GAAG,KAAK,CAAC;4BACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;4BACvC,MAAM;AACT,yBAAA;AACJ,qBAAA;AAAM,yBAAA;wBAEH,IACI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;4BAClF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAClF;4BACE,WAAW,GAAG,KAAK,CAAC;4BACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;4BACvC,MAAM;AACT,yBAAA;AACJ,qBAAA;AACD,oBAAA,CAAC,EAAE,CAAC;AACP,iBAAA;AACJ,aAAA;AACD,YAAA,IAAI,WAAW,EAAE;gBACb,IAAI,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACnD,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,iBAAA;AAED,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC/B,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;AAED,IAAA,UAAU,CAAC,CAAc,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAC3D,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEpE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,SAAA;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAGtD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;oBACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,MAAM;AACT,iBAAA;gBACD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxB,aAAA;AACJ,SAAA;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9G,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,IAAI,EAAE,CAAC;AACf,SAAA;KACJ;AAGD,IAAA,WAAW,CAAC,CAAa,EAAA;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;IAQD,YAAY,CAAC,UAAiB,EAAE,IAAc,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;AAChE,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAE,UAAU,CAAC,MAA4B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC9C;IAQD,WAAW,CAAC,SAAgB,EAAE,IAAc,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAE,SAAS,CAAC,MAA4B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAC9C;IAQD,WAAW,CAAC,SAAgB,EAAE,IAAc,EAAA;AACxC,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7E,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAEhH,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE;gBAC5B,IAAI,IAAI,EAAE,CAAC;AACd,aAAA;AACD,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;YACxB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACzC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACzH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAClC,aAAA;iBAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACzC,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAE/D,gBAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBAC5B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC7D,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC;oBACjE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC;AACpE,iBAAA;AACJ,aAAA;AACJ,SAAA;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,YAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxB,SAAA;QAGD,IAAI,CAAC,eAAe,EAAE,CAAC;AAGvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;KACJ;AASD,IAAA,kBAAkB,CAAC,KAAa,EAAE,IAAY,EAAE,IAAc,EAAA;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;QACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE;AAC7G,gBAAA,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClC,gBAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACnC,aAAA;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;AACvG,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAChC,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACjC,aAAA;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;AACvG,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAChC,gBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACjC,aAAA;AACJ,SAAA;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,GAAG,QAAQ,CAAC;AAC/D,QAAA,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChF,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClF,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACnF,aAAA;AACJ,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAOD,IAAA,SAAS,CAAC,IAAc,EAAA;AACpB,QAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AA2BD,IAAA,SAAS,CAAC,CAAQ,EAAE,IAAc,EAAE,GAAW,EAAE,GAAW,EAAA;AACxD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,WAAW,GAAG,YAAY,CAAC;AAC1E,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,SAAA;KAKJ;AAUD,IAAA,SAAS,CAAC,CAAQ,EAAE,IAAc,EAAE,GAAW,EAAE,GAAW,EAAA;AACxD,QAAA,IAAK,CAAC,CAAC,MAA+B,CAAC,OAAO,KAAK,IAAI,EAAE;YACrD,IAAI,CAAE,CAAC,CAAC,MAA+B,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACrE,OAAO;AACV,aAAA;AACJ,SAAA;AAAM,aAAA,IAAK,CAAC,CAAC,MAA0B,CAAC,OAAO,KAAK,MAAM,EAAE;AACzD,YAAA,IAAI,CAAE,CAAC,CAAC,MAA0B,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC9E,OAAO;AACV,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACnD,SAAA;AAED,QAAA,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjH,IACI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,CAAC;AAC9F,YAAA,IAAI,CAAC,aAAa,KAAK,KAAK,EAC9B;YAEE,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpD,aAAA;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE;YAG9F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA;YAEH,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACrF,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACnC,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACjC,aAAA;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,aAAA;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YAClD,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;QAGD,CAAC,CAAC,eAAe,EAAE,CAAC;KACvB;IAQD,UAAU,CAAC,CAAa,EAAE,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACxC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC/B,SAAA;AAAM,aAAA;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACtE,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC5B,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B,aAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC;AAE5E,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5C,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACxB,aAAA;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,SAAS,EAAE;gBACtD,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,oBAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAC5B,iBAAA;AACD,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;oBACxD,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5E,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1E,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC9E,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3E,iBAAA;AAAM,qBAAA;oBACH,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC1E,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAExE,oBAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9F,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7E,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,iBAAA;gBACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAGD,IAAA,IAAI,CAAC,CAAS,EAAA;QACV,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAO;AACV,SAAA;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;AAGD,IAAA,IAAI,CAAC,CAAS,EAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACrD,aAAA;AACD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACjD,aAAA;AACJ,SAAA;QAGD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;AAErG,SAAA;QAGD,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;AAOD,IAAA,YAAY,CAAC,MAAoB,EAAA;AAC7B,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACtB,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;gBACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,GAAG,KAAK,kBAAkB,EAAE;oBAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;IAKD,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;KACf;AAMD,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACxC,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,KAAI;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,OAAO,KAAK,CAAC;AAChB,aAAA;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;QACH,OAAO,aAAa,IAAI,YAAY,CAAC;KACxC;IAOO,eAAe,CAAC,IAAI,EAAE,IAAc,EAAA;AACxC,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE;gBAC5B,IAAI,IAAI,EAAE,CAAC;AACd,aAAA;AACD,YAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,CAAC,CAAC;AACZ,aAAA;AACJ,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;AACnF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAChH,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAChE;IAKO,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACrB,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACjE,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/D,aAAA;AACJ,SAAA;KACJ;IAEO,UAAU,CAAC,QAAQ,EAAE,IAAc,EAAA;QACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,IACI,IAAI,CAAC,iBAAiB;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAC1G;AACE,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC3C,aAAA;YACD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC9B,MAAM,OAAO,GAAG,EAAE,CAAC;gBAEnB,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,oBAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACnE,wBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3C,qBAAA;AACJ,iBAAA;gBAED,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;AACrD,oBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,iBAAA;AAED,gBAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACrC,oBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,iBAAA;gBAED,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;AACvD,oBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAGpB,IACI,IAAI,CAAC,2BAA2B;AAChC,yBAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrF,wBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,eAAe,EAC5E;AACE,wBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAClD,qBAAA;oBAGD,IACI,IAAI,CAAC,wBAAwB;AAC7B,yBAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBACzF,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EACjC;AACE,wBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC/C,qBAAA;AACJ,iBAAA;gBAED,IACI,IAAI,CAAC,kBAAkB;AACvB,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACrD,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EACxD;AACE,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACzC,iBAAA;gBAED,IACI,IAAI,CAAC,iBAAiB;AACtB,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACrD,oBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EACvD;AACE,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACxC,iBAAA;gBAED,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AAClE,oBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACnC,iBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACjH,oBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACnC,iBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;oBACxC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAC9C,iBAAA;gBAED,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AACnG,oBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACxC,iBAAA;gBAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;AACvG,oBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtC,iBAAA;AAED,gBAAA,IACI,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI;oBAC1E,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;AACnC,qBAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AACrG,oBAAA,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EACrC;AACE,oBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,iBAAA;AAED,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,IAAI,QAAQ,KAAK,KAAK,EAAE;AACpB,oBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9B,wBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,qBAAA;AAAM,yBAAA;wBACH,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjD,qBAAA;AACJ,iBAAA;gBAaD,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,gBAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC7B,oBAAA,KAAK,IAAI,SAAS,GAAG,GAAG,CAAC;oBACzB,IAAI,SAAS,KAAK,UAAU,EAAE;wBAC1B,QAAQ,GAAG,IAAI,CAAC;AACnB,qBAAA;AACJ,iBAAA;gBACD,IAAI,CAAC,QAAQ,EAAE;oBACX,KAAK,IAAI,WAAW,CAAC;AACxB,iBAAA;gBACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpF,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9E,SAAA;KACJ;;sHAn5CQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EARtB,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5JL,u8sBAiZA,EAAA,MAAA,EAAA,CAAA,wsYAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDnPa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAGzB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,u8sBAAA,EAAA,MAAA,EAAA,CAAA,wsYAAA,CAAA,EAAA,CAAA;0JAID,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAKN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAKN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAKN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,wBAAwB,EAAA,CAAA;sBADvB,KAAK;gBAIN,2BAA2B,EAAA,CAAA;sBAD1B,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,4BAA4B,EAAA,CAAA;sBAD3B,KAAK;gBAIN,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,uBAAuB,EAAA,CAAA;sBAAhC,MAAM;gBACyC,eAAe,EAAA,CAAA;sBAA9D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAmD1C,OAAO,EAAA,CAAA;sBADV,KAAK;gBAgBO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAaO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAWF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAaN,aAAa,EAAA,CAAA;sBAFZ,KAAK;gBASN,YAAY,EAAA,CAAA;sBAFX,KAAK;gBASN,aAAa,EAAA,CAAA;sBAFZ,KAAK;gBAYN,mBAAmB,EAAA,CAAA;sBADlB,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME5VxB,wBAAwB,CAAA;AA8HnC,IAAA,WAAA,CACS,gBAAkC,EAClC,GAAsB,EACrB,EAAc,EACd,QAAmB,EACnB,OAAwB,EACxB,mBAAkC,EAClC,UAAsB,EAAA;QANvB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACrB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QACd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAiB;QACxB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAe;QAClC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAnId,QAAA,IAAA,CAAA,QAAQ,GAAoC,IAAI,YAAY,EAAE,CAAC;AAEzD,QAAA,IAAA,CAAA,YAAY,GAA4B,IAAI,YAAY,EAAE,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAA6B,IAAI,YAAY,EAAE,CAAC;AAC1E,QAAA,IAAA,CAAA,gBAAgB,GAA4B,IAAI,YAAY,EAAE,CAAC;AAC/D,QAAA,IAAA,CAAA,cAAc,GAA0B,IAAI,YAAY,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAuB,IAAI,YAAY,EAAE,CAAC;QAqBhE,IAAS,CAAA,SAAA,GAAW,IAAI,CAAC;QA+DzB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGnB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;QAItB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QAGnB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAGzB,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;QAGxB,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAEjB,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;QAMzB,IAAqB,CAAA,qBAAA,GAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACxE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC;QAIrC,IAAY,CAAA,YAAA,GAAiB,EAAE,CAAC;AAWtC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,QAAoC,CAAC;AAChE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;KAC5B;AAED,IAAA,IAA6B,QAAQ,GAAA;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,QAAQ,CAAC,KAAa,EAAA;QACjC,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;AACnC,SAAA;KACF;AAGD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAED,IAAa,MAAM,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;KACtE;IAED,IAAa,MAAM,CAAC,KAAa,EAAA;QAC/B,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;AAC/B,SAAA;KACF;AAGD,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;KACjC;IAED,IAAI,KAAK,CAAC,GAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;AAQD,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO;AACR,SAAA;QAED,IAAK,KAAK,CAAC,MAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE;YAClF,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACzD,IAAI,CAAC,IAAI,EAAE,CAAC;AACb,SAAA;KACF;AAGD,IAAA,IAAI,CAAC,CAAS,EAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACrB;IAGD,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAGD,IAAA,YAAY,CAAC,CAAgB,EAAA;QAC3B,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAC/D,OAAO;AACR,SAAA;QACD,IAAI,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,MAAM,EAAE;YAChD,OAAO;AACR,SAAA;AACD,QAAA,MAAM,UAAU,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5F,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG,GAAG,IAAI,CAAC;AACf,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxD,YAAA,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,SAAA;QACD,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE;AAC3D,YAAA,KAAK,GAAG,KAAK,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/E,GAAG,GAAG,KAAK,CAAC;AACb,SAAA;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;YACtC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;KAC1B;AAGD,IAAA,IAAI,CAAC,KAAa,EAAA;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;IAGD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,WAAsB,KAAI;AAC/E,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,WAAoB,KAAI;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,KAAgB,KAAI;AACrE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,KAAiB,KAAI;AACtE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAAK;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,MAAkB,KAAI;AACtE,YAAA,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,KAAK,GAAG;AACZ,oBAAA,CAAC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS;AACvC,oBAAA,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO;iBACpC,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAmB,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC;AACxC,gBAAA,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE;oBAC1C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AAClD,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;KACtD;AAGD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;gBACzD,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACrD,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC;AACpD,iBAAA;AACF,aAAA;AACF,SAAA;KACF;IAGD,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpD,YAAA,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,aAAA;AACF,SAAA;KACF;AAED,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,SAAA;KACF;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC7B;IAKD,WAAW,GAAA;AACT,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,YAAY,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACrC,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;AAClE,SAAA;AAAM,aAAA;YACL,YAAY,GAAG,MAAM,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;AACzB,YAAA,KAAK,GAAG;AACN,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI;AAC7E,gBAAA,KAAK,EAAE,MAAM;aACd,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClC,YAAA,KAAK,GAAG;AACN,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI;AACrF,gBAAA,KAAK,EAAE,MAAM;aACd,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE;AACjC,YAAA,KAAK,GAAG;AACN,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI;AAC/B,gBAAA,KAAK,EAAE,MAAM;aACd,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;YAC1F,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,gBAAA,KAAK,GAAG;AACN,oBAAA,GAAG,EAAE,YAAY;AACjB,oBAAA,IAAI,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI;AAC/B,oBAAA,KAAK,EAAE,MAAM;iBACd,CAAC;AACH,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,GAAG;AACN,oBAAA,GAAG,EAAE,YAAY;oBACjB,IAAI,EAAE,QAAQ,GAAG,IAAI;AACrB,oBAAA,KAAK,EAAE,MAAM;iBACd,CAAC;AACH,aAAA;AACF,SAAA;AACD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD,SAAA;KACF;AAEO,IAAA,QAAQ,CAAC,GAAe,EAAA;AAC9B,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACjB,YAAA,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AACpD,aAAA;AACD,YAAA,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAChD,aAAA;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;AACnC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC3B,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACvD,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACrB,SAAA;KACF;;sHA9ZU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EATxB,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAGU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAZpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AAET,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;wQAImB,QAAQ,EAAA,CAAA;sBAAzB,MAAM;uBAAC,QAAQ,CAAA;gBAEQ,YAAY,EAAA,CAAA;sBAAnC,MAAM;uBAAC,cAAc,CAAA;gBAEE,YAAY,EAAA,CAAA;sBAAnC,MAAM;uBAAC,cAAc,CAAA;gBACZ,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAGP,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,kBAAkB,EAAA,CAAA;sBADjB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,wBAAwB,EAAA,CAAA;sBADvB,KAAK;gBAIN,2BAA2B,EAAA,CAAA;sBAD1B,KAAK;gBAIN,4BAA4B,EAAA,CAAA;sBAD3B,KAAK;gBAIN,qBAAqB,EAAA,CAAA;sBADpB,KAAK;gBAIN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAKN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIN,gBAAgB,EAAA,CAAA;sBADf,KAAK;gBAIN,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAIN,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAGG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEE,YAAY,EAAA,CAAA;sBADnB,KAAK;gBAiCuB,QAAQ,EAAA,CAAA;sBAApC,WAAW;uBAAC,UAAU,CAAA;gBAIV,QAAQ,EAAA,CAAA;sBAApB,KAAK;gBAaO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAIO,MAAM,EAAA,CAAA;sBAAlB,KAAK;gBAyBN,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAgB1C,IAAI,EAAA,CAAA;sBADH,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAMrC,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,CAAA;gBAMpB,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBA4BjC,IAAI,EAAA,CAAA;sBADH,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MCxQtB,oBAAoB,CAAA;AAC/B,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,OAAO,OAAO,CAAC,MAAA,GAAuB,EAAE,EAAA;QACtC,OAAO;AACL,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC5C,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE;AAC3E,aAAA;SACF,CAAC;KACH;;kHAXU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EALhB,YAAA,EAAA,CAAA,wBAAwB,EAAE,wBAAwB,CACvD,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAE9C,EAAA,OAAA,EAAA,CAAA,wBAAwB,EAAE,wBAAwB,CAAA,EAAA,CAAA,CAAA;mHAEjD,oBAAoB,EAAA,SAAA,EAHpB,EAAE,EADJ,OAAA,EAAA,CAAA,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAA,EAAA,CAAA,CAAA;4FAI9C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;AAClE,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC;AACzD,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;AAC9D,iBAAA,CAAA;;;;;"}