{"version":3,"file":"ej2-calendars.min.js","sources":["../../src/calendar/calendar.js","../../src/calendar/islamic.js","../../src/datepicker/datepicker.js","../../src/daterangepicker/daterangepicker.js","../../src/timepicker/timepicker.js","../../src/datetimepicker/datetimepicker.js","../../src/maskbase/masked-date-time.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar CONTENTTABLE = 'e-calendar-content-table';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar FOCUSEDCELL = 'e-focused-cell';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n var tabIndexAttr = { 'tabindex': '0' };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n attributes(this.previousIcon, tabIndexAttr);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n attributes(this.nextIcon, tabIndexAttr);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n attributes(this.headerTitleElement, tabIndexAttr);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { 'class': CONTENTTABLE, 'tabIndex': '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n if (this.getModuleName() !== 'daterangepicker') {\n EventHandler.add(this.table, 'focus', this.addContentFocus, this);\n EventHandler.add(this.table, 'blur', this.removeContentFocus, this);\n }\n };\n CalendarBase.prototype.addContentFocus = function (args) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.add(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.add(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.removeContentFocus = function (args) {\n var focusedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-focused-date') : null;\n var selectedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-selected') : null;\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.remove(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.remove(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n var shortNames = this.getCultureValues().length > 0 &&\n this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 &&\n this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '' + this.toCapitalize(shortNames[days]) + '';\n }\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n this.todayElement.setAttribute('tabindex', '0');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n if (this.calendarElement === null && e.action === 'escape') {\n return;\n }\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveRight':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveUp':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n }\n break;\n case 'moveDown':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n }\n break;\n case 'select':\n if (e.target === this.headerTitleElement) {\n this.navigateTitle(e);\n }\n else if (e.target === this.previousIcon && !e.target.className.includes(DISABLED)) {\n this.navigatePrevious(e);\n }\n else if (e.target === this.nextIcon && !e.target.className.includes(DISABLED)) {\n this.navigateNext(e);\n }\n else if (e.target === this.todayElement && !e.target.className.includes(DISABLED)) {\n this.todayButtonClick(e, value);\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n if (!e.target.className.includes(DISABLED)) {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n case 'tab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.todayElement) {\n e.preventDefault();\n if (this.isAngular) {\n this.inputElement.focus();\n }\n else {\n this.element.focus();\n }\n this.hide();\n }\n break;\n case 'shiftTab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.headerTitleElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n case 'escape':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && (e.target === this.headerTitleElement || e.target === this.previousIcon || e.target === this.nextIcon || e.target === this.todayElement)) {\n this.hide();\n }\n break;\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n dayLink.setAttribute('aria-disabled', 'true');\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n dayLink.setAttribute('aria-disabled', 'true');\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n var title = this.globalize.formatDate(localDate, { type: 'date', format: 'MMM y' });\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + title);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n dayLink.setAttribute('aria-disabled', 'true');\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + dayLink.textContent);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n * @deprecated\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n if (this.getModuleName() === 'calendar') {\n var l10nLocale = { today: 'Today' };\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n }\n this.l10.setLocale(this.locale);\n if (this.showTodayButton) {\n this.updateFooter();\n }\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.todayButtonEvent = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n !Browser.isDevice && e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n !Browser.isDevice && eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDCELL))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDCELL)], FOCUSEDCELL);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n e && e.type === 'click' && e.currentTarget.classList.contains(OTHERMONTH) ? this.changeHandler(e) : this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n this.changedArgs = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @deprecated\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","/**\n *\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, attributes, HijriParser } from '@syncfusion/ej2-base';\nimport { getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar dayMilliSeconds = 86400000;\nvar minDecade = 2060;\nvar maxDecade = 2069;\nvar Islamic = /** @class */ (function () {\n function Islamic(instance) {\n this.calendarInstance = instance;\n }\n Islamic.prototype.getModuleName = function () {\n return 'islamic';\n };\n Islamic.prototype.islamicTitleUpdate = function (date, view) {\n var globalize = new Internationalization(this.calendarInstance.locale);\n switch (view) {\n case 'days':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'MMMMyyyy', calendar: 'islamic' });\n break;\n case 'months':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'yyyy', calendar: 'islamic' });\n }\n };\n Islamic.prototype.islamicRenderDays = function (currentDate, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date(this.islamicInValue(currentDate));\n var minMaxDate;\n this.islamicTitleUpdate(currentDate, 'days');\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = this.toGregorian(islamicDate.year, islamicDate.month, 1);\n var currentMonth = islamicDate.month;\n localDate = gregorianObject;\n while (localDate.getDay() !== this.calendarInstance.firstDayOfWeek) {\n this.calendarInstance.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.calendarInstance.createElement('td', { className: CELL });\n var weekAnchor = this.calendarInstance.createElement('span');\n if (day % 7 === 0 && this.calendarInstance.weekNumber) {\n weekAnchor.textContent = '' + this.calendarInstance.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.calendarInstance.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: 'islamic' };\n var date = this.calendarInstance.globalize.parseDate(this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.islamicDayCell(localDate);\n var title = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'full', calendar: 'islamic' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'd', calendar: 'islamic' });\n var disabled = (this.calendarInstance.min > localDate) || (this.calendarInstance.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n var hijriMonthObject = this.getIslamicDate(localDate);\n if (currentMonth !== hijriMonthObject.month) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.calendarInstance.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.calendarInstance.renderDayCellArgs;\n this.calendarInstance.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (this.calendarInstance.isMultiSelection) {\n if (!isNullOrUndefined(this.calendarInstance.values) && this.calendarInstance.values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.calendarInstance.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n var tempDateString = +new Date(this.calendarInstance.globalize.formatDate(this.calendarInstance.values[index], { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n if (localDateString === tempDateString) {\n this.calendarInstance.values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.calendarInstance.setProperties({ value: null }, true);\n }\n }\n if (this.calendarInstance.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.calendarInstance.renderDayCellArgs.date === +this.calendarInstance.todayDate) {\n this.calendarInstance.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n if (this.calendarInstance.isMultiSelection && !isNullOrUndefined(this.calendarInstance.values) &&\n !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < this.calendarInstance.values.length; tempValue++) {\n var localDateString = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'short', calendar: 'islamic' });\n var tempDateString = this.calendarInstance.globalize.formatDate(this.calendarInstance.values[tempValue], { type: 'date', skeleton: 'short', calendar: 'islamic' });\n if (localDateString === tempDateString &&\n this.calendarInstance.getDateVal(localDate, this.calendarInstance.values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (this.calendarInstance.values.length <= 0) {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.calendarInstance.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getDate() === new Date().getDate() && date.getMonth() === new Date().getMonth()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n localDate = new Date(+minMaxDate);\n tdEles.push(this.calendarInstance.renderDayCellArgs.element);\n this.calendarInstance.addDay(localDate, 1, null, this.calendarInstance.max, this.calendarInstance.min);\n }\n return tdEles;\n };\n Islamic.prototype.islamicIconHandler = function () {\n new Date(this.islamicInValue(this.calendarInstance.currentDate)).setDate(1);\n var date = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n {\n var prevMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.min) < 1;\n var nextMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevMonthCompare);\n this.calendarInstance.nextIconHandler(nextMonthCompare);\n }\n break;\n case 'Year':\n {\n var prevYearCompare = this.hijriCompareYear(date, this.calendarInstance.min) < 1;\n var nextYearCompare = this.hijriCompareYear(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevYearCompare);\n this.calendarInstance.nextIconHandler(nextYearCompare);\n }\n break;\n case 'Decade': {\n var startIslamicYear = 1361;\n var gregorianValue = HijriParser.toGregorian(startIslamicYear, 1, 1);\n var prevDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.min) < 1;\n var nextDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.max) > -1;\n prevDecadeCompare = HijriParser.toGregorian(this.calendarInstance.headerTitleElement.textContent.split('-')[0].trim(), 1, 1).getFullYear() === gregorianValue.getFullYear() ? true : prevDecadeCompare;\n this.calendarInstance.previousIconHandler(prevDecadeCompare);\n this.calendarInstance.nextIconHandler(nextDecadeCompare);\n }\n }\n };\n Islamic.prototype.islamicNext = function () {\n this.calendarInstance.effect = '';\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 1, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month + 1, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Decade':\n this.calendarInstance.nextIconClicked = true;\n if (islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1) {\n islamicDate.year = islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1 ? islamicDate.year + 1 : islamicDate.year;\n }\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 10, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n }\n };\n Islamic.prototype.islamicPrevious = function () {\n var currentView = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n this.calendarInstance.effect = '';\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 1, islamicDate.month, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Decade':\n this.calendarInstance.previousIconClicked = true;\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 10, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n }\n };\n Islamic.prototype.islamicRenderYears = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var localDate = curDate;\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var mon = islamicDate.month;\n var yr = islamicDate.year;\n var curYrs = islamicDate.year;\n var minYr = (this.getIslamicDate(this.calendarInstance.min)).year;\n var minMonth = (this.getIslamicDate(this.calendarInstance.min)).month;\n var maxYr = (this.getIslamicDate(this.calendarInstance.max)).year;\n var maxMonth = (this.getIslamicDate(this.calendarInstance.max)).month;\n this.islamicTitleUpdate(this.calendarInstance.currentDate, 'months');\n for (var month = 1; month <= 12; ++month) {\n var islamicDate_1 = this.getIslamicDate(localDate);\n var gregorianObject_1 = HijriParser.toGregorian(islamicDate_1.year, month, 1);\n localDate = gregorianObject_1;\n var tdEle = this.islamicDayCell(localDate);\n var dayLink = this.calendarInstance.createElement('span');\n var localMonth = (value &&\n (this.getIslamicDate(value)).month === (this.getIslamicDate(localDate)).month);\n var select = (value && (this.getIslamicDate(value)).year === yr && localMonth);\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'MMM', calendar: 'islamic' });\n if ((this.calendarInstance.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.calendarInstance.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if ((this.getIslamicDate(localDate)).month === mon &&\n (this.getIslamicDate(this.calendarInstance.currentDate)).month === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.islamicRenderTemplate(tdEles, numCells, YEAR, e, value);\n };\n Islamic.prototype.islamicRenderDecade = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var localYr = localDate.getFullYear();\n var startYr = new Date(this.islamicInValue((localYr - localYr % 10)));\n var endYr = new Date(this.islamicInValue((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHdrYr = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (this.calendarInstance.locale === 'ar') {\n startHdrYr = Number(startHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n endHdrYr = Number(endHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n }\n var splityear = this.calendarInstance.headerElement.textContent.split('-');\n if ((!isNullOrUndefined(e) && (splityear[0] !== startHdrYr) && e.action === 'home') ||\n (!isNullOrUndefined(e) && e.type === 'keydown' && e.action === 'end')) {\n startHdrYr = this.calendarInstance.headerElement.textContent.split('-')[0].trim();\n endHdrYr = this.calendarInstance.headerElement.textContent.split('-')[1].trim();\n }\n if (this.calendarInstance.islamicPreviousHeader) {\n startHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[0].trim();\n endHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[1].trim();\n this.calendarInstance.islamicPreviousHeader = null;\n }\n if (this.calendarInstance.previousIconClicked) {\n var i = 0;\n for (i = 0; i <= splityear.length; i++) {\n endHdrYr = endHdrYr - splityear[i] === 2 || splityear[i]\n - endHdrYr === 2 ? (parseInt(endHdrYr, 10) + 1).toString() :\n endHdrYr - splityear[i] === 3 || splityear[i] - endHdrYr === 3 ?\n (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - splityear[i] === 4 ||\n splityear[i] - endHdrYr === 4 ? (parseInt(endHdrYr, 10) + 3).toString() :\n endHdrYr - splityear[i] === 5 || splityear[i] - endHdrYr === 5 ?\n (parseInt(endHdrYr, 10) + 4).toString() : endHdrYr;\n if (endHdrYr - splityear[i] === 0 || splityear[i] - endHdrYr === 0) {\n endHdrYr = (parseInt(endHdrYr, 10) - 1).toString();\n }\n }\n if (endHdrYr - splityear[i] === 8 || splityear[i] - endHdrYr === 8) {\n endHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n if (endHdrYr - splityear[i] === 7 || splityear[i] - endHdrYr === 7) {\n endHdrYr = (parseInt(endHdrYr, 10) - 8).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n startHdrYr = endHdrYr - startHdrYr === 10\n ? (parseInt(startHdrYr, 10) + 1).toString() : endHdrYr - startHdrYr === 11\n ? (parseInt(startHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 12\n ? (parseInt(startHdrYr, 10) + 3).toString() : startHdrYr;\n if (endHdrYr - startHdrYr === 8) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n }\n if (this.calendarInstance.nextIconClicked) {\n for (var i = 0; i <= splityear.length; i++) {\n if (startHdrYr - splityear[i] === 0 || splityear[i] - startHdrYr === 0) {\n startHdrYr = (parseInt(startHdrYr, 10) + 1).toString();\n }\n if (startHdrYr - splityear[i] === 2 && startHdrYr > splityear[i].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n if (splityear[i] - startHdrYr === 1 && startHdrYr < splityear[i].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) + 2).toString();\n }\n }\n if (startHdrYr - this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim() > 1) {\n startHdrYr = (parseInt(this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim(), 10) + 1).toString();\n endHdrYr = (parseInt(startHdrYr, 10) + 9).toString();\n }\n endHdrYr = endHdrYr - startHdrYr === 10 ? (parseInt(endHdrYr, 10) - 1).toString() : endHdrYr;\n endHdrYr = endHdrYr - startHdrYr === 7\n ? (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 8\n ? (parseInt(endHdrYr, 10) + 1).toString() : endHdrYr;\n }\n if (this.calendarInstance.locale === 'ar') {\n var startHeaderYear = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHeaderYear = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n this.calendarInstance.headerTitleElement.textContent = startHeaderYear + ' - ' + (endHeaderYear);\n }\n else {\n this.calendarInstance.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n }\n this.calendarInstance.nextIconClicked = this.calendarInstance.previousIconClicked = false;\n var year = (parseInt(startHdrYr, 10) - 2).toString();\n startFullYr = Math.round(parseInt(startHdrYr, 10) * 0.97 + 622);\n endFullYr = Math.round(parseInt(endHdrYr, 10) * 0.97 + 622);\n var startYear = Math.round(parseInt(year, 10) * 0.97 + 622);\n for (var rowCount = 1; rowCount <= yearCell; ++rowCount) {\n var year_1 = startYear + rowCount;\n localDate.setFullYear(year_1);\n localDate.setDate(1);\n localDate.setMonth(0);\n if ((this.getIslamicDate(localDate).year - islamicDate.year) > 1) {\n localDate.setMonth(1);\n rowCount = rowCount - 1;\n localDate.setFullYear(localDate.getFullYear() - 1);\n }\n islamicDate = this.getIslamicDate(localDate);\n var gregorianObject_2 = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject_2;\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || islamicDate.year >= startHdrYr &&\n islamicDate.year <= endFullYr || islamicDate.year === parseInt(endHdrYr, 10) + 1) {\n var tdEle = this.islamicDayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || (year_1 < startFullYr) ||\n (year_1 > endFullYr) && islamicDate.year !== parseInt(endHdrYr, 10)) {\n addClass([tdEle], OTHERMONTH);\n }\n else if (year_1 < new Date(this.islamicInValue(this.calendarInstance.min)).getFullYear()\n || year_1 > new Date(this.islamicInValue(this.calendarInstance.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) &&\n (this.getIslamicDate(localDate)).year ===\n (this.getIslamicDate(value)).year) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.calendarInstance.currentDate.getFullYear() &&\n !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n if ((!isNullOrUndefined(e) && e.action === 'home' && islamicDate.year.toString() === startHdrYr) || (!isNullOrUndefined(e) && e.action === 'end' && islamicDate.year.toString() === endHdrYr)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n tdEles.push(tdEle);\n }\n }\n this.islamicRenderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n Islamic.prototype.islamicDayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: 'islamic' };\n var formatDate = this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions);\n var date = this.calendarInstance.globalize.parseDate(formatDate, dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.calendarInstance.createElement('td', attrs);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Islamic.prototype.islamicRenderTemplate = function (elements, count, classNm, e, value) {\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var trEle;\n this.calendarInstance.tableBodyElement = this.calendarInstance.createElement('tbody');\n this.calendarInstance.table.appendChild(this.calendarInstance.tableBodyElement);\n removeClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowCount = 0;\n for (var dayCell = 0; dayCell < Math.round(elements.length / count); ++dayCell) {\n trEle = this.calendarInstance.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowCount = 0 + rowCount; rowCount < row; rowCount++) {\n if (!elements[rowCount].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowCount].children[0])) {\n addClass([elements[rowCount].children[0]], [LINK]);\n rippleEffect(elements[rowCount].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowCount]);\n if (this.calendarInstance.weekNumber &&\n rowCount === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.calendarInstance.weekNumber\n && rowCount === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.calendarInstance.weekNumber) {\n if (rowCount === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowCount === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowCount = rowCount + 0;\n this.calendarInstance.tableBodyElement.appendChild(trEle);\n }\n this.calendarInstance.table.querySelector('tbody').className = this.calendarInstance.effect;\n this.islamicIconHandler();\n if (view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView())\n || (view === 0 && view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView()))) {\n this.calendarInstance.navigateHandler(e);\n }\n this.calendarInstance.setAriaActiveDescendant();\n this.calendarInstance.changedArgs = { value: this.calendarInstance.value, values: this.calendarInstance.values };\n this.calendarInstance.changeHandler();\n };\n Islamic.prototype.islamicCompareMonth = function (start, end) {\n var hijriStart = (this.getIslamicDate(start));\n var hijriEnd = (this.getIslamicDate(end));\n var result;\n if (hijriStart.year > hijriEnd.year) {\n result = 1;\n }\n else if (hijriStart.year < hijriEnd.year) {\n result = -1;\n }\n else {\n result = hijriStart.month === hijriEnd.month ? 0 : hijriStart.month > hijriEnd.month ? 1 : -1;\n }\n return result;\n };\n Islamic.prototype.islamicCompare = function (startDate, endDate, modifier) {\n var hijriStart = this.getIslamicDate(startDate);\n var hijriEnd = this.getIslamicDate(endDate);\n var start = hijriEnd.year;\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (hijriStart.year > end) {\n result = 1;\n }\n else if ((this.calendarInstance.currentView() === 'Decade') && hijriStart.year < start &&\n !((startDate.getFullYear() >= minDecade && startDate.getFullYear() <= maxDecade))) {\n result = -1;\n }\n else if (hijriStart.year < start && (this.calendarInstance.currentView() === 'Year')) {\n result = -1;\n }\n return result;\n };\n Islamic.prototype.getIslamicDate = function (date) {\n return (HijriParser.getHijriDate(date));\n };\n Islamic.prototype.toGregorian = function (year, month, date) {\n return HijriParser.toGregorian(year, month, date);\n };\n Islamic.prototype.hijriCompareYear = function (start, end) {\n return this.islamicCompare(start, end, 0);\n };\n Islamic.prototype.hijriCompareDecade = function (start, end) {\n return this.islamicCompare(start, end, 10);\n };\n Islamic.prototype.destroy = function () {\n this.calendarInstance = null;\n };\n Islamic.prototype.islamicInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n return Islamic;\n}());\nexport { Islamic };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.isBlur = false;\n _this.isKeyAction = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false', 'aria-label': this.getModuleName()\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + 'e-popup-expand';\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic, isBlur);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.isBlur = true;\n this.updateInput(false, true);\n this.isBlur = false;\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))\n && (!target.classList.contains('e-dlg-overlay'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n if (e.action === 'tab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n e.preventDefault();\n this.headerTitleElement.focus();\n }\n if (e.action === 'shiftTab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (((this.getModuleName() !== 'datetimepicker') && (+this.value !== +this.previousDate)) || ((this.getModuleName() === 'datetimepicker') && (+this.value !== +this.previousDateTime)))) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var pattern = /^y/;\n var charPattern = /[^a-zA-Z]/;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n else {\n format = this.formatString;\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n var modifiedValue = this.inputElement.value.replace(/(am|pm|Am|aM|pM|Pm)/g, function (match) { return match.toLocaleUpperCase(); });\n date = this.globalize.parseDate(modifiedValue, dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER, id: this.inputElement.id + '_options' });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : (this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }),\n open: function () {\n if (Browser.isDevice && _this.fullScreenMode) {\n _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n _this.touchModule = new Touch(_this.calendarElement.querySelector('.e-content.e-month'), {\n swipe: _this.CalendarSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector('.e-content.e-month'), 'touchstart', _this.TouchStartHandler, _this);\n }\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.CalendarSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRight) {\n switch (e.swipeDirection) {\n case 'Left':\n direction = 1;\n break;\n case 'Right':\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case 'Up':\n direction = 1;\n break;\n case 'Down':\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchStart = false;\n }\n };\n DatePicker.prototype.TouchStartHandler = function (e) {\n this.touchStart = true;\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.fullScreenMode) {\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n var modelTodayButton = this.calendarElement.querySelector('button.e-today');\n h2.classList.add('e-day-wrapper');\n modelTodayButton.classList.add('e-outline');\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTodayButton);\n }\n if (!this.fullScreenMode) {\n modelHeader.appendChild(yearHeading);\n }\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.modelCloseHandler = function (e) {\n this.hide();\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.keyupHandler = function (e) {\n this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobilePopupWrapper.appendChild(dlgOverlay);\n }\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) &&\n (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n * @deprecated\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n _super.prototype.destroy.call(this);\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-label': this.getModuleName()\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime', isBlur: isBlur\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n attributes(this.inputElement, { 'aria-controls': this.inputElement.id });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.datepickerOptions && this.datepickerOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend, Touch } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = 'e-list-item';\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar ZOOMIN = 'e-zoomin';\nvar NONEDITABLE = 'e-non-edit';\nvar DAYHEADERLONG = 'e-daterange-day-header-lg';\nvar HIDDENELEMENT = 'e-daterange-hidden';\nvar wrapperAttr = ['title', 'class', 'style'];\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateRangePickerModel} options - Specifies the DateRangePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n _this.invalidValueString = null;\n _this.preventChange = false;\n _this.dateRangeOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n this.setDataAttribute(false);\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n spacebar: 'space'\n };\n this.defaultConstant = {\n placeholder: this.placeholder,\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = (Browser.isDevice) ? true : window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.updateHtmlAttributeToElement();\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.checkInvalidRange(this.value);\n if (!this.invalidValueString && (typeof (this.value) === 'string')) {\n var rangeArray = this.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n }\n this.initProperty();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.formElement = closest(this.element, 'form');\n };\n DateRangePicker.prototype.updateValue = function () {\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.startValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ startDate: new Date(this.checkValue(this.value[0])) }, true);\n this.startValue = new Date(this.checkValue(this.value[0]));\n }\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ endDate: new Date(this.checkValue(this.value[1])) }, true);\n this.endValue = new Date(this.checkValue(this.value[1]));\n this.setValue();\n }\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date(this.checkValue(this.value.start)) }, true);\n this.startValue = new Date(this.checkValue(this.value.start));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date(this.checkValue(this.value.end)) }, true);\n this.endValue = new Date(this.checkValue(this.value.end));\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date(this.checkValue(this.endDate)));\n this.startValue = this.checkDateValue(new Date(this.checkValue(this.startDate)));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.checkFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n else {\n this.formatString = null;\n }\n }\n else {\n this.formatString = null;\n }\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes(false);\n merge(this.defaultKeyConfigs, { shiftTab: 'shift+tab', tab: 'tab' });\n var start = this.checkDateValue(new Date(this.checkValue(this.startValue)));\n this.setProperties({ startDate: start }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date(this.checkValue(this.endValue))) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setDataAttribute = function (isDynamic) {\n var attributes = {};\n if (!isDynamic) {\n for (var i = 0; i < this.element.attributes.length; i++) {\n attributes[this.element.attributes[i].name] =\n this.element.getAttribute(this.element.attributes[i].name);\n }\n }\n else {\n attributes = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (pro.indexOf('data') === 0) {\n this.firstHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n this.secondHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n }\n }\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateClearIconState();\n };\n DateRangePicker.prototype.updateClearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n }\n }\n else if (key === 'style') {\n var dateRangeStyle = this.inputWrapper.container.getAttribute(key);\n dateRangeStyle = !isNullOrUndefined(dateRangeStyle) ? (dateRangeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, dateRangeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DateRangePicker.prototype.updateCssClass = function (cssNewClass, cssOldClass) {\n if (!isNullOrUndefined(cssOldClass)) {\n cssOldClass = (cssOldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssNewClass)) {\n cssNewClass = (cssNewClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssNewClass, [this.inputWrapper.container], cssOldClass);\n if (this.popupWrapper) {\n Input.setCssClass(cssNewClass, [this.popupWrapper], cssOldClass);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date(this.checkValue(range.end)), start: new Date(this.checkValue(range.start))\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n };\n DateRangePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.inputElement.tabIndex = -1;\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { format: this.formatString, type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n var clearedArgs = {\n event: e\n };\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.trigger('cleared', clearedArgs);\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n if (closest(this.element, 'form')) {\n var element = this.firstHiddenChild;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DateRangePicker.prototype.restoreValue = function () {\n this.previousEleValue = this.inputElement.value;\n this.previousStartValue = this.startValue;\n this.previousEndValue = this.endValue;\n this.valueType = null;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.setValue();\n this.setModelValue();\n };\n DateRangePicker.prototype.formResetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.formElement && (e.target === this.formElement) && !this.inputElement.disabled) {\n var val = this.inputElement.getAttribute('value');\n if (!isNullOrUndefined(this.startCopy)) {\n if (!isNullOrUndefined(this.value) && !isNullOrUndefined(this.value.start)) {\n this.setProperties({ value: { start: this.startCopy, end: this.endCopy } }, true);\n this.startValue = this.value.start;\n this.endValue = this.value.end;\n }\n else {\n this.setProperties({ value: [this.startCopy, this.endCopy] }, true);\n this.startValue = this.value[0];\n this.endValue = this.value[1];\n }\n this.setProperties({ startDate: this.startValue, endDate: this.endValue }, true);\n }\n else {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n this.startValue = this.endValue = null;\n }\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n val = '';\n this.startValue = this.endValue = null;\n this.inputElement.setAttribute('value', '');\n }\n this.restoreValue();\n if (this.inputElement) {\n Input.setValue(val, this.inputElement, this.floatLabelType, this.showClearButton);\n this.errorClass();\n }\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.isMobile) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function (isDynamic) {\n this.globalize = new Internationalization(this.locale);\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder',\n 'type', 'value'];\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['enabled'] === undefined)) || isDynamic) {\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ enabled: !disabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === 'true' || this.inputElement.getAttribute(prop) === '' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['value'] === undefined)) || isDynamic) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, value, {}), !isDynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if ((isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if ((isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if (startDate.getDate() === this.startValue.getDate() && startDate.getMonth() === this.startValue.getMonth() &&\n startDate.getFullYear() === this.startValue.getFullYear() && endDate.getDate() === this.endValue.getDate() &&\n endDate.getMonth() === this.endValue.getMonth() && endDate.getFullYear() === this.endValue.getFullYear()) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n this.adjustLongHeaderWidth();\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n if (this.leftCalPrevIcon && this.leftCalNextIcon && this.rightCalPrevIcon && this.rightCalNextIcon) {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n }\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n _super.prototype.iconHandler.call(this);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n if (this.start === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.trigger('focus', focusArguments);\n }\n this.updateClearIconState();\n if (this.openOnFocus && !this.preventFocus) {\n this.preventFocus = true;\n this.show();\n }\n else {\n this.preventFocus = true;\n }\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n this.invalidValueString = null;\n var dateOptions = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var start = this.globalize.parseDate(range[0], dateOptions);\n var end = this.globalize.parseDate(range[1], dateOptions);\n var startDate = this.getStartEndDate(start, false, range, dateOptions);\n var endDate = this.getStartEndDate(end, true, range, dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n var prevStartVal = this.startValue;\n this.startValue = startDate;\n var prevEndVal = this.endValue;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n if (value !== this.previousEleValue) {\n this.changeTrigger(e);\n }\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n // For Mobile mode, when a value is present and choose another range and click on console\n // when popup is open, two startvalues and end values are updated in the popup.\n if (this.isMobile && this.isPopupOpen()) {\n this.startValue = prevStartVal;\n this.endValue = prevEndVal;\n }\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n if (isNullOrUndefined(this.popupObj)) {\n this.currentDate = null;\n }\n this.previousStartValue = this.previousEndValue = null;\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(value) && value.trim() === '') {\n this.startValue = null;\n this.endValue = null;\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.getStartEndDate = function (date, isEnd, range, dateOptions) {\n if (this.depth === 'Month') {\n return this.globalize.parseDate(range[isEnd ? 1 : 0].trim(), dateOptions);\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele, isRemoveFocus) {\n if (isRemoveFocus === void 0) { isRemoveFocus = true; }\n if (isRemoveFocus) {\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.keyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.keyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n ele = this.keyCalendarUpdate(false, ele, false);\n this.currentDate = this.firstCellToFocus(this.rightCalendar);\n view = this.getViewNumber(this.currentView());\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n case 'shiftTab':\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n ele = this.keyCalendarUpdate(true, ele, false);\n this.currentDate = this.firstCellToFocus(this.leftCalendar);\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n }\n };\n DateRangePicker.prototype.firstCellToFocus = function (calendar) {\n var focusAbleEle = this.getViewNumber(this.currentView()) === 2 ? calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-year)') : calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-month)');\n var focusEleID = focusAbleEle && focusAbleEle.id ? focusAbleEle.id.split('_')[0] : null;\n var currentFirstDay = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), 1);\n var focusDate = focusEleID ? new Date(+focusEleID) : currentFirstDay;\n return focusDate;\n };\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n // eslint-disable-next-line no-self-assign\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (levelRestrict) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n }\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) || !isNullOrUndefined(focusedDate)) && !levelRestrict) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n }\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n e.preventDefault();\n }\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n this.currentDate = new Date(+this.leftCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n this.currentDate = new Date(+this.rightCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.tabKeyValidation = function (ele, calendarPos) {\n var isLeftCalendar = ele.classList.contains(calendarPos);\n var rightHeader = this.rightCalendar.querySelector('.e-header');\n var leftHeader = this.leftCalendar.querySelector('.e-header');\n var isRightMonth = rightHeader ? rightHeader.classList.contains('e-month') : false;\n var isLeftMonth = leftHeader ? leftHeader.classList.contains('e-month') : false;\n var isRightYear = rightHeader ? rightHeader.classList.contains('e-year') : false;\n var isLeftYear = leftHeader ? leftHeader.classList.contains('e-year') : false;\n var isRightDecade = rightHeader ? rightHeader.classList.contains('e-decade') : false;\n var isLeftDecade = leftHeader ? leftHeader.classList.contains('e-decade') : false;\n return isLeftCalendar && (isLeftMonth || isLeftYear || isLeftDecade) &&\n (isRightMonth || isRightYear || isRightDecade) && !this.isMobile;\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n var today = new Date();\n var eleDate = this.getIdValue(null, ele);\n if ((this.depth === 'Month' && this.currentView() === 'Month' &&\n (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && isDate)))\n || (this.depth === 'Year' && this.currentView() === 'Year' &&\n ((!this.isSameMonth(today, eleDate) && !this.isSameYear(today, eleDate)) || isDate))\n || (this.depth === 'Decade' && this.currentView() === 'Decade' &&\n (!this.isSameYear(today, eleDate) || isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.isSameStartEnd = function (startVal, endVal) {\n var isSame = false;\n if (this.depth === 'Month') {\n if ((startVal).setHours(0, 0, 0, 0) === (endVal).setHours(0, 0, 0, 0)) {\n isSame = true;\n }\n }\n else if (this.depth === 'Year') {\n if ((startVal.getFullYear() === endVal.getFullYear()) &&\n (startVal.getMonth() === endVal.getMonth())) {\n isSame = true;\n }\n }\n else if (this.depth === 'Decade') {\n if (startVal.getFullYear() === endVal.getFullYear()) {\n isSame = true;\n }\n }\n return isSame;\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === this.depth &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n !this.isSameStartEnd(new Date(+this.startValue), new Date(+this.endValue)) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (ele.classList.contains(SELECTED) && ele.classList.contains(ENDDATE) &&\n (+eleDateValue !== +this.endValue)) {\n removeClass([ele], [SELECTED]);\n removeClass([ele], [ENDDATE]);\n }\n if (ele.classList.contains(RANGEHOVER) && (+eleDateValue > +this.endValue)) {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === this.depth &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Year') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), eleDateValue_1.getMonth() + 1, 0);\n }\n else if (this.currentView() === 'Decade') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), 11, 31);\n }\n if (this.currentView() === this.depth &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n var y = date.getFullYear();\n var m = date.getMonth();\n var firstDay = new Date(y, m, 1);\n var lastDay = new Date(y, m + 1, 0);\n var firstMonth = new Date(y, 0, 1);\n var lastMonth = new Date(y, 11, 31);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? lastDay : lastMonth;\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.calendarIconEvent();\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === this.depth) {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if ((!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) ||\n (this.isMobile && this.endButton.element.classList.contains(ACTIVE))) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var startValueSelected = this.removeTimeValueFromDate(this.startValue);\n var minDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n if (this.currentView() === 'Year') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear(), minDate.getMonth(), 0);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), maxDate.getMonth(), 1);\n }\n else if (this.currentView() === 'Decade') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear() - 1, 11, 1);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), 0, 1);\n }\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n eleDate = this.removeTimeValueFromDate(eleDate);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +startValueSelected) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeTimeValueFromDate = function (value) {\n var dateValue = new Date(value.getFullYear(), value.getMonth(), value.getDate());\n return dateValue;\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar, customDate) {\n if (customDate === void 0) { customDate = null; }\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+(customDate ? customDate : this.currentDate));\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.calendarIconEvent();\n if ((((this.depth === 'Month')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || ((this.depth === 'Year')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-year')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-year'))\n || ((this.depth === 'Decade')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-decade')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-decade')))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue <= +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue >= +this.min && +this.startValue >= +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'data-role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameYear = function (start, end) {\n if (start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameDecade = function (start, end) {\n var startYear = start.getFullYear();\n var endYear = end.getFullYear();\n if ((startYear - (startYear % 10)) === (endYear - (endYear % 10))) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n var month = this.currentDate.getMonth() + 1;\n this.currentDate.setMonth(month);\n }\n };\n DateRangePicker.prototype.selectNextYear = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameYear(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setMonth(0);\n var yr = this.currentDate.getFullYear() + 1;\n this.currentDate.setFullYear(yr);\n return;\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setMonth(0);\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 1);\n }\n };\n DateRangePicker.prototype.selectNextDecade = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameDecade(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n var decyr = this.currentDate.getFullYear() + 10;\n this.currentDate.setFullYear(decyr);\n return;\n }\n if (((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 10);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n if (this.start === 'Month') {\n this.selectNextMonth();\n }\n if (this.start === 'Year') {\n this.selectNextYear();\n }\n if (this.start === 'Decade') {\n this.selectNextDecade();\n }\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '0');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n DateRangePicker.prototype.getCalendarView = function (view) {\n if (view === 'Year') {\n return 'Year';\n }\n else if (view === 'Decade') {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n this.trigger('navigated', this.navigatedArgs);\n if (!isNullOrUndefined(this.popupObj)) {\n var element = void 0;\n var view = this.getCalendarView(this.currentView());\n if (this.isMobile) {\n if (view === this.depth) {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n this.checkMinMaxDays();\n }\n else {\n this.selectableDates();\n }\n }\n else {\n if (!this.isMobile && view === this.depth) {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n _super.prototype.navigateTo.call(this, view, this.rightCalCurrentDate);\n var customDate = this.rightCalCurrentDate ? this.rightCalCurrentDate : this.currentDate;\n this.updateControl(this.rightCalendar, customDate);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && isNullOrUndefined(this.endValue)) {\n if (view === 'Month' && this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else if (view === 'Year' && this.startValue.getFullYear() < this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n this.checkMinMaxDays();\n }\n else {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n if (this.isMobile && this.fullScreenMode) {\n var modelHeaderIconWrapper = this.createElement('div', { className: 'e-model-header-wrapper' });\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelRangeCloseHandler, this);\n var modelApplyButton = this.createElement('span', { className: 'e-apply' });\n EventHandler.add(modelApplyButton, 'mousedown touchstart', this.applyFunction, this);\n modelHeaderIconWrapper.appendChild(modelCloseIcon);\n modelHeaderIconWrapper.appendChild(modelApplyButton);\n headerContainer.appendChild(modelHeaderIconWrapper);\n }\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.modelRangeCloseHandler = function (e) {\n this.hide();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n var isValueChanged = false;\n if (eve.type !== 'touchstart') {\n eve.preventDefault();\n }\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n if (!(this.previousStartValue && this.previousEndValue &&\n this.startValue.getDate() === this.previousStartValue.getDate() &&\n this.startValue.getMonth() === this.previousStartValue.getMonth() &&\n this.startValue.getFullYear() === this.previousStartValue.getFullYear()\n && this.endValue.getDate() === this.previousEndValue.getDate() &&\n this.endValue.getMonth() === this.previousEndValue.getMonth()\n && this.endValue.getFullYear() === this.previousEndValue.getFullYear())) {\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n isValueChanged = true;\n }\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n isValueChanged = true;\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!(closest(eve.target, '.' + INPUTCONTAINER))\n && (!isValueChanged)) {\n this.focusOut();\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyConfigs: this.keyInputConfigs,\n keyAction: this.popupKeyActionHandle.bind(this)\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.preventFocus = true;\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values, event);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values, e) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(e));\n this.changeTrigger(e);\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0', 'aria-label': 'daterangepicker-preset' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n var customElement = this.presetElement.querySelector('#custom_range');\n if (!isNullOrUndefined(customElement)) {\n customElement.textContent = this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange')\n : 'Custom Range';\n }\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n if (this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-range-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement('span', { className: 'e-model-title' });\n modelTitleSpan.textContent = 'Select Preset';\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelRangeCloseHandler, this);\n var presetContent = this.presetElement;\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(presetContent);\n this.popupWrapper.insertBefore(modelWrapper, this.popupWrapper.firstElementChild);\n this.presetElement.style.width = '100%';\n }\n else {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n if (_this.isMobile && _this.fullScreenMode) {\n _this.iconRangeRight = _this.calendarElement && window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).cssFloat;\n if (_this.iconRangeRight) {\n _this.touchRangeModule = new Touch(_this.calendarElement.querySelector('.e-content.e-month'), {\n swipe: _this.dateRangeSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector('.e-content.e-month'), 'touchstart', _this.touchStartRangeHandler, _this);\n }\n }\n attributes(_this.inputElement, { 'aria-expanded': 'true', 'aria-owns': _this.element.id, 'aria-controls': _this.inputElement.id });\n if (_this.value) {\n attributes(_this.inputElement, { 'aria-activedescendant': _this.inputElement.id });\n }\n else {\n _this.inputElement.removeAttribute('aria-activedescendant');\n }\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.keyInputConfigs = extend(_this.keyInputConfigs, _this.keyConfigs);\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.keyInputConfigs\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n if (!isNullOrUndefined(_this.popupObj.element.parentElement)) {\n detach(_this.popupObj.element);\n }\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }, targetExitViewport: function () {\n var popupEle = _this.popupObj && _this.popupObj.element;\n if (!Browser.isDevice && popupEle && popupEle.getBoundingClientRect().height < window.innerHeight) {\n _this.hide();\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.dateRangeSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRangeRight === 'left') {\n switch (e.swipeDirection) {\n case 'Left':\n direction = 1;\n break;\n case 'Right':\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case 'Up':\n direction = 1;\n break;\n case 'Down':\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchRangeStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchRangeStart = false;\n }\n };\n DateRangePicker.prototype.touchStartRangeHandler = function (e) {\n this.touchRangeStart = true;\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n }\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, '[id=\"' + this.popupWrapper.id + '\"]') && e.type !== 'mousedown')) {\n if (e.type !== 'touchstart' && ((e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel)) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '[id=\"' + this.popupWrapper.id + '\"]'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day'))) && (!target.classList.contains('e-dlg-overlay'))) {\n this.preventBlur = false;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n if (this.fullScreenMode && this.isMobile) {\n this.cssClass += ' ' + 'e-popup-expand';\n }\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n // if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n // Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n // }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.startCopy = this.startDate;\n this.endCopy = this.endDate;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.adjustLongHeaderWidth = function () {\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.popupWrapper], DAYHEADERLONG);\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isDisabled && !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var formatOption = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.formatDate(this.startValue, formatOption);\n var endDate = this.globalize.formatDate(this.endValue, formatOption);\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n Input.setValue(this.invalidValueString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DateRangePicker.prototype.checkInvalidRange = function (value) {\n if (!isNullOrUndefined(value)) {\n var invalid = false;\n var startinvalue = void 0;\n var endinvalue = void 0;\n var startString = null;\n var endString = null;\n var valueString = null;\n var startObject = false;\n var endObject = false;\n var invalidobject = false;\n if (typeof (value) === 'string') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length === 2) {\n startString = range[0];\n endString = range[1];\n }\n else {\n invalid = true;\n valueString = value;\n }\n }\n else {\n if (value.length > 0) {\n startinvalue = value[0];\n endinvalue = value[1];\n }\n else {\n startinvalue = value.start;\n endinvalue = value.end;\n }\n if (!(startinvalue instanceof Date) && typeof (startinvalue) !== 'object') {\n startString = this.getstringvalue(startinvalue);\n }\n else if (startinvalue instanceof Date) {\n startObject = true;\n }\n else if (!isNullOrUndefined(startinvalue)) {\n invalidobject = true;\n }\n if (!(endinvalue instanceof Date) && typeof (endinvalue) !== 'object') {\n endString = this.getstringvalue(endinvalue);\n }\n else if (endinvalue instanceof Date) {\n endObject = true;\n }\n else if (!isNullOrUndefined(endinvalue)) {\n invalidobject = true;\n }\n }\n if ((isNullOrUndefined(startString) && !startObject && !isNullOrUndefined(endString)) ||\n (!isNullOrUndefined(startString) && !endObject && isNullOrUndefined(endString))) {\n invalid = true;\n }\n if (invalidobject) {\n startString = endString = valueString = null;\n invalid = true;\n }\n if (startString) {\n invalid = invalid || this.checkInvalidValue(startString);\n }\n if (endString) {\n invalid = invalid || this.checkInvalidValue(endString);\n }\n if (invalid) {\n if (startObject && !invalidobject) {\n startString = startinvalue.toLocaleDateString();\n }\n if (endObject && !invalidobject) {\n endString = endinvalue.toLocaleDateString();\n }\n if (!isNullOrUndefined(startString) && !isNullOrUndefined(endString)) {\n valueString = startString + ' ' + this.separator + ' ' + endString;\n }\n else if (!isNullOrUndefined(startString)) {\n valueString = startString;\n }\n else if (!isNullOrUndefined(endString)) {\n valueString = endString;\n }\n this.invalidValueString = valueString;\n this.setProperties({ value: null }, true);\n this.setProperties({ startValue: null }, true);\n this.setProperties({ endValue: null }, true);\n this.startDate = null;\n this.endDate = null;\n }\n }\n };\n DateRangePicker.prototype.getstringvalue = function (value) {\n var stringValue = null;\n if (!isNullOrUndefined(value) && (typeof value === 'number')) {\n stringValue = (value).toString();\n }\n else if (!isNullOrUndefined(value) && (typeof value === 'string')) {\n stringValue = '' + value;\n }\n return stringValue;\n };\n DateRangePicker.prototype.checkInvalidValue = function (value) {\n var valueString = value;\n var invalid = false;\n var formatOpt = null;\n formatOpt = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n if (typeof valueString !== 'string') {\n invalid = true;\n }\n else {\n var globalize = new Internationalization(this.locale);\n if (!this.checkDateValue(globalize.parseDate(valueString, formatOpt))) {\n var extISOStr = null;\n var basISOString = null;\n // eslint-disable-next-line\n extISOStr = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOStr.test(valueString) && !basISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n }\n }\n return invalid;\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue && +this.endValue <= +this.max) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n if (!this.isPopupOpen()) {\n this.currentDate = null;\n }\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n *\n * @param {HTMLElement} element - Specifies the element to dispatch the event.\n * @param {string} type - Specifies the name of the event.\n * @returns {void}\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.rangeArgs(e));\n }\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, date) {\n if (this.isPopupOpen()) {\n if (view.toLowerCase() === 'month') {\n view = 'Month';\n }\n else if (view.toLowerCase() === 'year') {\n view = 'Year';\n }\n else if (view.toLowerCase() === 'decade') {\n view = 'Decade';\n }\n else {\n return;\n }\n if (this.getViewNumber(view) < this.getViewNumber(this.depth)) {\n view = this.depth;\n }\n if (this.isMobile) {\n _super.prototype.navigateTo.call(this, view, date);\n }\n else {\n if (date < this.min) {\n date = new Date(+this.min);\n }\n else if (date >= this.max) {\n date = new Date(+this.max);\n }\n if (view === 'Month' && this.isSameMonth(date, this.max)) {\n date = new Date(this.max.getFullYear(), this.max.getMonth() - 1, this.min.getDate());\n }\n else if (view === 'Year' && this.isSameYear(date, this.max)) {\n date = new Date((this.max.getFullYear() - 1), this.max.getMonth(), this.max.getDate());\n }\n else if (view === 'Decade' && this.isSameDecade(date, this.max)) {\n date = new Date((this.max.getFullYear() - 10), this.max.getMonth(), this.max.getDate());\n }\n this.leftCalCurrentDate = date;\n this.navigate(this.leftCalendar, this.leftCalCurrentDate, view);\n if (view === 'Month') {\n date = new Date(this.currentDate.setMonth(this.currentDate.getMonth() + 1));\n }\n else if (view === 'Year') {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 1));\n }\n else {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 10));\n }\n this.rightCalCurrentDate = date;\n this.navigate(this.rightCalendar, this.rightCalCurrentDate, view);\n this.leftKeyboardModule = this.rightKeyboardModule = null;\n this.updateNavIcons();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n };\n DateRangePicker.prototype.navigate = function (calendar, date, view) {\n this.calendarElement = calendar;\n this.table = calendar.querySelector('table');\n this.tableBodyElement = calendar.querySelector('tbody');\n this.headerTitleElement = calendar.querySelector('.e-title');\n this.tableHeadElement = calendar.querySelector('thead');\n this.contentElement = calendar.querySelector('.e-content');\n this.previousIcon = calendar.querySelector('.e-prev');\n this.nextIcon = calendar.querySelector('.e-next');\n this.effect = ZOOMIN;\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.destroy = function () {\n this.unBindEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.hide(null);\n var ariaAttrs = {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n this.closeEventArgs = null;\n this.leftCalendar = null;\n this.rightTitle = null;\n this.leftTitle = null;\n this.openEventArgs = null;\n this.leftCalNextIcon = null;\n this.rightCalendar = null;\n this.closeEventArgs = null;\n this.rightCalPrevIcon = null;\n this.leftCalPrevIcon = null;\n this.popupKeyboardModule = null;\n this.cancelButton = null;\n this.applyButton = null;\n this.calendarElement = null;\n this.leftKeyboardModule = null;\n this.rightCalNextIcon = null;\n this.leftCalNextIcon = null;\n this.btnKeyboardModule = null;\n this.rightKeyboardModule = null;\n this.leftKeyboardModule = null;\n this.presetKeyboardModule = null;\n this.liCollections = null;\n this.popupObj = null;\n this.popupWrapper = null;\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n var attr = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n attr[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < attr.length; i++) {\n if (isNullOrUndefined(this.cloneElement.getAttribute(attr[i]))) {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(attr[i]);\n }\n else {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(attr[i]);\n }\n this.inputElement.setAttribute(attr[i], this.cloneElement.getAttribute(attr[i]));\n }\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Return the properties that are maintained upon browser refresh.\n *\n * @returns {string}\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n *\n * @returns {Object}\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * To open the Popup container in the DateRangePicker component.\n *\n * @param {HTMLElement} element - Specifies element.\n * @returns {void}\n */\n DateRangePicker.prototype.show = function (element, event) {\n var _this = this;\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n if (this.isMobile || Browser.isDevice) {\n this.mobileRangePopupWrap = this.createElement('div', { className: 'e-daterangepick-mob-popup-wrap' });\n document.body.appendChild(this.mobileRangePopupWrap);\n }\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: this.isMobile || Browser.isDevice ? this.mobileRangePopupWrap : document.body\n };\n var eventArgs = this.openEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openEventArgs = eventArgs;\n if (!_this.openEventArgs.cancel) {\n _this.openEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.showPopup(element, event);\n var isPreset = (!_this.isCustomRange || (_this.isMobile && _this.isCustomRange));\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label) && isPreset) {\n _this.setScrollPosition();\n }\n _this.checkMinMaxDays();\n if ((_this.isMobile) && (!isNullOrUndefined(_this.startDate)) && (isNullOrUndefined(_this.endDate))) {\n _this.endButton.element.classList.add(ACTIVE);\n _this.startButton.element.classList.remove(ACTIVE);\n _this.endButton.element.removeAttribute('disabled');\n _this.selectableDates();\n }\n _super.prototype.setOverlayIndex.call(_this, _this.mobileRangePopupWrap, _this.popupObj.element, _this.modal, _this.isMobile || Browser.isDevice);\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileRangePopupWrap.appendChild(dlgOverlay);\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.hide = function (event) {\n var _this = this;\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date(this.checkValue(this.previousStartValue));\n this.setValue();\n this.currentDate = new Date(this.checkValue(this.startValue));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date(this.checkValue(this.previousEndValue));\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n var eventArgs = this.closeEventArgs;\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventArgs = eventArgs;\n if (!_this.closeEventArgs.cancel) {\n if (_this.isMobile) {\n if (!isNullOrUndefined(_this.startButton) && !isNullOrUndefined(_this.endButton)) {\n EventHandler.remove(_this.startButton.element, 'click touchstart', _this.deviceHeaderClick);\n EventHandler.remove(_this.endButton.element, 'click touchstart', _this.deviceHeaderClick);\n }\n }\n if (_this.popupObj) {\n _this.popupObj.hide();\n if (_this.preventBlur) {\n _this.inputElement.focus();\n addClass([_this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!_this.isMobile) {\n if (!isNullOrUndefined(_this.leftKeyboardModule) && !isNullOrUndefined(_this.rightKeyboardModule)) {\n _this.leftKeyboardModule.destroy();\n _this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.cancelButton)) {\n _this.btnKeyboardModule.destroy();\n }\n }\n _this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', _this.documentHandler);\n if (_this.isMobile && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (_this.isMobile || Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileRangePopupWrap)) {\n _this.mobileRangePopupWrap.remove();\n _this.mobileRangePopupWrap = null;\n }\n }\n _this.isKeyPopup = _this.dateDisabled = false;\n }\n else {\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n }\n _this.updateClearIconState();\n _this.updateHiddenInput();\n if (_this.isMobile && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n }\n else {\n this.updateClearIconState();\n this.updateHiddenInput();\n if (this.isMobile && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateRangeOptions && this.dateRangeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n this.updateHiddenInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.checkView();\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n var format = { format: this.formatString, type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n };\n DateRangePicker.prototype.setMinMaxDays = function () {\n if (this.isPopupOpen()) {\n this.removeClassDisabled();\n this.checkMinMaxDays();\n if (this.isMobile) {\n this.selectableDates();\n }\n if (!this.strictMode && (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n this.removeSelection();\n }\n else {\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n this.updateHeader();\n }\n };\n DateRangePicker.prototype.getStartEndValue = function (date, isEnd) {\n if (this.depth === 'Month') {\n return this.checkDateValue(new Date(this.checkValue(date)));\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateRangePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateRangePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var openPopup = ['maxDays', 'minDays', 'value'];\n if (openPopup.indexOf(prop) < 0) {\n this.hide(null);\n }\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.setRangeAllowEdit();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateRangeOptions && this.dateRangeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.setLocale();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.setDataAttribute(true);\n this.checkHtmlAttributes(true);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.getStartEndValue(newProp.startDate, false);\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.getStartEndValue(newProp.endDate, true);\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidRange(newProp.value);\n if (typeof (newProp.value) === 'string') {\n if (!this.invalidValueString) {\n var rangeArray = newProp.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n this.updateValue();\n this.setDate();\n }\n else {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else {\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n }\n if (this.isPopupOpen()) {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.removeSelection();\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n return;\n }\n if (this.isMobile) {\n this.navigate(this.deviceCalendar, this.startValue, this.currentView());\n this.deviceHeaderUpdate();\n }\n else {\n this.navigate(this.leftCalendar, this.startValue, this.currentView());\n this.updateControl(this.leftCalendar);\n this.navigate(this.rightCalendar, this.endValue, this.currentView());\n this.updateControl(this.rightCalendar);\n }\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n this.updateHeader();\n this.applyButton.disabled = this.applyButton.element.disabled = false;\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'start':\n this.setProperties({ start: newProp.start }, true);\n this.refreshChange();\n break;\n case 'depth':\n this.setProperties({ depth: newProp.depth }, true);\n this.refreshChange();\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateRangePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], DateRangePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setTimeZone();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeZone = function () {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = this.serverTimezoneOffset;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n TimePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + 'e-popup-expand';\n }\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n }\n else {\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement('span', { className: 'e-model-title' });\n modelTitleSpan.textContent = 'Select time';\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n }\n };\n TimePicker.prototype.timePopupCloseHandler = function (e) {\n this.hide();\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (!((event.action === 'right' || event.action === 'left' || event.action === 'tab') || ((event.action === 'home' || event.action === 'end' || event.action === 'up' || event.action === 'down') && !this.isPopupOpen() && !this.enableMask))) {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.createMask();\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.getValue(date);\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.getDateObject(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n if (this.enableMask) {\n this.selectInputText();\n }\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(this.prevDate);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask && this.value) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)\n && (!target.classList.contains('e-dlg-overlay'))) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileTimePopupWrap.appendChild(dlgOverlay);\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.timeOptions && this.timeOptions.placeholder == null) {\n this.updatePlaceHolder();\n }\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.formatRegex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|'[^']*'|'[^']*'/g;\n _this.dateFormatString = '';\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (typeof (this.min) === 'string') {\n this.min = this.checkDateValue(new Date(this.min));\n }\n if (typeof (this.max) === 'string') {\n this.max = this.checkDateValue(new Date(this.max));\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat());\n if (this.dateFormatString === '') {\n this.dateFormatString = this.cldrDateTimeFormat();\n }\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.dateFormatString, type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_options' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n this.popupObject.refreshPosition(this.inputElement);\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.dateTimeWrapper.style.left = '0px';\n }\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.timeModal.appendChild(dlgOverlay);\n }\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container && !target.classList.contains('e-dlg-overlay')) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObject.element.style.display = 'flex';\n this.popupObject.element.style.maxHeight = '100%';\n this.popupObject.element.style.width = '100%';\n }\n else {\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement('span', { className: 'e-model-title' });\n modelTitleSpan.textContent = 'Select time';\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n var timeContent = this.dateTimeWrapper.querySelector('.e-content');\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(timeContent);\n this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n }\n };\n DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n this.hide();\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n if (Browser.isDevice && this.fullScreenMode) {\n return popupHeight;\n }\n else {\n return popupHeight > height ? height : popupHeight;\n }\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n if (Browser.isDevice && this.fullScreenMode) {\n var listContent = this.dateTimeWrapper.querySelector('.e-content');\n listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.TimePopupFormat = function () {\n var format = '';\n var formatCount = 0;\n var proxy = null || this;\n /**\n * Formats the value specifier.\n *\n * @param {string} formattext - The format text.\n * @returns {string} The formatted value specifier.\n */\n function formatValueSpecifier(formattext) {\n switch (formattext) {\n case 'd':\n case 'dd':\n case 'ddd':\n case 'dddd':\n case 'M':\n case 'MM':\n case 'MMM':\n case 'MMMM':\n case 'y':\n case 'yy':\n case 'yyy':\n case 'yyyy':\n if (format === '') {\n format = format + formattext;\n }\n else {\n format = format + '/' + formattext;\n }\n formatCount = formatCount + 1;\n break;\n }\n if (formatCount > 2) {\n proxy.dateFormatString = format;\n }\n return format;\n }\n return formatValueSpecifier;\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @deprecated\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateTimeOptions && this.dateTimeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n }\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","import { L10n, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nvar ARROWLEFT = 'ArrowLeft';\nvar ARROWRIGHT = 'ArrowRight';\nvar ARROWUP = 'ArrowUp';\nvar ARROWDOWN = 'ArrowDown';\nvar TAB = 'Tab';\nvar SHIFTTAB = 'shiftTab';\nvar END = 'End';\nvar HOME = 'Home';\nvar MaskedDateTime = /** @class */ (function () {\n function MaskedDateTime(parent) {\n this.mask = '';\n this.defaultConstant = {\n day: 'day',\n month: 'month',\n year: 'year',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayOfTheWeek: 'day of the week'\n };\n this.hiddenMask = '';\n this.validCharacters = 'dMyhmHfasz';\n this.isDayPart = false;\n this.isMonthPart = false;\n this.isYearPart = false;\n this.isHourPart = false;\n this.isMinutePart = false;\n this.isSecondsPart = false;\n this.isMilliSecondsPart = false;\n this.monthCharacter = '';\n this.periodCharacter = '';\n this.isHiddenMask = false;\n this.isComplete = false;\n this.isNavigate = false;\n this.navigated = false;\n this.isBlur = false;\n this.formatRegex = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;\n this.isDeletion = false;\n this.isShortYear = false;\n this.isDeleteKey = false;\n this.isDateZero = false;\n this.isMonthZero = false;\n this.isYearZero = false;\n this.isLeadingZero = false;\n this.dayTypeCount = 0;\n this.monthTypeCount = 0;\n this.hourTypeCount = 0;\n this.minuteTypeCount = 0;\n this.secondTypeCount = 0;\n this.parent = parent;\n this.dateformat = this.getCulturedFormat();\n this.maskDateValue = this.parent.value != null ? new Date(+this.parent.value) : new Date();\n this.maskDateValue.setMonth(0);\n this.maskDateValue.setHours(0);\n this.maskDateValue.setMinutes(0);\n this.maskDateValue.setSeconds(0);\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.removeEventListener();\n this.addEventListener();\n }\n MaskedDateTime.prototype.getModuleName = function () {\n return 'MaskedDateTime';\n };\n MaskedDateTime.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('createMask', this.createMask, this);\n this.parent.on('setMaskSelection', this.validCharacterCheck, this);\n this.parent.on('inputHandler', this.maskInputHandler, this);\n this.parent.on('keyDownHandler', this.maskKeydownHandler, this);\n this.parent.on('clearHandler', this.clearHandler, this);\n };\n MaskedDateTime.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('createMask', this.createMask);\n this.parent.off('setMaskSelection', this.validCharacterCheck);\n this.parent.off('inputHandler', this.maskInputHandler);\n this.parent.off('keyDownHandler', this.maskKeydownHandler);\n this.parent.off('clearHandler', this.clearHandler);\n };\n MaskedDateTime.prototype.createMask = function (mask) {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.dateformat = this.getCulturedFormat();\n if (this.parent.maskPlaceholder.day) {\n this.defaultConstant['day'] = this.parent.maskPlaceholder.day;\n }\n if (this.parent.maskPlaceholder.month) {\n this.defaultConstant['month'] = this.parent.maskPlaceholder.month;\n }\n if (this.parent.maskPlaceholder.year) {\n this.defaultConstant['year'] = this.parent.maskPlaceholder.year;\n }\n if (this.parent.maskPlaceholder.hour) {\n this.defaultConstant['hour'] = this.parent.maskPlaceholder.hour;\n }\n if (this.parent.maskPlaceholder.minute) {\n this.defaultConstant['minute'] = this.parent.maskPlaceholder.minute;\n }\n if (this.parent.maskPlaceholder.second) {\n this.defaultConstant['second'] = this.parent.maskPlaceholder.second;\n }\n if (this.parent.maskPlaceholder.dayOfTheWeek) {\n this.defaultConstant['dayOfTheWeek'] = this.parent.maskPlaceholder.dayOfTheWeek.toString();\n }\n this.getCUltureMaskFormat();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.mask = this.previousValue = inputValue;\n this.parent.maskedDateValue = this.mask;\n if (this.parent.value) {\n this.navigated = true;\n this.isBlur = mask.isBlur;\n this.setDynamicValue();\n }\n };\n MaskedDateTime.prototype.getCUltureMaskFormat = function () {\n this.l10n = new L10n(this.parent.moduleName, this.defaultConstant, this.parent.locale);\n this.objectString = Object.keys(this.defaultConstant);\n for (var i = 0; i < this.objectString.length; i++) {\n this.defaultConstant[this.objectString[i].toString()] =\n this.l10n.getConstant(this.objectString[i].toString());\n }\n };\n MaskedDateTime.prototype.validCharacterCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n if (this.parent.moduleName !== 'timepicker') {\n if (start === this.hiddenMask.length && this.mask === this.parent.inputElement.value) {\n start = 0;\n }\n }\n for (var i = start, j = start - 1; i < this.hiddenMask.length || j >= 0; i++, j--) {\n if (i < this.hiddenMask.length && this.validCharacters.indexOf(this.hiddenMask[i]) !== -1) {\n this.setSelection(this.hiddenMask[i]);\n return;\n }\n if (j >= 0 && this.validCharacters.indexOf(this.hiddenMask[j]) !== -1) {\n this.setSelection(this.hiddenMask[j]);\n return;\n }\n }\n };\n MaskedDateTime.prototype.setDynamicValue = function () {\n this.maskDateValue = new Date(+this.parent.value);\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = true;\n this.updateValue();\n if (!this.isBlur) {\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.setSelection = function (validChar) {\n var start = -1;\n var end = 0;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === validChar) {\n end = i + 1;\n if (start === -1) {\n start = i;\n }\n }\n }\n if (start < 0) {\n start = 0;\n }\n this.parent.inputElement.setSelectionRange(start, end);\n };\n MaskedDateTime.prototype.maskKeydownHandler = function (args) {\n this.dayTypeCount = this.monthTypeCount = this.hourTypeCount = this.minuteTypeCount = this.secondTypeCount = 0;\n if (args.e.key === 'Delete') {\n this.isDeleteKey = true;\n return;\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWLEFT || args.e.key === ARROWRIGHT\n || args.e.key === SHIFTTAB || args.e.key === TAB || args.e.action === SHIFTTAB ||\n args.e.key === END || args.e.key === HOME)) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var length_1 = this.parent.inputElement.value.length;\n if ((start === 0 && end === length_1) && (args.e.key === TAB || args.e.action === SHIFTTAB)) {\n var index = args.e.action === SHIFTTAB ? end : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = index;\n }\n if (args.e.key === END || args.e.key === HOME) {\n var range = args.e.key === END ? length_1 : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = range;\n }\n this.navigateSelection(args.e.key === ARROWLEFT || args.e.action === SHIFTTAB || args.e.key === END ? true : false);\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.dateAlteration(args.e.key === ARROWDOWN ? true : false);\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.isPersist = function () {\n var isPersist = this.parent.isFocused || this.navigated;\n return isPersist;\n };\n MaskedDateTime.prototype.differenceCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n var inputValue = this.parent.inputElement.value;\n var previousVal = this.previousValue.substring(0, start + this.previousValue.length - inputValue.length);\n var newVal = inputValue.substring(0, start);\n var newDateValue = new Date(+this.maskDateValue);\n var maxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (previousVal.indexOf(newVal) === 0 && (newVal.length === 0 ||\n this.previousHiddenMask[newVal.length - 1] !== this.previousHiddenMask[newVal.length])) {\n for (var i = newVal.length; i < previousVal.length; i++) {\n if (this.previousHiddenMask[i] !== '' && this.validCharacters.indexOf(this.previousHiddenMask[i]) >= 0) {\n this.isDeletion = this.handleDeletion(this.previousHiddenMask[i], false);\n }\n }\n if (this.isDeletion) {\n return;\n }\n }\n switch (this.previousHiddenMask[start - 1]) {\n case 'd':\n {\n var date = (this.isDayPart && newDateValue.getDate().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getDate() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.isDateZero = (newVal[start - 1] === '0');\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(date)) {\n return;\n }\n for (var i = 0; date > maxDate; i++) {\n date = parseInt(date.toString().slice(1), 10);\n }\n if (date >= 1) {\n newDateValue.setDate(date);\n this.isNavigate = date.toString().length === 2;\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n if (newDateValue.getMonth() !== this.maskDateValue.getMonth()) {\n return;\n }\n this.isDayPart = true;\n this.dayTypeCount = this.dayTypeCount + 1;\n }\n else {\n this.isDayPart = false;\n this.dayTypeCount = this.isDateZero ? this.dayTypeCount + 1 : this.dayTypeCount;\n }\n break;\n }\n case 'M':\n {\n var month = void 0;\n if (newDateValue.getMonth().toString().length < 2 && !this.isPersist()) {\n month = (this.isMonthPart ? (newDateValue.getMonth() + 1) * 10 : 0) + parseInt(newVal[start - 1], 10);\n }\n else {\n month = parseInt(newVal[start - 1], 10);\n }\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n this.isMonthZero = (newVal[start - 1] === '0');\n if (!isNaN(month)) {\n while (month > 12) {\n month = parseInt(month.toString().slice(1), 10);\n }\n if (month >= 1) {\n newDateValue.setMonth(month - 1);\n if (month >= 10 || month === 1) {\n if (this.isLeadingZero && month === 1) {\n this.isNavigate = month.toString().length === 1;\n this.isLeadingZero = false;\n }\n else {\n this.isNavigate = month.toString().length === 2;\n }\n }\n else {\n this.isNavigate = month.toString().length === 1;\n }\n if (newDateValue.getMonth() !== month - 1) {\n newDateValue.setDate(1);\n newDateValue.setMonth(month - 1);\n }\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isMonthPart = true;\n this.monthTypeCount = this.monthTypeCount + 1;\n this.isLeadingZero = false;\n }\n else {\n newDateValue.setMonth(0);\n this.isLeadingZero = true;\n this.isMonthPart = false;\n this.monthTypeCount = this.isMonthZero ? this.monthTypeCount + 1 : this.monthTypeCount;\n }\n }\n else {\n var monthString = (this.getCulturedValue('months[stand-alone].wide'));\n var monthValue = Object.keys(monthString);\n this.monthCharacter += newVal[start - 1].toLowerCase();\n while (this.monthCharacter.length > 0) {\n var i = 1;\n for (var _i = 0, monthValue_1 = monthValue; _i < monthValue_1.length; _i++) {\n var months = monthValue_1[_i];\n if (monthString[i].toLowerCase().indexOf(this.monthCharacter) === 0) {\n newDateValue.setMonth(i - 1);\n this.isMonthPart = true;\n this.maskDateValue = newDateValue;\n return;\n }\n i++;\n }\n this.monthCharacter = this.monthCharacter.substring(1, this.monthCharacter.length);\n }\n }\n break;\n }\n case 'y':\n {\n var year = (this.isYearPart && (newDateValue.getFullYear().toString().length < 4\n && !this.isShortYear) ? newDateValue.getFullYear() * 10 : 0) + parseInt(newVal[start - 1], 10);\n var yearValue = (this.dateformat.match(/y/g) || []).length;\n yearValue = yearValue !== 2 ? 4 : yearValue;\n this.isShortYear = false;\n this.isYearZero = (newVal[start - 1] === '0');\n if (isNaN(year)) {\n return;\n }\n while (year > 9999) {\n year = parseInt(year.toString().slice(1), 10);\n }\n if (year < 1) {\n this.isYearPart = false;\n }\n else {\n newDateValue.setFullYear(year);\n if (year.toString().length === yearValue) {\n this.isNavigate = true;\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isYearPart = true;\n }\n break;\n }\n case 'h':\n this.hour = (this.isHourPart && (newDateValue.getHours() % 12 || 12).toString().length < 2\n && !this.isPersist() ? (newDateValue.getHours() % 12 || 12) * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n while (this.hour > 12) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(Math.floor(newDateValue.getHours() / 12) * 12 + (this.hour % 12));\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'H':\n this.hour = (this.isHourPart && newDateValue.getHours().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getHours() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n for (var i = 0; this.hour > 23; i++) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(this.hour);\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'm':\n {\n var minutes = (this.isMinutePart && newDateValue.getMinutes().toString().length < 2\n && !this.isPersist() ? newDateValue.getMinutes() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(minutes)) {\n return;\n }\n for (var i = 0; minutes > 59; i++) {\n minutes = parseInt(minutes.toString().slice(1), 10);\n }\n newDateValue.setMinutes(minutes);\n this.isNavigate = minutes.toString().length === 2;\n this.isMinutePart = true;\n this.minuteTypeCount = this.minuteTypeCount + 1;\n break;\n }\n case 's':\n {\n var seconds = (this.isSecondsPart && newDateValue.getSeconds().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getSeconds() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(seconds)) {\n return;\n }\n for (var i = 0; seconds > 59; i++) {\n seconds = parseInt(seconds.toString().slice(1), 10);\n }\n newDateValue.setSeconds(seconds);\n this.isNavigate = seconds.toString().length === 2;\n this.isSecondsPart = true;\n this.secondTypeCount = this.secondTypeCount + 1;\n break;\n }\n case 'a':\n {\n this.periodCharacter += newVal[start - 1].toLowerCase();\n var periodString = (this.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n for (var i = 0; this.periodCharacter.length > 0; i++) {\n if ((periodString[periodkeys[0]].toLowerCase().indexOf(this.periodCharacter) === 0\n && newDateValue.getHours() >= 12) || (periodString[periodkeys[1]].toLowerCase().\n indexOf(this.periodCharacter) === 0 && newDateValue.getHours() < 12)) {\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n this.maskDateValue = newDateValue;\n }\n this.periodCharacter = this.periodCharacter.substring(1, this.periodCharacter.length);\n }\n break;\n }\n default:\n break;\n }\n this.maskDateValue = newDateValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MaskedDateTime.prototype.formatCheck = function () {\n var proxy = null || this;\n function formatValueSpecifier(formattext) {\n var result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysAbbreviated = proxy.getCulturedValue('days[stand-alone].abbreviated');\n var dayKeyAbbreviated = Object.keys(daysAbbreviated);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysWide = (proxy.getCulturedValue('days[stand-alone].wide'));\n var dayKeyWide = Object.keys(daysWide);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysNarrow = (proxy.getCulturedValue('days[stand-alone].narrow'));\n var dayKeyNarrow = Object.keys(daysNarrow);\n var monthAbbreviated = (proxy.getCulturedValue('months[stand-alone].abbreviated'));\n var monthWide = (proxy.getCulturedValue('months[stand-alone].wide'));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (proxy.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n var milliseconds;\n var dateOptions;\n switch (formattext) {\n case 'ddd':\n case 'dddd':\n case 'd':\n result = proxy.isDayPart ? proxy.maskDateValue.getDate().toString() : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'dd':\n result = proxy.isDayPart ? proxy.roundOff(proxy.maskDateValue.getDate(), 2) : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysNarrow[dayKeyNarrow[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'M':\n result = proxy.isMonthPart ? (proxy.maskDateValue.getMonth() + 1).toString() : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MM':\n result = proxy.isMonthPart ? proxy.roundOff(proxy.maskDateValue.getMonth() + 1, 2) : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MMM':\n result = proxy.isMonthPart ? monthAbbreviated[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'MMMM':\n result = proxy.isMonthPart ? monthWide[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'yy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear() % 100, 2) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'y':\n case 'yyy':\n case 'yyyy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear(), 4) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'h':\n result = proxy.isHourPart ? (proxy.maskDateValue.getHours() % 12 || 12).toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'hh':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours() % 12 || 12, 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'H':\n result = proxy.isHourPart ? proxy.maskDateValue.getHours().toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'HH':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours(), 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'm':\n result = proxy.isMinutePart ? proxy.maskDateValue.getMinutes().toString() : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 'mm':\n result = proxy.isMinutePart ? proxy.roundOff(proxy.maskDateValue.getMinutes(), 2) : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 's':\n result = proxy.isSecondsPart ? proxy.maskDateValue.getSeconds().toString() : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'ss':\n result = proxy.isSecondsPart ? proxy.roundOff(proxy.maskDateValue.getSeconds(), 2) : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'f':\n result = Math.floor(proxy.maskDateValue.getMilliseconds() / 100).toString();\n break;\n case 'ff':\n milliseconds = proxy.maskDateValue.getMilliseconds();\n if (proxy.maskDateValue.getMilliseconds() > 99) {\n milliseconds = Math.floor(proxy.maskDateValue.getMilliseconds() / 10);\n }\n result = proxy.roundOff(milliseconds, 2);\n break;\n case 'fff':\n result = proxy.roundOff(proxy.maskDateValue.getMilliseconds(), 3);\n break;\n case 'a':\n case 'aa':\n result = proxy.maskDateValue.getHours() < 12 ? periodString['am'] : periodString['pm'];\n break;\n case 'z':\n case 'zz':\n case 'zzz':\n case 'zzzz':\n dateOptions = {\n format: formattext,\n type: 'dateTime', skeleton: 'yMd', calendar: proxy.parent.calendarMode\n };\n result = proxy.parent.globalize.formatDate(proxy.maskDateValue, dateOptions);\n break;\n }\n result = result !== undefined ? result : formattext.slice(1, formattext.length - 1);\n if (proxy.isHiddenMask) {\n var hiddenChar = '';\n for (var i = 0; i < result.length; i++) {\n hiddenChar += formattext[0];\n }\n return hiddenChar;\n }\n else {\n return result;\n }\n }\n return formatValueSpecifier;\n };\n MaskedDateTime.prototype.maskInputHandler = function () {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.differenceCheck();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isDateZero = this.isMonthZero = this.isYearZero = false;\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {\n var isbackward = this.isNavigate ? false : true;\n this.isNavigate = this.isDeletion = false;\n this.navigateSelection(isbackward);\n }\n if (this.isDeleteKey) {\n this.isDeletion = false;\n }\n this.isDeleteKey = false;\n };\n MaskedDateTime.prototype.navigateSelection = function (isbackward) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var formatIndex = isbackward ? start - 1 : end;\n this.navigated = true;\n while (formatIndex < this.hiddenMask.length && formatIndex >= 0) {\n if (this.validCharacters.indexOf(this.hiddenMask[formatIndex]) >= 0) {\n this.setSelection(this.hiddenMask[formatIndex]);\n break;\n }\n formatIndex = formatIndex + (isbackward ? -1 : 1);\n }\n };\n MaskedDateTime.prototype.roundOff = function (val, count) {\n var valueText = val.toString();\n var length = count - valueText.length;\n var result = '';\n for (var i = 0; i < length; i++) {\n result += '0';\n }\n return result + valueText;\n };\n MaskedDateTime.prototype.zeroCheck = function (isZero, isDayPart, resultValue) {\n var result = resultValue;\n if (isZero && !isDayPart) {\n result = '0';\n }\n return result;\n };\n MaskedDateTime.prototype.handleDeletion = function (format, isSegment) {\n switch (format) {\n case 'd':\n this.isDayPart = isSegment;\n break;\n case 'M':\n this.isMonthPart = isSegment;\n if (!isSegment) {\n this.maskDateValue.setMonth(0);\n this.monthCharacter = '';\n }\n break;\n case 'y':\n this.isYearPart = isSegment;\n break;\n case 'H':\n case 'h':\n this.isHourPart = isSegment;\n if (!isSegment) {\n this.periodCharacter = '';\n }\n break;\n case 'm':\n this.isMinutePart = isSegment;\n break;\n case 's':\n this.isSecondsPart = isSegment;\n break;\n default:\n return false;\n }\n return true;\n };\n MaskedDateTime.prototype.dateAlteration = function (isDecrement) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n else {\n return;\n }\n var newDateValue = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n var incrementValue = isDecrement ? -1 : 1;\n switch (formatText) {\n case 'd':\n newDateValue.setDate(newDateValue.getDate() + incrementValue);\n break;\n case 'M':\n {\n var newMonth = newDateValue.getMonth() + incrementValue;\n newDateValue.setDate(1);\n newDateValue.setMonth(newMonth);\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n break;\n }\n case 'y':\n newDateValue.setFullYear(newDateValue.getFullYear() + incrementValue);\n break;\n case 'H':\n case 'h':\n newDateValue.setHours(newDateValue.getHours() + incrementValue);\n break;\n case 'm':\n newDateValue.setMinutes(newDateValue.getMinutes() + incrementValue);\n break;\n case 's':\n newDateValue.setSeconds(newDateValue.getSeconds() + incrementValue);\n break;\n case 'a':\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n this.maskDateValue = newDateValue.getFullYear() > 0 ? newDateValue : this.maskDateValue;\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n this.handleDeletion(this.hiddenMask[start], true);\n }\n };\n MaskedDateTime.prototype.getCulturedValue = function (format) {\n var locale = this.parent.locale;\n var result;\n if (locale === 'en' || locale === 'en-US') {\n result = getValue(format, getDefaultDateObject());\n }\n else {\n result = getValue('main.' + '' + locale + ('.dates.calendars.gregorian.' + format), cldrData);\n }\n return result;\n };\n MaskedDateTime.prototype.getCulturedFormat = function () {\n var formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.moduleName === 'datepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.format && this.parent.formatString) {\n formatString = this.parent.formatString;\n }\n }\n if (this.parent.moduleName === 'datetimepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.dateTimeFormat) {\n formatString = this.parent.dateTimeFormat;\n }\n }\n if (this.parent.moduleName === 'timepicker') {\n formatString = this.parent.cldrTimeFormat();\n }\n return formatString;\n };\n MaskedDateTime.prototype.clearHandler = function () {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.updateValue();\n };\n MaskedDateTime.prototype.updateValue = function () {\n this.monthCharacter = this.periodCharacter = '';\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.updateInputValue(inputValue);\n };\n MaskedDateTime.prototype.destroy = function () {\n this.removeEventListener();\n };\n return MaskedDateTime;\n}());\nexport { MaskedDateTime };\n","import * as index from './index';\nindex.Calendar.Inject(index.Islamic);\nindex.DatePicker.Inject(index.Islamic, index.MaskedDateTime);\nindex.TimePicker.Inject(index.MaskedDateTime);\nindex.DateTimePicker.Inject(index.Islamic, index.MaskedDateTime);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","OTHERMONTH","ROOT","CONTENTTABLE","DISABLED","OVERLAY","SELECTED","FOCUSEDDATE","FOCUSEDCELL","CalendarBase","_super","options","element","_this","call","effect","isPopupClicked","isDateSelected","isTodayClicked","preventChange","previousDates","render","rangeValidation","min","max","calendarEleCopy","cloneNode","calendarMode","setSeconds","Date","globalize","Internationalization","locale","isNullOrUndefined","firstDayOfWeek","setProperties","getFirstDayOfWeek","todayDisabled","todayDate","setHours","getModuleName","classList","add","enableRtl","Browser","isDevice","attributes","data-role","tabIndex","hasAttribute","getAttribute","setAttribute","calendarElement","createElement","closest","disabled","enabled","createHeader","createContent","wireEvents","getDefaultKeyConfig","defaultKeyConfigs","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","end","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","validateDate","value","checkDateValue","checkValue","currentDate","setOverlayIndex","popupWrapper","popupElement","modal","index","parseInt","style","zIndex","toString","minMaxUpdate","removeClass","addClass","ariaPrevAttrs","aria-disabled","aria-label","ariaNextAttrs","ariaTitleAttrs","aria-atomic","aria-live","tabIndexAttr","tabindex","headerElement","className","iconContainer","previousIcon","attrs","type","rippleEffect","duration","selector","isCenterRipple","nextIcon","headerTitleElement","appendChild","adjustLongHeaderSize","contentElement","table","class","role","aria-activedescendant","aria-labelledby","id","createContentHeader","createContentBody","showTodayButton","createContentFooter","EventHandler","addContentFocus","removeContentFocus","args","focusedDate","tableBodyElement","querySelector","selectedDate","remove","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","toLowerCase","getValue","getDefaultDateObject","getCultureObjects","cldrData","_i","_a","keys","obj","push","toCapitalize","text","toUpperCase","slice","querySelectorAll","detach","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","innerHTML","start","renderYears","renderDecades","renderMonths","updateFooter","todayElement","textContent","l10","getConstant","minimum","maximum","l10nLocale","today","L10n","footer","contains","todayButtonClick","ref","keyConfig","moduleName","navigateTitle","extend","keyConfigs","keyboardModule","KeyboardEvents","eventName","keyAction","keyActionHandle","bind","dateWireEvents","serverModuleName","e","isCustomDate","currentView","depth","getViewNumber","navigateTo","resetCalendar","renderDayCellArgs","multiSelection","action","split","view","depthValue","levelRestrict","keyboardNavigate","preventDefault","includes","selectDate","focus","contentClick","navigateNext","navigatePrevious","title","firstDay","lastDay","addMonths","addYears","getFullYear","isAngular","inputElement","hide","number","date","isMonthYearRange","addDay","isMinMaxRange","preRender","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","values","isTodayDate","getDate","timezone","currentMonth","getMonth","titleUpdate","getHours","getMinutes","getSeconds","getMilliseconds","getDay","setStartDate","day","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","skeleton","parseDate","formatDate","tdEle","dayCell","dayLink","format","isDisabled","isOutOfRange","argument","renderDayCellEvent","argsDate","localDateString","tempDateString","splice","otherMnthBool","disabledCls","clickHandler","currentTarget","getDateVal","tempValue","formatOptions","calendar","innerText","copyValues","formatOptions_1","indexOf","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","month","localMonth","localYr","startYr","setFullYear","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","year","valueOf","getUniqueID","aria-selected","collection","lastDate","timeOffset","Math","abs","getTimezoneOffset","findLastDay","isNaN","elements","count","classNm","trEle","row","children","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","requiredModules","modules","member","name","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","prop","validateValues","checkView","setLocale","undefined","skipIndex","tempValueString","minFormatOption","minString","maxFormatOption","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","destroy","removeAttribute","todayButtonEvent","stringVal","previous","islamicPrevious","next","islamicNext","ld","gregorianFormat","islamicFormat","ceil","time","tzOffset","getTime","tzOffsetDiff","setTime","getMaxDays","dateString","node","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","dates","previousValue","checkPrevious","trigger","navigatedEvent","navigatedArgs","event","compare","startDate","endDate","modifier","result","array","concat","column","findNextTD","rangeValue","filter","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Property","Event","NotifyPropertyChanges","Component","Calendar","throwError","isMultiSelection","tempValues","limit","copyDate","previousValues","setEnable","setClass","cssClass","form","formResetHandler","setTimeZone","serverTimezoneOffset","renderComplete","enable","newCssClass","oldCssClass","replace","trim","isDayLightSaving","secondOffset","firstOffset","offsetValue","timeZoneDiff","changedArgs","generateTodayVal","setMinutes","setMilliseconds","changeHandler","triggerChange","previousDate","previousDateTime","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","update","tempDate","addDate","tempDates","removeDate","setTodayDate","changeEvent","isInteracted","Number","NaN","Islamic","instance","calendarInstance","islamicTitleUpdate","islamicInValue","gregorianObject","islamicDayCell","prevMonthCompare","islamicCompareMonth","nextMonthCompare","prevYearCompare","hijriCompareYear","nextYearCompare","gregorianValue","HijriParser","prevDecadeCompare","hijriCompareDecade","nextDecadeCompare","nextIconClicked","previousIconClicked","islamicDate_1","String","fromCharCode","charCodeAt","splityear","startHeaderYear","endHeaderYear","round","rowCount","year_1","hijriStart","hijriEnd","islamicCompare","getHijriDate","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isIconClicked","isDynamicValueChanged","isFocused","isBlur","isKeyAction","datepickerOptions","initialize","bindEvents","floatLabelType","Input","calculateWidth","inputWrapper","container","buttons","getElementsByClassName","updateInput","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","inputValueCopy","ariaAttrs","aria-expanded","autocomplete","autocorrect","autocapitalize","spellcheck","aria-invalid","l10n","fullScreenMode","updatedCssClassValues","isBindClearAction","bindClearAction","properties","showClearButton","INPUTWRAPPER","setWidth","width","addAttributes","isDynamic","isCalendar","disabledDates","strictMode","minMaxUpdates","dateValue","tempFormat","formatString","dateTimeFormat","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","valueDate","valueString","invalid","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","keyboardModules","inputKeyActionHandle","code","popupObj","unBindEvents","tagName","restoreValue","stopPropagation","bindClearEvent","clear","clearedArgs","popupUpdate","keyupEvent","document","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","show","htmlAttributes","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","setCssClass","calendarKeyActionHandle","selectionStart","selectionEnd","focusArguments","model","openOnFocus","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","firstElementChild","documentHandler","parentElement","focusOut","clickedView","length_1","defaultAction","targetdate","pattern","charPattern","dateOptions","modifiedValue","match","toLocaleUpperCase","createCalendar","modelHeader","body","display","Popup","content","relateTo","position","X","Y","offsetY","targetType","collision","open","iconRight","window","getComputedStyle","marginRight","touchModule","Touch","swipe","CalendarSwipeHandler","TouchStartHandler","close","preventArgs","setAriaAttributes","targetExitViewport","direction","swipeDirection","touchStart","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","modelCloseIcon","modelCloseHandler","modelTodayButton","insertBefore","selectCalendar","formatUnit","prevent_1","outOfRange","mobilePopupWrapper","popup","cancel","appendTo","eventArgs","refreshPosition","openAnimation","Animation","dlgOverlay","prevent_2","closeEventCallback","prevent","outerHTML","focusIn","triggerEvent","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","validationAttribute","checkHtmlAttributes","altDownArrow","escape","enter","shiftTab","tab","nameAttribute","attribute","attr","checkFormat","skeletonString","dynamic","attributes_1","valueCopy","previousValCopy","renderDayCell","dateIdString","inputVal","aria-owns","aria-controls","isDisabledDate","setPlaceholder","setReadonly","setEnabled","setEnableRtl","setClearButton","removeFloating","addFloating","hour","minute","second","dayOfTheWeek","LEFTCALENDER","RIGHTCALENDER","ACTIVE","STARTDATE","ENDDATE","RANGEHOVER","CALENDAR","FOCUSDATE","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","HOVER","wrapperAttr","Presets","apply","ChildProperty","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","liCollections","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","dateRangeOptions","startValue","endValue","setModelValue","setDataAttribute","keyInputConfigs","defaultConstant","startLabel","endLabel","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","matches","angularTag","cloneElement","checkInvalidRange","rangeArray","separator","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","updateValue","merge","processPresets","setRangeAllowEdit","pro","firstHiddenChild","secondHiddenChild","updateClearIconState","input","updatedClassValue","dateRangeStyle","cssNewClass","cssOldClass","isUndefined","presets","label","range","activeIndex","rangeIconHandler","inputKeyboardModule","updateHiddenInput","valueType","clearRange","previousStartValue","previousEndValue","startCopy","endCopy","applyButton","removeSelection","targetElement","isPopupOpen","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","createPopup","adjustLongHeaderWidth","isPreset","createPresets","listRippleEffect","renderPopup","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","clearEvents","updateNavIcons","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","updateDeviceCalendar","deviceNavigation","deviceCalendar","getElementsByTagName","removeClassDisabled","updateMinMaxDays","selectableDates","getStartEndDate","prevStartVal","prevEndVal","refreshControl","isEnd","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","ele","isRemoveFocus","leftCalCurrentDate","rightCalCurrentDate","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","tabKeyValidation","firstCellToFocus","focusAbleEle","focusEleID","currentFirstDay","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","cancelButton","calendarNavigation","checkMinMaxDays","presetHeight","calendarPos","rightHeader","leftHeader","isRightMonth","isLeftMonth","isRightYear","isLeftYear","isRightDecade","isLeftDecade","tdCells","tdCells_1","cell","hoverSelection","isDate","focusedDate_1","eleDate","isSameMonth","isSameYear","currentElement","tdCells_2","isDisabledCell","startDateValue","isSameStartEnd","startVal","endVal","isSame","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","removeTimeValueFromDate","otherMonthSelect","isStartDate","sameDate","tdCell","y","m","firstMonth","lastMonth","endEle","endEle_1","ele_1","endEle_2","ele_2","removeSelectedAttributes","tdCells_4","tdCells_5","startMonth","startValueSelected","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","customDate","createRangeHeader","labelContainer","endBtn","startBtn","Button","changeIcon","disableInput","validateMinMax","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameDecade","endYear","startMonthCurrentDate","selectNextMonth","selectNextYear","selectNextDecade","decyr","selectStartMonth","calendarContainer","prevIcon","prepend","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","getCalendarView","controlContainer","headerContainer","modelHeaderIconWrapper","modelRangeCloseHandler","modelApplyButton","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","height","getBoundingClientRect","deviceHeaderUpdate","isValueChanged","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","item","li","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","listTag","ListBase","createList","aria-hidden","customElement","wireListEvents","modelWrapper","modelTitleSpan","presetContent","unWireListEvents","popupWidth","offsetX","iconRangeRight","cssFloat","touchRangeModule","dateRangeSwipeHandler","touchStartRangeHandler","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","popupEle","innerHeight","touchRangeStart","keyCode","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","nextElementSibling","previousElementSibling","listHeight","hover","active","nextEle","offsetTop","liHeight","scrollTop","updatedCssClassValue","setEleWidth","formatOption","startinvalue","endinvalue","startString","endString","startObject","endObject","invalidobject","getstringvalue","toLocaleDateString","stringValue","formatOpt","basISOString","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","evt","navigate","getSelectedRange","mobileRangePopupWrap","refreshChange","enableInput","clearModelvalue","setMinMaxDays","getStartEndValue","Collection","DAY","MONTH","YEAR","FOCUS","wrapperAttributes","TimePickerBase","createListItems","createdEl","timeFormat","step","interval","listItems","timeCollections","list","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","keyConfigure","down","up","left","right","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","checkErrorState","anchor","inputEleValue","getDateObject","clientTimeZoneDiff","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","aria-autocomplete","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","append","listWrapper","addSelection","getPopupHeight","popupHeight","rippleModel","containerStyle","setPopupWidth","visibility","maxHeight","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setSelectionRange","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","parseFloat","setScrollTo","findScrollTop","items","initialTime","scrollTime","getText","cldrTimeFormat","cldrDateFormat","getCultureDateObject","dateToNumeric","getExactDateTime","compareFormatChange","updatePlaceHolder","popupHandler","closePopup","mouseDownHandler","curPos","cursorDetails","focusSelection","regex","RegExp","isSeparator","keyHandler","objToString","createMask","previousState","setSelection","delay","animModel","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","top","checkValueChange","isNavigation","valueProcess","prevValue","currentLi","setHover","isValidLI","removeHover","scrollHandler","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","setZIndex","dataBind","getTextFormat","strArray","validateValue","newval","value_1","findNextElement","textVal","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","nextItem","isUpdate","hoveredItem","getHoverItem","setActiveClass","timeParse","listBaseOptions","itemCreated","isIE","info","getProperty","popupAlignment","timePopupElement","formatValues","setStyleAttribute","HOUR","MINUTE","SECOND","MILLISECOND","DateTimePicker","scrollInvoked","formatRegex","dateFormatString","dateTimeOptions","focusHandler","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","appendSpan","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","toggle","listCreation","dateObject","TimePopupFormat","startTime","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","setInputValue","nextElement","lineHeight","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","method","hours","milliseconds","tempStartValue","tempMin","formatValueSpecifier","formattext","formatCount","proxy","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","MaskedDateTime","parent","mask","hiddenMask","validCharacters","isDayPart","isMonthPart","isYearPart","isHourPart","isMinutePart","isSecondsPart","isMilliSecondsPart","monthCharacter","periodCharacter","isHiddenMask","isComplete","navigated","isDeletion","isShortYear","isDeleteKey","isDateZero","isMonthZero","isYearZero","isLeadingZero","dayTypeCount","monthTypeCount","hourTypeCount","minuteTypeCount","secondTypeCount","dateformat","getCulturedFormat","maskDateValue","removeEventListener","addEventListener","isDestroyed","on","validCharacterCheck","maskInputHandler","maskKeydownHandler","off","maskPlaceholder","getCUltureMaskFormat","formatCheck","previousHiddenMask","setDynamicValue","objectString","j","validChar","altKey","ctrlKey","navigateSelection","formatText","dateAlteration","isPersist","differenceCheck","previousVal","substring","newVal","newDateValue","handleDeletion","monthString","getCulturedValue","monthValue","monthValue_1","previousMaxDate","currentMaxDate","yearValue","floor","periodString","periodkeys","daysAbbreviated","dayKeyAbbreviated","daysWide","dayKeyWide","daysNarrow","dayKeyNarrow","monthAbbreviated","monthWide","zeroCheck","roundOff","hiddenChar","isbackward","formatIndex","valueText","isZero","resultValue","isSegment","isDecrement","incrementValue","newMonth","Inject","index.Islamic","index.MaskedDateTime"],"mappings":"wEAAA,IAAIA,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAW5DM,EAAa,gBAEbC,EAAO,aAKPC,EAAe,2BAUfC,EAAW,aACXC,EAAU,YAGVC,EAAW,aACXC,EAAc,iBACdC,EAAc,iBAoBdC,EAA8B,SAAUC,GAUxC,QAASD,GAAaE,EAASC,GAC3B,GAAIC,GAAQH,EAAOI,KAAK/B,KAAM4B,EAASC,IAAY7B,IAOnD,OANA8B,GAAME,OAAS,GACfF,EAAMG,gBAAiB,EACvBH,EAAMI,gBAAiB,EACvBJ,EAAMK,gBAAiB,EACvBL,EAAMM,eAAgB,EACtBN,EAAMO,eAAgB,EACfP,EAy/DX,MA1gEAzC,GAAUqC,EAAcC,GAyBxBD,EAAaxB,UAAUoC,OAAS,WAC5BtC,KAAKuC,gBAAgBvC,KAAKwC,IAAKxC,KAAKyC,KACpCzC,KAAK0C,gBAAkB1C,KAAK6B,QAAQc,WAAU,GACpB,YAAtB3C,KAAK4C,gBACC5C,KAAKwC,IAAIK,WAAW,KAAS,GAAIC,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG,KAC1D9C,KAAKwC,IAAM,GAAIM,MAAK,KAAM,EAAG,MAE5B9C,KAAKyC,MAAS,GAAIK,MAAK,KAAM,GAAI,MAClC9C,KAAKyC,IAAM,GAAIK,MAAK,KAAM,GAAI,MAGtC9C,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,SAC3CC,oBAAkBlD,KAAKmD,iBAAmBnD,KAAKmD,eAAiB,GAAKnD,KAAKmD,eAAiB,IAC3FnD,KAAKoD,eAAgBD,eAAgBnD,KAAK+C,UAAUM,sBAAuB,GAE/ErD,KAAKsD,eAAgB,EACrBtD,KAAKuD,UAAY,GAAIT,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IAC1B,aAAzBxD,KAAKyD,iBACLzD,KAAK6B,QAAQ6B,UAAUC,IAAIxC,GACvBnB,KAAK4D,WACL5D,KAAK6B,QAAQ6B,UAAUC,IApF7B,SAsFME,UAAQC,UACR9D,KAAK6B,QAAQ6B,UAAUC,IAzF1B,YA2FDI,aAAW/D,KAAK6B,SACZmC,YAAa,aAEjBhE,KAAKiE,SAAWjE,KAAK6B,QAAQqC,aAAa,YAAclE,KAAK6B,QAAQsC,aAAa,YAAc,IAChGnE,KAAK6B,QAAQuC,aAAa,WAAYpE,KAAKiE,YAG3CjE,KAAKqE,gBAAkBrE,KAAKsE,cAAc,OAC1CtE,KAAKqE,gBAAgBX,UAAUC,IAAIxC,GAC/BnB,KAAK4D,WACL5D,KAAKqE,gBAAgBX,UAAUC,IAnGrC,SAqGME,UAAQC,UACR9D,KAAKqE,gBAAgBX,UAAUC,IAxGlC,YA0GDI,aAAW/D,KAAKqE,iBACZL,YAAa,eAGhBd,oBAAkBqB,UAAQvE,KAAK6B,QAAS,cAAgB0C,UAAQvE,KAAK6B,QAAS,YAAY2C,WAC3FxE,KAAKyE,SAAU,GAEnBzE,KAAK0E,eACL1E,KAAK2E,gBACL3E,KAAK4E,cAETlD,EAAaxB,UAAUqC,gBAAkB,SAAUC,EAAKC,GAChDS,oBAAkBV,IAClBxC,KAAKoD,eAAgBZ,IAAK,GAAIM,MAAK,KAAM,EAAG,KAAM,GAElDI,oBAAkBT,IAClBzC,KAAKoD,eAAgBX,IAAK,GAAIK,MAAK,KAAM,GAAI,MAAO,IAG5DpB,EAAaxB,UAAU2E,oBAAsB,WAsBzC,MArBA7E,MAAK8E,mBACDC,UAAW,UACXC,YAAa,UACbC,SAAU,YACVC,OAAQ,UACRC,SAAU,YACVC,UAAW,aACXC,OAAQ,QACRC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,SAAU,WACVC,YAAa,eACbC,cAAe,iBACfC,YAAa,YACbC,WAAY,WACZC,WAAY,cACZC,SAAU,QACVC,cAAe,iBACfC,aAAc,iBAEXjG,KAAK8E,mBAEhBpD,EAAaxB,UAAUgG,aAAe,SAAUC,GAC5CnG,KAAKoD,eAAgBZ,IAAKxC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,SAAU,GACtFxC,KAAKoD,eAAgBX,IAAKzC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKyC,SAAU,GACtFzC,KAAKsG,YAActG,KAAKsG,YAActG,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAC1FN,oBAAkBiD,IAAUnG,KAAKwC,KAAOxC,KAAKyC,KAAO0D,GAASnG,KAAKwC,KAAO2D,GAASnG,KAAKyC,MACxFzC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWF,MAGpDzE,EAAaxB,UAAUqG,gBAAkB,SAAUC,EAAcC,EAAcC,EAAO5C,GAClF,GAAIA,IAAaZ,oBAAkBuD,KAAkBvD,oBAAkBwD,KAAWxD,oBAAkBsD,GAAe,CAC/G,GAAIG,GAAQC,SAASH,EAAaI,MAAMC,OAAQ,IAAMF,SAASH,EAAaI,MAAMC,OAAQ,IAAM,GAChGJ,GAAMG,MAAMC,QAAUH,EAAQ,GAAGI,WACjCP,EAAaK,MAAMC,OAASH,EAAMI,aAG1CrF,EAAaxB,UAAU8G,aAAe,SAAUb,IACrCnG,KAAKwC,MAAQxC,KAAKyC,IAKrBwE,eAAajH,KAAK6B,SAAUP,IAJ5BtB,KAAKoD,eAAgBZ,IAAKxC,KAAKwC,MAAO,GACtC0E,YAAUlH,KAAK6B,SAAUP,IAK7BtB,KAAKwC,IAAMU,oBAAkBlD,KAAKwC,QAAWxC,KAAKwC,IAAOxC,KAAKwC,IAAM,GAAIM,MAAK,KAAM,EAAG,GAAK9C,KAAKwC,IAChGxC,KAAKyC,IAAMS,oBAAkBlD,KAAKyC,QAAWzC,KAAKyC,IAAOzC,KAAKyC,IAAM,GAAIK,MAAK,KAAM,GAAI,IAAM9C,KAAKyC,KAC7FzC,KAAKwC,MAAQxC,KAAKyC,KAAO0D,IAAUA,IAAUnG,KAAKyC,MAAQ0D,IAAUnG,KAAKwC,IAC1ExC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWF,KAGvCnG,KAAKwC,MAAQxC,KAAKyC,MAAQ0D,IAAUnG,KAAKsG,aAAetG,KAAKyC,IAC9DzC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKyC,OAG5CzC,KAAKsG,aAAetG,KAAKwC,MAC1BxC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,QAKjEd,EAAaxB,UAAUwE,aAAe,WAClC,GAAIyC,IACAC,gBAAiB,QACjBC,aAAc,kBAEdC,GACAF,gBAAiB,QACjBC,aAAc,cAEdE,GACAC,cAAe,OAAQC,YAAa,YAAaJ,aAAc,SAE/DK,GAAiBC,SAAY,IACjC3H,MAAK4H,cAAgB5H,KAAKsE,cAAc,OAASuD,UAxM5C,YAyML,IAAIC,GAAgB9H,KAAKsE,cAAc,OAASuD,UA7LpC,oBA8LZ7H,MAAK+H,aAAe/H,KAAKsE,cAAc,UAAYuD,UAlM5C,SAkMsEG,OAASC,KAAM,YAC5FC,eAAalI,KAAK+H,cACdI,SAAU,IACVC,SAAU,UACVC,gBAAgB,IAEpBtE,aAAW/D,KAAK+H,aAAcZ,GAC9BpD,aAAW/D,KAAK+H,aAAcL,GAC9B1H,KAAKsI,SAAWtI,KAAKsE,cAAc,UAAYuD,UAzMxC,SAyMkEG,OAASC,KAAM,YACxFC,eAAalI,KAAKsI,UACdF,SAAU,UACVD,SAAU,IACVE,gBAAgB,IAES,oBAAzBrI,KAAKyD,kBACLM,aAAW/D,KAAK+H,cAAgB9D,SAAU,OAC1CF,aAAW/D,KAAKsI,UAAYrE,SAAU,QAE1CF,aAAW/D,KAAKsI,SAAUhB,GAC1BvD,aAAW/D,KAAKsI,SAAUZ,GAC1B1H,KAAKuI,mBAAqBvI,KAAKsE,cAAc,OAASuD,UAAW,kBACjE9D,aAAW/D,KAAKuI,mBAAoBhB,GACpCxD,aAAW/D,KAAKuI,mBAAoBb,GACpC1H,KAAK4H,cAAcY,YAAYxI,KAAKuI,oBACpCvI,KAAK+H,aAAaS,YAAYxI,KAAKsE,cAAc,QAAUuD,UAAW,8BACtE7H,KAAKsI,SAASE,YAAYxI,KAAKsE,cAAc,QAAUuD,UAAW,+BAClEC,EAAcU,YAAYxI,KAAK+H,cAC/BD,EAAcU,YAAYxI,KAAKsI,UAC/BtI,KAAK4H,cAAcY,YAAYV,GACF,aAAzB9H,KAAKyD,gBACLzD,KAAK6B,QAAQ2G,YAAYxI,KAAK4H,eAG9B5H,KAAKqE,gBAAgBmE,YAAYxI,KAAK4H,eAE1C5H,KAAKyI,wBAET/G,EAAaxB,UAAUyE,cAAgB,WACnC3E,KAAK0I,eAAiB1I,KAAKsE,cAAc,OAASuD,UA9O5C,cA+ON7H,KAAK2I,MAAQ3I,KAAKsE,cAAc,SAAW0D,OAASY,MAASxH,EAAc6C,SAAY,IAAK4E,KAAQ,OAAQC,wBAAyB,GAAIC,kBAAmB/I,KAAK6B,QAAQmH,MAC5I,aAAzBhJ,KAAKyD,gBACLzD,KAAK6B,QAAQ2G,YAAYxI,KAAK0I,gBAG9B1I,KAAKqE,gBAAgBmE,YAAYxI,KAAK0I,gBAE1C1I,KAAK0I,eAAeF,YAAYxI,KAAK2I,OACrC3I,KAAKiJ,sBACLjJ,KAAKkJ,oBACDlJ,KAAKmJ,iBACLnJ,KAAKoJ,sBAEoB,oBAAzBpJ,KAAKyD,kBACL4F,eAAa1F,IAAI3D,KAAK2I,MAAO,QAAS3I,KAAKsJ,gBAAiBtJ,MAC5DqJ,eAAa1F,IAAI3D,KAAK2I,MAAO,OAAQ3I,KAAKuJ,mBAAoBvJ,QAGtE0B,EAAaxB,UAAUoJ,gBAAkB,SAAUE,GAC/C,GAAIC,GAAczJ,KAAK0J,iBAAiBC,cAAc,wBAClDC,EAAe5J,KAAK0J,iBAAiBC,cAAc,mBAClDzG,qBAAkB0G,GAGb1G,oBAAkBuG,IACxBA,EAAY/F,UAAUC,IAAIlC,GAH1BmI,EAAalG,UAAUC,IAAIlC,IAMnCC,EAAaxB,UAAUqJ,mBAAqB,SAAUC,GAClD,GAAIC,GAAevG,oBAAkBlD,KAAK0J,kBAAkF,KAA9D1J,KAAK0J,iBAAiBC,cAAc,wBAC9FC,EAAgB1G,oBAAkBlD,KAAK0J,kBAA8E,KAA1D1J,KAAK0J,iBAAiBC,cAAc,mBAC9FzG,qBAAkB0G,GAGb1G,oBAAkBuG,IACxBA,EAAY/F,UAAUmG,OAAOpI,GAH7BmI,EAAalG,UAAUmG,OAAOpI,IAMtCC,EAAaxB,UAAU4J,iBAAmB,WACtC,GACIC,GADAC,KAEAC,EAAY,oBAAsBjK,KAAKkK,gBAAgBC,aAO3D,IALIJ,EADgB,OAAhB/J,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OAClBmH,WAASH,EAAWI,0BAGpBrK,KAAKsK,kBAAkBC,WAAU,GAAKvK,KAAKiD,SAErDC,oBAAkB6G,GACnB,IAAK,GAAIS,GAAK,EAAGC,EAAKhL,OAAOiL,KAAKX,GAAUS,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC9D,GAAIG,GAAMF,EAAGD,EACbR,GAAcY,KAAKR,WAASO,EAAKZ,IAGzC,MAAOC,IAEXtI,EAAaxB,UAAU2K,aAAe,SAAUC,GAC5C,OAAQ5H,oBAAkB4H,IAASA,EAAKnK,OAASmK,EAAK,GAAGC,cAAgBD,EAAKE,MAAM,GAAKF,GAE7FpJ,EAAaxB,UAAU+I,oBAAsB,WACZ,aAAzBjJ,KAAKyD,gBACAP,oBAAkBlD,KAAK6B,QAAQoJ,iBAAiB,6BAA6B,KAC9EC,SAAOlL,KAAK6B,QAAQoJ,iBAAiB,6BAA6B,IAIjE/H,oBAAkBlD,KAAKqE,gBAAgB4G,iBAAiB,6BAA6B,KACtFC,SAAOlL,KAAKqE,gBAAgB4G,iBAAiB,6BAA6B,GAGlF,IACIE,GAAO,IACPnL,KAAKmD,eAAiB,GAAKnD,KAAKmD,eAAiB,IACjDnD,KAAKoD,eAAgBD,eAAgB,IAAK,GAE9CnD,KAAKoL,iBAAmBpL,KAAKsE,cAAc,SAAWuD,UAnS7C,kBAoSL7H,KAAKqL,aACLF,GAAQ,qDACqB,aAAzBnL,KAAKyD,gBACLyD,YAAUlH,KAAK6B,SAhTd,iBAmTDqF,YAAUlH,KAAKqE,iBAnTd,iBAsTT,IAAIiH,GAAatL,KAAK8J,mBAAmBnJ,OAAS,GAC9CX,KAAK8J,mBAAqB9J,KAAKuL,WAAavL,KAAK8J,mBAAmBnJ,OAAS,GAC7EX,KAAK8J,mBAAsB9J,KAAKmD,gBAAkB,IACtD,KAAKD,oBAAkBoI,GACnB,IAAK,GAAIE,GAAO,EAAGA,GAnBP,EAmB0BA,IAClCL,GAAQ,iBAAmBnL,KAAK6K,aAAaS,EAAWE,IAAS,OAGzEL,GAAO,OAASA,EAAO,QACvBnL,KAAKoL,iBAAiBK,UAAYN,EAClCnL,KAAK2I,MAAMH,YAAYxI,KAAKoL,mBAEhC1J,EAAaxB,UAAUgJ,kBAAoB,WAWvC,OAV6B,aAAzBlJ,KAAKyD,gBACAP,oBAAkBlD,KAAK6B,QAAQoJ,iBAAiB,oBAAoB,KACrEC,SAAOlL,KAAK6B,QAAQoJ,iBAAiB,oBAAoB,IAIxD/H,oBAAkBlD,KAAKqE,gBAAgB4G,iBAAiB,oBAAoB,KAC7EC,SAAOlL,KAAKqE,gBAAgB4G,iBAAiB,oBAAoB,IAGjEjL,KAAK0L,OACT,IAAK,OACD1L,KAAK2L,aACL,MACJ,KAAK,SACD3L,KAAK4L,eACL,MACJ,SACI5L,KAAK6L,iBAGjBnK,EAAaxB,UAAU4L,aAAe,WAClC9L,KAAK+L,aAAaC,YAAchM,KAAKiM,IAAIC,YAAY,SACrDlM,KAAK+L,aAAa3H,aAAa,aAAcpE,KAAKiM,IAAIC,YAAY,UAClElM,KAAK+L,aAAa3H,aAAa,WAAY,MAE/C1C,EAAaxB,UAAUkJ,oBAAsB,WACzC,GAAIpJ,KAAKmJ,gBAAiB,CACtB,GAAIgD,GAAU,GAAIrJ,OAAM9C,KAAKwC,KACzB4J,EAAU,GAAItJ,OAAM9C,KAAKyC,KACzB4J,GAAeC,MAAO,QAC1BtM,MAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKiM,IAAM,GAAIM,QAAKvM,KAAKyD,gBAAiB4I,EAAYrM,KAAKiD,QAC3DjD,KAAK+L,aAAe/L,KAAKsE,cAAc,UAAY0D,OAASa,KAAM,YAClEX,eAAalI,KAAK+L,cAClB/L,KAAK8L,eACL5E,YAAUlH,KAAK+L,eA3VjB,QAPE,UAQD,SAEG,YADJ,WA0VU,GAAIjJ,MAAKqJ,EAAQ3I,SAAS,EAAG,EAAG,EAAG,MAAQxD,KAAKuD,YACnDvD,KAAKuD,YAAc,GAAIT,MAAKsJ,EAAQ5I,SAAS,EAAG,EAAG,EAAG,MAAUxD,KAAmB,eACpFkH,YAAUlH,KAAK+L,cAAe1K,GAElCrB,KAAKwM,OAASxM,KAAKsE,cAAc,OAASuD,UAjWzC,uBAkWD7H,KAAKwM,OAAOhE,YAAYxI,KAAK+L,cACA,aAAzB/L,KAAKyD,iBACLzD,KAAK6B,QAAQ2G,YAAYxI,KAAKwM,QAEL,eAAzBxM,KAAKyD,iBACLzD,KAAKqE,gBAAgBmE,YAAYxI,KAAKwM,QAEb,mBAAzBxM,KAAKyD,iBACLzD,KAAKqE,gBAAgBmE,YAAYxI,KAAKwM,QAErCxM,KAAK+L,aAAarI,UAAU+I,SAASpL,IACtCgI,eAAa1F,IAAI3D,KAAK+L,aAAc,QAAS/L,KAAK0M,iBAAkB1M,QAIhF0B,EAAaxB,UAAU0E,WAAa,SAAUoE,EAAI2D,EAAKC,EAAWC,GAC9DxD,eAAa1F,IAAI3D,KAAKuI,mBAAoB,QAASvI,KAAK8M,cAAe9M,MACvEA,KAAK8E,kBAAoBiI,SAAO/M,KAAK8E,kBAAmB9E,KAAKgN,YAChC,aAAzBhN,KAAKyD,gBACLzD,KAAKiN,eAAiB,GAAIC,kBAAelN,KAAK6B,SAC1CsL,UAAW,UACXC,UAAWpN,KAAKqN,gBAAgBC,KAAKtN,MACrCgN,WAAYhN,KAAK8E,oBAIrB9E,KAAKiN,eAAiB,GAAIC,kBAAelN,KAAKqE,iBAC1C8I,UAAW,UACXC,UAAWpN,KAAKqN,gBAAgBC,KAAKtN,MACrCgN,WAAYhN,KAAK8E,qBAI7BpD,EAAaxB,UAAUqN,eAAiB,SAAUvE,EAAI2D,EAAKC,EAAWC,GAClE7M,KAAK8E,kBAAoB9E,KAAK6E,sBAC9B7E,KAAK8E,kBAAoBiI,SAAO/M,KAAK8E,kBAAmB8H,GACxD5M,KAAKwN,iBAAmBX,GAE5BnL,EAAaxB,UAAUwM,iBAAmB,SAAUe,EAAGtH,EAAOuH,GACtD1N,KAAKmJ,kBACDnJ,KAAK2N,gBAAkB3N,KAAK4N,MAC5B5N,KAAKgC,OAAS,GAGdhC,KAAKgC,OAAS,WAEdhC,KAAK6N,cAAc7N,KAAK0L,QAAU1L,KAAK6N,cAAc7N,KAAK4N,OAC1D5N,KAAK8N,WAAW9N,KAAK4N,MAAO,GAAI9K,MAAK9C,KAAKqG,WAAWF,IAASuH,GAG9D1N,KAAK8N,WAAW,QAAS,GAAIhL,MAAK9C,KAAKqG,WAAWF,IAASuH,KAIvEhM,EAAaxB,UAAU6N,cAAgB,WACnC/N,KAAKqE,iBAAmB6G,SAAOlL,KAAKqE,iBACpCrE,KAAK0J,kBAAoBwB,SAAOlL,KAAK0J,kBACrC1J,KAAK2I,OAASuC,SAAOlL,KAAK2I,OAC1B3I,KAAKoL,kBAAoBF,SAAOlL,KAAKoL,kBACrCpL,KAAKsI,UAAY4C,SAAOlL,KAAKsI,UAC7BtI,KAAK+H,cAAgBmD,SAAOlL,KAAK+H,cACjC/H,KAAKwM,QAAUtB,SAAOlL,KAAKwM,QAC3BxM,KAAK+L,aAAe,KACpB/L,KAAKgO,kBAAoB,KACzBhO,KAAKqE,gBAAkBrE,KAAK0J,iBAAmB1J,KAAKwM,OAASxM,KAAKoL,iBAC9DpL,KAAKsI,SAAWtI,KAAK+H,aAAe/H,KAAK2I,MAAQ,MAEzDjH,EAAaxB,UAAUmN,gBAAkB,SAAUI,EAAGtH,EAAO8H,GACzD,GAA6B,OAAzBjO,KAAKqE,iBAAyC,WAAboJ,EAAES,OAAvC,CAGA,GACItE,GADAH,EAAczJ,KAAK0J,iBAAiBC,cAAc,uBAO9CC,GALJqE,EACK/K,oBAAkBuG,KAAiBtD,IAAUS,SAAS6C,EAAYtF,aAAa,MAAMgK,MAAM,KAAK,GAAI,IAItFnO,KAAK0J,iBAAiBC,cAAc,oBAHpCF,EAOJzJ,KAAK0J,iBAAiBC,cAAc,mBAEvD,IAAIyE,GAAOpO,KAAK6N,cAAc7N,KAAK2N,eAC/BU,EAAarO,KAAK6N,cAAc7N,KAAK4N,OACrCU,EAAiBF,IAASC,GAAcrO,KAAK6N,cAAc7N,KAAK0L,QAAU2C,CAE9E,QADArO,KAAKgC,OAAS,GACNyL,EAAES,QACN,IAAK,WAC4B,oBAAzBlO,KAAKyD,kBAA0CP,oBAAkBuK,EAAEnN,SACnEmN,EAAEnN,OAAOoD,UAAU/C,OAAS,GAAK8M,EAAEnN,OAAOoD,UAAU+I,SAASrL,KAC7DpB,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAClDiL,EAAEe,iBAEN,MACJ,KAAK,YAC4B,oBAAzBxO,KAAKyD,kBAA0CP,oBAAkBuK,EAAEnN,SACnEmN,EAAEnN,OAAOoD,UAAU/C,OAAS,GAAK8M,EAAEnN,OAAOoD,UAAU+I,SAASrL,KAC7DpB,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KACjDiL,EAAEe,iBAEN,MACJ,KAAK,SAC4B,oBAAzBxO,KAAKyD,kBAA0CP,oBAAkBuK,EAAEnN,SACnEmN,EAAEnN,OAAOoD,UAAU/C,OAAS,GAAK8M,EAAEnN,OAAOoD,UAAU+I,SAASrL,KAChD,IAATgN,EACApO,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAGlDxC,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAEtDiL,EAAEe,iBAEN,MACJ,KAAK,WAC4B,oBAAzBxO,KAAKyD,kBAA0CP,oBAAkBuK,EAAEnN,SACnEmN,EAAEnN,OAAOoD,UAAU/C,OAAS,GAAK8M,EAAEnN,OAAOoD,UAAU+I,SAASrL,KAChD,IAATgN,EACApO,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAGjDxC,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAErDiL,EAAEe,iBAEN,MACJ,KAAK,SACD,GAAIf,EAAEnN,SAAWN,KAAKuI,mBAClBvI,KAAK8M,cAAcW,OAElB,IAAIA,EAAEnN,SAAWN,KAAK+H,cAAiB0F,EAAEnN,OAAOuH,UAAU4G,SAASpN,GAGnE,GAAIoM,EAAEnN,SAAWN,KAAKsI,UAAamF,EAAEnN,OAAOuH,UAAU4G,SAASpN,GAG/D,GAAIoM,EAAEnN,SAAWN,KAAK+L,cAAiB0B,EAAEnN,OAAOuH,UAAU4G,SAASpN,GAMnE,CACD,GAAIQ,GAAWqB,oBAAkBuG,GAA6BG,EAAdH,CAChD,KAAKvG,oBAAkBrB,KAAaA,EAAQ6B,UAAU+I,SAASpL,GAC3D,GAAIiN,EAAe,CAEf,GAAI/O,GAAI,GAAIuD,MAAK8D,SAAS,GAAK,EAAUoC,GAAI,GAC7ChJ,MAAK0O,WAAWjB,EAAGlO,KACU,eAAzBS,KAAKyD,iBAA6D,mBAAzBzD,KAAKyD,iBAC9CzD,KAAK6B,QAAQ8M,YAIZlB,GAAEnN,OAAOuH,UAAU4G,SAASpN,IAC7BrB,KAAK4O,aAAa,OAAQR,IAAiBjI,OAlBvDnG,MAAK0M,iBAAiBe,EAAGtH,GACI,eAAzBnG,KAAKyD,iBAA6D,mBAAzBzD,KAAKyD,iBAC9CzD,KAAK6B,QAAQ8M,YALjB3O,MAAK6O,aAAapB,OAHlBzN,MAAK8O,iBAAiBrB,EA6B1B,MACJ,KAAK,YACDzN,KAAK+O,QACLtB,EAAEe,gBACF,MACJ,KAAK,eACItL,oBAAkBuG,IAAiB6E,KAAkBpL,oBAAkB0G,IAAkB0E,IAC1FtO,KAAK4O,aAAa,OAAQR,EAAO3E,GAAeG,EAAezD,GAEnEsH,EAAEe,gBACF,MACJ,KAAK,OACDxO,KAAKsG,YAActG,KAAKgP,SAAShP,KAAKsG,aACtC4E,SAAOlL,KAAK0J,kBACC,IAAT0E,EACApO,KAAK6L,aAAa4B,GAEJ,IAATW,EACLpO,KAAK2L,YAAY8B,GAGjBzN,KAAK4L,cAAc6B,GAEvBA,EAAEe,gBACF,MACJ,KAAK,MACDxO,KAAKsG,YAActG,KAAKiP,QAAQjP,KAAKsG,YAAa8H,GAClDlD,SAAOlL,KAAK0J,kBACC,IAAT0E,EACApO,KAAK6L,aAAa4B,GAEJ,IAATW,EACLpO,KAAK2L,YAAY8B,GAGjBzN,KAAK4L,cAAc6B,GAEvBA,EAAEe,gBACF,MACJ,KAAK,SACDxO,KAAKkP,UAAUlP,KAAKsG,aAAc,GAClCtG,KAAK8N,WAAW,QAAS9N,KAAKsG,aAC9BmH,EAAEe,gBACF,MACJ,KAAK,WACDxO,KAAKkP,UAAUlP,KAAKsG,YAAa,GACjCtG,KAAK8N,WAAW,QAAS9N,KAAKsG,aAC9BmH,EAAEe,gBACF,MACJ,KAAK,cACDxO,KAAKmP,SAASnP,KAAKsG,aAAc,GACjCtG,KAAK8N,WAAW,QAAS9N,KAAKsG,aAC9BmH,EAAEe,gBACF,MACJ,KAAK,gBACDxO,KAAKmP,SAASnP,KAAKsG,YAAa,GAChCtG,KAAK8N,WAAW,QAAS9N,KAAKsG,aAC9BmH,EAAEe,gBACF,MACJ,KAAK,cACDxO,KAAK8N,WAAW,QAAS,GAAIhL,MAAK9C,KAAKsG,YAAY8I,cAAe,EAAG,IACrE3B,EAAEe,gBACF,MACJ,KAAK,aACDxO,KAAK8N,WAAW,QAAS,GAAIhL,MAAK9C,KAAKsG,YAAY8I,cAAe,GAAI,KACtE3B,EAAEe,gBACF,MACJ,KAAK,MAC6B,eAAzBxO,KAAKyD,iBAA6D,mBAAzBzD,KAAKyD,iBAAyCgK,EAAEnN,SAAWN,KAAK+L,eAC1G0B,EAAEe,iBACExO,KAAKqP,UACLrP,KAAKsP,aAAaX,QAGlB3O,KAAK6B,QAAQ8M,QAEjB3O,KAAKuP,OAET,MACJ,KAAK,WAC6B,eAAzBvP,KAAKyD,iBAA6D,mBAAzBzD,KAAKyD,iBAAyCgK,EAAEnN,SAAWN,KAAKuI,qBAC1GkF,EAAEe,iBACFxO,KAAK6B,QAAQ8M,QACb3O,KAAKuP,OAET,MACJ,KAAK,SAC6B,eAAzBvP,KAAKyD,iBAA6D,mBAAzBzD,KAAKyD,iBAA0CgK,EAAEnN,SAAWN,KAAKuI,oBAAsBkF,EAAEnN,SAAWN,KAAK+H,cAAgB0F,EAAEnN,SAAWN,KAAKsI,UAAYmF,EAAEnN,SAAWN,KAAK+L,cACnN/L,KAAKuP,UAKrB7N,EAAaxB,UAAUqO,iBAAmB,SAAUiB,EAAQ7B,EAAaF,EAAGhL,EAAKD,GAC7E,GAAIiN,GAAO,GAAI3M,MAAK9C,KAAKqG,WAAWrG,KAAKsG,aACzC,QAAQqH,GACJ,IAAK,GACD3N,KAAKmP,SAASnP,KAAKsG,YAAakJ,GAC5BxP,KAAK0P,iBAAiB1P,KAAKsG,cAC3B4E,SAAOlL,KAAK0J,kBACZ1J,KAAK4L,cAAc6B,IAGnBzN,KAAKsG,YAAcmJ,CAEvB,MACJ,KAAK,GACDzP,KAAKkP,UAAUlP,KAAKsG,YAAakJ,GAC7BxP,KAAK4C,aACD5C,KAAK0P,iBAAiB1P,KAAKsG,cAC3B4E,SAAOlL,KAAK0J,kBACZ1J,KAAK2L,YAAY8B,IAGjBzN,KAAKsG,YAAcmJ,CAY3B,MACJ,KAAK,GACDzP,KAAK2P,OAAO3P,KAAKsG,YAAakJ,EAAQ/B,EAAGhL,EAAKD,GAC1CxC,KAAK4P,cAAc5P,KAAKsG,cACxB4E,SAAOlL,KAAK0J,kBACZ1J,KAAK6L,aAAa4B,IAGlBzN,KAAKsG,YAAcmJ,IAanC/N,EAAaxB,UAAU2P,UAAY,SAAU1J,GACzC,GAAIrE,GAAQ9B,IACZA,MAAK8P,wBAA0B9P,KAAK8O,iBAAiBxB,KAAKtN,MAC1DA,KAAK+P,oBAAsB/P,KAAK6O,aAAavB,KAAKtN,MAClDA,KAAK8E,kBAAoB9E,KAAK6E,sBAC9B7E,KAAKgQ,gBAAkB,SAAUvC,GAC7B3L,EAAMmO,gBAAgBxC,KAG9B/L,EAAaxB,UAAUgQ,WAAa,SAAUC,GAC1C,GAAI7J,GAAc,GAAIxD,MAAK,GAAIA,OAAMqN,GAAW3M,SAAS,EAAG,EAAG,EAAG,IAC9D4M,EAAU,GAAItN,MAAK,GAAIA,OAAM9C,KAAKwC,KAAKgB,SAAS,EAAG,EAAG,EAAG,IACzD6M,EAAU,GAAIvN,MAAK,GAAIA,OAAM9C,KAAKyC,KAAKe,SAAS,EAAG,EAAG,EAAG,GAS7D,QARK8C,IAAiB8J,IAAY9J,IAAiB+J,KAC1CF,GAAanQ,KAAKwC,MACnB2N,EAAY,GAAIrN,OAAM9C,KAAKwC,OAE1B2N,GAAanQ,KAAKyC,MACnB0N,EAAY,GAAIrN,OAAM9C,KAAKyC,OAG5B0N,GAEXzO,EAAaxB,UAAU2L,aAAe,SAAU4B,EAAGtH,EAAOuH,GACtD,GACI4C,GADAC,EAAWvQ,KAAKqL,WAAa,EAAI,CAGjCiF,GADsB,cAAtBtQ,KAAK4C,aACI5C,KAAKwQ,WAAWxQ,KAAKsG,YAAaH,EAAO,KAAM,KAAMuH,EAAcD,GAGnEzN,KAAKyQ,cAAcC,kBAAkB1Q,KAAKsG,YAAaH,GAEpEnG,KAAKiJ,sBACqB,cAAtBjJ,KAAK4C,aACL5C,KAAK2Q,eAAeL,EAAQC,EA9sB5B,UA8sB6C9C,EAAGtH,GAGhDnG,KAAKyQ,cAAcG,sBAAsBN,EAAQC,EAjtBjD,UAitBkE9C,EAAGtH,IAG7EzE,EAAaxB,UAAUsQ,WAAa,SAAUlK,EAAaH,EAAO8H,EAAgB4C,EAAQC,EAAarD,GACnG,GAIIyC,GAJAI,KAEA/M,EAAYuN,EAAc,GAAIhO,OAAMwD,GAAetG,KAAK+Q,QAAQ,GAAIjO,MAAQ9C,KAAKgR,UACjFb,EAAY,GAAIrN,MAAK9C,KAAKqG,WAAWC,IAErC2K,EAAed,EAAUe,UAC7BlR,MAAKmR,YAAY7K,EAAa,OAC9B,IAAI/G,GAAI4Q,CAER,KADAA,EAAY,GAAIrN,MAAKvD,EAAE6P,cAAe7P,EAAE2R,WAAY,EAAG3R,EAAE6R,WAAY7R,EAAE8R,aAAc9R,EAAE+R,aAAc/R,EAAEgS,mBAChGpB,EAAUqB,WAAaxR,KAAKmD,gBAC/BnD,KAAKyR,aAAatB,GAAW,MAEjC,KAAK,GAAIuB,GAAM,EAAGA,EAXD,KAWqBA,EAAK,CACvC,GAAIC,GAAU3R,KAAKsE,cAAc,MAAQuD,UA/sB1C,WAgtBK+J,EAAa5R,KAAKsE,cAAc,OACpC,IAAIoN,EAAM,GAAM,GAAK1R,KAAKqL,WAAY,CAElC,GAAIwG,GAAiC,aAAlB7R,KAAK8R,SAA0B,EAAuB,qBAAlB9R,KAAK8R,SAAkC,EAAI,EAC9FC,EAAY,GAAIjP,MAAKqN,EAAUf,cAAee,EAAUe,WAAaf,EAAUY,UAAYc,EAC/FD,GAAW5F,YAAc,GAAKhM,KAAKgS,QAAQD,GAC3CJ,EAAQnJ,YAAYoJ,GACpB1K,YAAUyK,GA/tBT,iBAguBDrB,EAAO1F,KAAK+G,GAEhBzB,EAAa,GAAIpN,OAAMqN,GACvBA,EAAYnQ,KAAKkQ,WAAWC,EAC5B,IAAI8B,IAAsBhK,KAAM,WAAYiK,SAAU,QAClDzC,EAAOzP,KAAK+C,UAAUoP,UAAUnS,KAAK+C,UAAUqP,WAAWjC,EAAW8B,GAAoBA,GACzFI,EAAQrS,KAAKsS,QAAQnC,GACrBpB,EAAQ/O,KAAK+C,UAAUqP,WAAWjC,GAAalI,KAAM,OAAQiK,SAAU,SACvEK,EAAUvS,KAAKsE,cAAc,OACjCiO,GAAQvG,YAAchM,KAAK+C,UAAUqP,WAAWjC,GAAaqC,OAAQ,IAAKvK,KAAM,OAAQiK,SAAU,OAClG,IAAI1N,GAAYxE,KAAKwC,IAAM2N,GAAenQ,KAAKyC,IAAM0N,CACjD3L,IACA0C,YAAUmL,GAAQhR,GAClB6F,YAAUmL,GAAQ/Q,IAGlBiR,EAAQnO,aAAa,QAAS,GAAK2K,GAEnCkC,IAAiBd,EAAUe,aAC3BhK,YAAUmL,GAAQnR,GAClBqR,EAAQnO,aAAa,gBAAiB,SAEf,IAAvB+L,EAAUqB,UAAyC,IAAvBrB,EAAUqB,UACtCtK,YAAUmL,GAxvBZ,aA0vBFA,EAAM7J,YAAY+J,GAClBvS,KAAKgO,mBACDyB,KAAMU,EACNsC,YAAY,EACZ5Q,QAASwQ,EACTK,aAAclO,EAElB,IAAImO,GAAW3S,KAAKgO,iBAEpB,IADAhO,KAAK4S,mBAAmBD,GACpBA,EAASF,WAAY,CACrB,GAAI/D,GAAa,GAAI5L,MAAK9C,KAAKqG,WAAWF,IACtC0M,EAAW,GAAI/P,MAAK9C,KAAKqG,WAAWsM,EAASlD,MACjD,IAAIxB,GACA,IAAK/K,oBAAkB2N,IAAWA,EAAOlQ,OAAS,EAC9C,IAASgG,EAAQ,EAAGA,EAAQkK,EAAOlQ,OAAQgG,KACnCmM,GAAmB,GAAIhQ,MAAK9C,KAAK+C,UAAUqP,WAAWO,EAASlD,MAAQxH,KAAM,OAAQiK,SAAU,aAC/Fa,GAAkB,GAAIjQ,MAAK9C,KAAK+C,UAAUqP,WAAWvB,EAAOlK,IAAUsB,KAAM,OAAQiK,SAAU,YAE9FrB,EAAOmC,OAAOrM,EAAO,GACrBA,GAAS,OAKhB+H,KAAeA,IAAgBmE,GACpC7S,KAAKoD,eAAgB+C,MAAO,OAAQ,GAGxCnG,KAAKgO,kBAAkByE,aAAeJ,EAAM3O,UAAU+I,SAASlL,KAC/D2F,YAAUmL,GAAQhR,GAClB6F,YAAUmL,GAAQ/Q,GAClBiR,EAAQnO,aAAa,gBAAiB,SACjCpE,KAAKgO,kBAAkByB,OAAUzP,KAAKuD,YACvCvD,KAAKsD,eAAgB,GAG7B,IAAI2P,GAAgBZ,EAAM3O,UAAU+I,SAASvL,GACzCgS,EAAcb,EAAM3O,UAAU+I,SAASpL,EACtC6R,IACD7J,eAAa1F,IAAI0O,EAAO,QAASrS,KAAKmT,aAAcnT,KAMxD,IAAIoT,OAAgB,EAIpB,IAHKlQ,oBAAkBuK,IAAiB,UAAXA,EAAExF,OAC3BmL,EAAgB3F,EAAE2F,gBAElBnF,GAAmB/K,oBAAkB2N,IAAYqC,GAoC3CA,GAAelT,KAAKqT,WAAWlD,EAAWhK,IAChDe,YAAUmL,GAAQ9Q,OArC4C,CAC9D,IAAK,GAAI+R,GAAY,EAAGA,EAAYzC,EAAOlQ,OAAQ2S,IAAa,CAC5D,GACIC,IAAkBf,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,QAASsB,SADnC,cAAtBxT,KAAK4C,aAAgC,YAAc,WAE3DkQ,EAAkB9S,KAAK+C,UAAUqP,WAAWjC,EAAWoD,GACvDR,EAAiB/S,KAAK+C,UAAUqP,WAAWvB,EAAOyC,GAAYC,EAKlE,KAJKT,IAAoBC,GAAkB/S,KAAKqT,WAAWlD,EAAWU,EAAOyC,KACrEtT,KAAKqT,WAAWlD,EAAWhK,KAC/Be,YAAUmL,GAAQ9Q,IAEjB2B,oBAAkBkQ,IAAkBA,EAAcK,YAAcpB,EAAMoB,WACvEzT,KAAKqC,eAAiBgQ,EAAM3O,UAAU+I,SAASlL,IAAa6R,EAAc1P,UAAU+I,SAASlL,GAAW,CACxG0F,eAAaoL,GAAQ9Q,GACrBvB,KAAKqC,eAAgB,CAErB,KAAK,GADDqR,GAAa1T,KAAK0T,WAAW7C,GACxB7P,EAAI,EAAGA,EAAI0S,EAAW/S,OAAQK,IAAK,CACxC,GACI2S,IAAoBnB,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,QAASsB,SADnC,cAAtBxT,KAAK4C,aAAgC,YAAc,UAIjE,IAFwB5C,KAAK+C,UAAUqP,WAAW3C,EAAMkE,KACjC3T,KAAK+C,UAAUqP,WAAWsB,EAAW1S,GAAI2S,GACpB,CACxC,GAAIhN,GAAQ+M,EAAWE,QAAQF,EAAW1S,GAC1C0S,GAAWV,OAAOrM,EAAO,GACzBkK,EAAOmC,OAAOrM,EAAO,IAG7B3G,KAAKoD,eAAgByN,OAAQ6C,IAAc,OAG3C1T,MAAK6T,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GAGnEuK,EAAOlQ,QAAU,GACjBX,KAAK6T,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GAMvEtG,KAAK6T,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GAC1DpD,oBAAkBuM,IAASA,EAAKL,gBAAkB7L,EAAU6L,eAAiBK,EAAKyB,aAAe3N,EAAU2N,YACzGzB,EAAKsB,YAAcxN,EAAUwN,WAChC7J,YAAUmL,GA/0Bd,WAi1BA/B,EAAO1F,KAAK5K,KAAKgO,kBAAkBnM,SACnCsO,EAAY,GAAIrN,OAAMoN,GACtBlQ,KAAK2P,OAAOQ,EAAW,EAAG,KAAMnQ,KAAKyC,IAAKzC,KAAKwC,KAEnD,MAAO8N,IAEX5O,EAAaxB,UAAU2T,YAAc,SAAUC,EAAYtP,EAAU2L,EAAW4D,EAAczN,GACtFA,EAAYyK,YAAcZ,EAAUY,WAAc+C,GAAetP,GAK7D8B,GAAetG,KAAKyC,KAAOmE,SAASmN,EAAa/K,GAAI,MAAQhJ,KAAKyC,MAAQqR,IAAetP,GACzF0C,YAAU6M,GAAevS,GAGzB8E,GAAetG,KAAKwC,KAAOoE,SAASmN,EAAa/K,GAAI,MAAQhJ,KAAKwC,MAAQsR,IAAetP,GACzF0C,YAAU6M,GAAevS,IAT7B0F,YAAU6M,GAAevS,IAajCE,EAAaxB,UAAUyL,YAAc,SAAU8B,EAAGtH,GAC9CnG,KAAKgU,wBACL,IACI1D,MACA2D,EAAY/Q,oBAAkBiD,GAC9B+N,EAAU,GAAIpR,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cACxC6N,EAAMD,EAAQhD,WACdkD,EAAKF,EAAQ9E,cACbe,EAAY+D,EACZG,EAASlE,EAAUf,cACnBkF,EAAQ,GAAIxR,MAAK9C,KAAKqG,WAAWrG,KAAKwC,MAAM4M,cAC5CmF,EAAW,GAAIzR,MAAK9C,KAAKqG,WAAWrG,KAAKwC,MAAM0O,WAC/CsD,EAAQ,GAAI1R,MAAK9C,KAAKqG,WAAWrG,KAAKyC,MAAM2M,cAC5CqF,EAAW,GAAI3R,MAAK9C,KAAKqG,WAAWrG,KAAKyC,MAAMyO,UACnDf,GAAUuE,SAAS,GACnB1U,KAAKmR,YAAYnR,KAAKsG,YAAa,UACnC6J,EAAUwE,QAAQ,EAClB,KAAK,GAAIC,GAAQ,EAAGA,EAAQ,KAAMA,EAAO,CACrC,GAAIvC,GAAQrS,KAAKsS,QAAQnC,GACrBoC,EAAUvS,KAAKsE,cAAc,QAC7BuQ,EAAc1O,GAAS,EAAQ+K,aAAef,EAAUe,WACxD7L,EAAUc,GAAS,EAAQiJ,gBAAkBgF,GAAMS,EACnD9F,EAAQ/O,KAAK+C,UAAUqP,WAAWjC,GAAalI,KAAM,OAAQuK,OAAQ,SACzED,GAAQvG,YAAchM,KAAK6K,aAAa7K,KAAK+C,UAAUqP,WAAWjC,GAC9DqC,OAAQ,KAAMvK,KAAM,WAAYiK,SAAU,SAEzClS,KAAKwC,MAAQ6R,EAASC,GAAUM,EAAQL,GAAYF,IAAWC,IAAatU,KAAKyC,MAAQ4R,EAASG,GAAUI,EAAQH,GAAYJ,GAAUG,GAC3ItN,YAAUmL,GAAQhR,IAEZ4S,GAAa5O,EACnB6B,YAAUmL,GAAQ9Q,GAGd4O,EAAUe,aAAeiD,GAAOnU,KAAKsG,YAAY4K,aAAeiD,GAChEjN,YAAUmL,GAAQ7Q,GAG1B2O,EAAUwE,QAAQ,GAClBxE,EAAUuE,SAASvE,EAAUe,WAAa,GACrCmB,EAAM3O,UAAU+I,SAASpL,KAC1BgI,eAAa1F,IAAI0O,EAAO,QAASrS,KAAKmT,aAAcnT,MACpDuS,EAAQnO,aAAa,QAAS,GAAK2K,IAEvCsD,EAAM7J,YAAY+J,GAClBjC,EAAO1F,KAAKyH,GAEhBrS,KAAK2Q,eAAeL,EA5CL,EAz3BZ,SAq6ByC7C,EAAGtH,IAEnDzE,EAAaxB,UAAU0L,cAAgB,SAAU6B,EAAGtH,GAChDnG,KAAKgU,wBACL,IAEI1D,MACAH,EAAY,GAAIrN,MAAK9C,KAAKqG,WAAWrG,KAAKsG,aAC9C6J,GAAUuE,SAAS,GACnBvE,EAAUwE,QAAQ,EAClB,IAAIG,GAAU3E,EAAUf,cACpB2F,EAAU,GAAIjS,MAAKqN,EAAU6E,YAAaF,EAAUA,EAAU,KAC9DG,EAAQ,GAAInS,MAAKqN,EAAU6E,YAAaF,EAAUA,EAAU,OAC5DI,EAAcH,EAAQ3F,cACtB+F,EAAYF,EAAM7F,cAClBgG,EAAapV,KAAK+C,UAAUqP,WAAW2C,GACvCvC,OAAQ,KAAMvK,KAAM,WAAYiK,SAAU,MAE1CmD,EAAWrV,KAAK+C,UAAUqP,WAAW6C,GAASzC,OAAQ,KAAMvK,KAAM,WAAYiK,SAAU,KAC5FlS,MAAKuI,mBAAmByD,YAAcoJ,EAAa,OAGnD,KAAK,GADDE,GADQ,GAAIxS,MAAKgS,EAAWA,EAAU,GAAM,EAAG,EAAG,GAChC1F,cACbmG,EAAc,EAAGA,EAjBX,KAiBqCA,EAAa,CAC7D,GAAIC,GAAOF,EAAYC,CACvBpF,GAAU6E,YAAYQ,EACtB,IAAInD,GAAQrS,KAAKsS,QAAQnC,GACrBoC,EAAUvS,KAAKsE,cAAc,OACjCiO,GAAQvG,YAAchM,KAAK+C,UAAUqP,WAAWjC,GAC5CqC,OAAQ,KAAMvK,KAAM,WAAYiK,SAAU,MAEzCsD,EAAON,GAAiBM,EAAOL,GAChCjO,YAAUmL,GA38BR,gBA48BFE,EAAQnO,aAAa,gBAAiB,QACjClB,oBAAkBiD,IAAUgK,EAAUf,gBAAkB,EAAQA,eACjElI,YAAUmL,GAAQ9Q,IAElBiU,EAAO,GAAI1S,MAAK9C,KAAKqG,WAAWrG,KAAKwC,MAAM4M,eAC3CoG,EAAO,GAAI1S,MAAK9C,KAAKqG,WAAWrG,KAAKyC,MAAM2M,gBAC3ClI,YAAUmL,GAAQhR,IAGjBmU,EAAO,GAAI1S,MAAK9C,KAAKqG,WAAWrG,KAAKwC,MAAM4M,eAChDoG,EAAO,GAAI1S,MAAK9C,KAAKqG,WAAWrG,KAAKyC,MAAM2M,cAC3ClI,YAAUmL,GAAQhR,GAEZ6B,oBAAkBiD,IAAUgK,EAAUf,gBAAkB,EAAQA,cAIlEe,EAAUf,gBAAkBpP,KAAKsG,YAAY8I,eAAkBiD,EAAM3O,UAAU+I,SAASpL,IACxF6F,YAAUmL,GAAQ7Q,GAJtB0F,YAAUmL,GAAQ9Q,GAOjB8Q,EAAM3O,UAAU+I,SAASpL,KAC1BgI,eAAa1F,IAAI0O,EAAO,QAASrS,KAAKmT,aAAcnT,MACpDuS,EAAQnO,aAAa,QAAS,GAAKmO,EAAQvG,cAE/CqG,EAAM7J,YAAY+J,GAClBjC,EAAO1F,KAAKyH,GAEhBrS,KAAK2Q,eAAeL,EAxDL,EAwDuB,WAAY7C,EAAGtH,IAEzDzE,EAAaxB,UAAUoS,QAAU,SAAUnC,GACvC,GAGIhK,GAFA8L,GAAsBC,SAAU,OAAQjK,KAAM,WAAYuL,SAD5B,cAAtBxT,KAAK4C,aAAgC,YAAc,WAE3D6M,EAAOzP,KAAK+C,UAAUoP,UAAUnS,KAAK+C,UAAUqP,WAAWjC,EAAW8B,GAAoBA,EAExF/O,qBAAkBuM,KACnBtJ,EAAQsJ,EAAKgG,UAEjB,IAAIzN,IACAH,UAx9BD,SAw9BkBG,OAASgB,GAAM,GAAK0M,cAAY,GAAKvP,GAAQwP,gBAAiB,SAEnF,OAAO3V,MAAKsE,cAAc,KAAM0D,IAEpCtG,EAAaxB,UAAU8O,SAAW,SAAUS,GACxC,GAAImG,GAAoC,WAAvB5V,KAAK2N,cAA6B3N,KAAK0J,iBAAiBuB,iBAAiB,WAAkB/J,GACxGlB,KAAK0J,iBAAiBuB,iBAAiB,uBAC3C,IAAI2K,EAAWjV,OACX,IAAK,GAAIK,GAAI,EAAGA,EAAI4U,EAAWjV,OAAQK,IACnC,IAAK4U,EAAW5U,GAAG0C,UAAU+I,SAASpL,GAAW,CAE7CoO,EAAO,GAAI3M,MAAK8D,SAASgP,EAAW5U,GAAGgI,GAAI,GAC3C,OAIZ,MAAOyG,IAEX/N,EAAaxB,UAAU+O,QAAU,SAAUQ,EAAMrB,GAC7C,GAAIyH,GAAW,GAAI/S,MAAK2M,EAAKL,cAAeK,EAAKyB,WAAa,EAAG,EACjE,IAAa,IAAT9C,EAAY,CACZ,GAAI0H,GAAaC,KAAKC,IAAIH,EAASI,oBAAsBjW,KAAKgP,SAASS,GAAMwG,oBAI7E,OAHIH,IACAD,EAASrS,SAASxD,KAAKgP,SAASS,GAAM2B,WAAc0E,EAAa,IAE9D9V,KAAKkW,YAAYL,GAGxB,MAAO7V,MAAKkW,YAAYlW,KAAKgP,SAAS6G,KAG9CnU,EAAaxB,UAAUkG,eAAiB,SAAUD,GAC9C,OAASjD,oBAAkBiD,IAAUA,YAAiBrD,QAASqT,OAAOhQ,GAAUA,EAAQ,MAE5FzE,EAAaxB,UAAUgW,YAAc,SAAUzG,GAC3C,GAAImG,GAAoC,WAAvB5V,KAAK2N,cAA6B3N,KAAK0J,iBAAiBuB,iBAAiB,wBACtFjL,KAAK0J,iBAAiBuB,iBAAiB,WAAkB/J,EAC7D,IAAI0U,EAAWjV,OACX,IAAK,GAAIK,GAAI4U,EAAWjV,OAAS,EAAGK,GAAK,EAAGA,IACxC,IAAK4U,EAAW5U,GAAG0C,UAAU+I,SAASpL,GAAW,CAE7CoO,EAAO,GAAI3M,MAAK8D,SAASgP,EAAW5U,GAAGgI,GAAI,GAC3C,OAIZ,MAAOyG,IAEX/N,EAAaxB,UAAU8T,uBAAyB,WACf,aAAzBhU,KAAKyD,gBACAP,oBAAkBlD,KAAK6B,QAAQoJ,iBAAiB,0BAA0B,KAC3EC,SAAOlL,KAAKoL,kBAIXlI,oBAAkBlD,KAAKqE,gBAAgB4G,iBAAiB,0BAA0B,KACnFC,SAAOlL,KAAKoL,mBAKxB1J,EAAaxB,UAAUyQ,eAAiB,SAAUyF,EAAUC,EAAOC,EAAS7I,EAAGtH,GAC3E,GACIoQ,GADAnI,EAAOpO,KAAK6N,cAAc7N,KAAK2N,cAEnC3N,MAAK0J,iBAAmB1J,KAAKsE,cAAc,SAC3CtE,KAAK2I,MAAMH,YAAYxI,KAAK0J,kBAC5BzC,eAAajH,KAAK0I,eAAgB1I,KAAK4H,gBA7iCnC,UACC,WAFF,WA+iCHV,YAAUlH,KAAK0I,eAAgB1I,KAAK4H,gBAAiB0O,GAMrD,KAAK,GAFDE,GAAMH,EACNd,EAAc,EACTjD,EAAU,EAAGA,EAAU8D,EAASzV,OAAS0V,IAAS/D,EAAS,CAEhE,IADAiE,EAAQvW,KAAKsE,cAAc,MACtBiR,EAAc,EAAIA,EAAaA,EAAciB,EAAKjB,IAC9Ca,EAASb,GAAa7R,UAAU+I,SAAS,kBAAqBvJ,oBAAkBkT,EAASb,GAAakB,SAAS,MAChHvP,YAAUkP,EAASb,GAAakB,SAAS,KAtiClD,UAuiCSvO,eAAakO,EAASb,GAAakB,SAAS,IACxCtO,SAAU,IACVE,gBAAgB,KAGxBkO,EAAM/N,YAAY4N,EAASb,IACvBvV,KAAKqL,YAA8BqL,IAAhBnB,GAAsCa,EAASM,GAAoBhT,UAAU+I,SAASvL,IACzGgG,YAAUqP,GAjjCV,iBAmjCCvW,KAAKqL,YAjBG,IAiBWkK,GAAkCa,EAjB7C,GAkBT1S,UAAU+I,SAASvL,IACnBgG,YAAUqP,GArjCV,gBAujCAvW,KAAKqL,WAvBC,KAwBFkK,GAA+Ba,EAxB7B,IAwBmD1S,UAAU+I,SAASvL,IACxEgG,YAAUqP,GAzjCd,gBAiiCK,KA4BDhB,GAA8Ba,EA5B7B,IA4BkD1S,UAAU+I,SAASvL,IACtEgG,YAAUqP,GA9jCd,eAkkCRC,IAAYH,EACZd,GAA4B,EAC5BvV,KAAK0J,iBAAiBlB,YAAY+N,GAEtCvW,KAAK2I,MAAMgB,cAAc,SAAS9B,UAAY7H,KAAKgC,OACzB,cAAtBhC,KAAK4C,aACL5C,KAAK2W,cAGL3W,KAAKyQ,cAAcmG,sBAEnBxI,IAASpO,KAAK6N,cAAc7N,KAAK2N,gBAA4B,IAATS,GAAcA,IAASpO,KAAK6N,cAAc7N,KAAK2N,iBACnG3N,KAAKgQ,gBAAgBvC,GAEzBzN,KAAK6W,2BAETnV,EAAaxB,UAAUiT,aAAe,SAAU1F,EAAGtH,GAC/CnG,KAAK8W,kBAAkBrJ,EACvB,IAAIsJ,GAAMtJ,EAAE2F,cACRhF,EAAOpO,KAAK6N,cAAc7N,KAAK2N,cAC/BoJ,GAAIrT,UAAU+I,SAASvL,GACvBlB,KAAK4O,aAAanB,EAAG,EAAG,KAAMtH,GAEzBiI,IAASpO,KAAK6N,cAAc7N,KAAK4N,QAAU5N,KAAK6N,cAAc7N,KAAK0L,QAAU1L,KAAK6N,cAAc7N,KAAK4N,OAC1G5N,KAAK4O,aAAanB,EAAG,EAAG,KAAMtH,GAEzB,IAAMiI,EACXpO,KAAK4O,aAAanB,EAAG,EAAG,KAAMtH,GAExB4Q,EAAIrT,UAAU+I,SAASvL,IAAwB,IAATkN,EAI5CpO,KAAK4O,aAAanB,EAAG,EAAGsJ,EAAK5Q,GAH7BnG,KAAK0O,WAAWjB,EAAGzN,KAAKgX,WAAWvJ,EAAG,MAAO,MAKpB,aAAzBzN,KAAKyD,iBACLzD,KAAK2I,MAAMgG,SAInBjN,EAAaxB,UAAU4W,kBAAoB,SAAUrJ,GACjDA,EAAEe,kBAGN9M,EAAaxB,UAAU0O,aAAe,SAAUnB,EAAGW,EAAMvM,EAASsE,GAC9D,GAAIwH,GAAc3N,KAAK6N,cAAc7N,KAAK2N,eACtCpO,EAAIS,KAAKgX,WAAWvJ,EAAG5L,EAC3B,QAAQuM,GACJ,IAAK,GACGT,IAAgB3N,KAAK6N,cAAc7N,KAAK4N,QAAU5N,KAAK6N,cAAc7N,KAAK0L,QAAU1L,KAAK6N,cAAc7N,KAAK4N,QAC5G1C,SAAOlL,KAAK0J,kBACZ1J,KAAKsG,YAAc/G,EACnBS,KAAKgC,OAhnCZ,WAinCOhC,KAAK6L,aAAa4B,KAGQ,cAAtBzN,KAAK4C,cACL5C,KAAKsG,YAAYoO,SAASnV,EAAE2R,YACxB3R,EAAE2R,WAAa,GAAKlR,KAAKsG,YAAY4K,aAAe3R,EAAE2R,YACtDlR,KAAKsG,YAAYqO,QAAQ,GAE7B3U,KAAKsG,YAAY0O,YAAYzV,EAAE6P,gBAG/BpP,KAAKsG,YAAc/G,EAEvBS,KAAKgC,OA9nCZ,WA+nCOkJ,SAAOlL,KAAK0J,kBACZ1J,KAAK6L,aAAa4B,GAEtB,MACJ,KAAK,GACD,GAAIE,IAAgB3N,KAAK6N,cAAc7N,KAAK4N,QAAU5N,KAAK6N,cAAc7N,KAAK0L,QAAU1L,KAAK6N,cAAc7N,KAAK4N,OAC5G5N,KAAK0O,WAAWjB,EAAGlO,EAAG,UAErB,CACD,GAA0B,cAAtBS,KAAK4C,aACL5C,KAAKsG,YAAY0O,YAAYzV,EAAE6P,mBAE9B,CACDpP,KAAKiX,sBAAwBjX,KAAK4H,cAAcoE,WAChD,IAAIkL,GAAclX,KAAKyQ,cAAc0G,eAAe5X,EACpDS,MAAKsG,YAActG,KAAKyQ,cAAc2G,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAO,GAE3F5U,KAAKgC,OAhpCZ,WAipCOkJ,SAAOlL,KAAK0J,kBACZ1J,KAAK2L,YAAY8B,MAIjC/L,EAAaxB,UAAUmX,WAAa,SAAUjJ,EAAMX,EAAGQ,EAAgBP,GACnE,OAAQU,GACJ,IAAK,GACDlD,SAAOlL,KAAK0J,kBACZ1J,KAAK6L,aAAa4B,EAAG,KAAMC,EAC3B,MACJ,KAAK,GACDxC,SAAOlL,KAAK0J,kBACZ1J,KAAK2L,YAAY8B,EACjB,MACJ,KAAK,GACDvC,SAAOlL,KAAK0J,kBACZ1J,KAAK4L,cAAc6B,KAS/B/L,EAAaxB,UAAUuD,cAAgB,WACnC,MAAO,YAOX/B,EAAaxB,UAAUoX,gBAAkB,WACrC,GAAIC,KAIJ,OAH0B,YAAtBvX,KAAK4C,cACL2U,EAAQ3M,MAAOpB,MAAOxJ,MAAOwX,OAAQ,UAAWC,KAAM,YAEnDF,GAQX7V,EAAaxB,UAAUwX,eAAiB,WACpC,GAAIC,IAAa,QACjB,OAAO3X,MAAK4X,aAAaD,IAa7BjW,EAAaxB,UAAU2X,kBAAoB,SAAUC,EAASC,EAAS9J,EAAgB4C,GACnF7Q,KAAKgC,OAAS,EACd,KAAK,GAAIwI,GAAK,EAAGC,EAAKhL,OAAOiL,KAAKoN,GAAUtN,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC9D,GAAIwN,GAAOvN,EAAGD,EACd,QAAQwN,GACJ,IAAK,YACGF,EAAQlU,UACqB,aAAzB5D,KAAKyD,gBACLzD,KAAK6B,QAAQ6B,UAAUC,IAAI,SAG3B3D,KAAKqE,gBAAgBX,UAAUC,IAAI,SAIV,aAAzB3D,KAAKyD,gBACLzD,KAAK6B,QAAQ6B,UAAUmG,OAAO,SAG9B7J,KAAKqE,gBAAgBX,UAAUmG,OAAO,QAG9C,MACJ,KAAK,kBACD7J,KAAK8J,mBACwB,eAAzB9J,KAAKyD,gBACLzD,KAAKiJ,sBAEAjJ,KAAKqE,iBACVrE,KAAKiJ,sBAETjJ,KAAKyI,sBACL,MACJ,KAAK,MACL,IAAK,MACDzI,KAAKuC,gBAAgBvC,KAAKwC,IAAKxC,KAAKyC,KACvB,QAATuV,EACAhY,KAAKoD,eAAgBZ,IAAKxC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWyR,EAAQtV,SAAU,GAGzFxC,KAAKoD,eAAgBX,IAAKzC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWyR,EAAQrV,SAAU,GAE7FzC,KAAKoD,eAAgBsI,MAAO1L,KAAK2N,gBAAiB,GAC9C3N,KAAK0J,kBACLwB,SAAOlL,KAAK0J,kBAEhB1J,KAAKgH,eACDiH,GACAjO,KAAKiY,eAAehK,EAAgB4C,GAEX,eAAzB7Q,KAAKyD,gBACLzD,KAAKkJ,oBAEAlJ,KAAKqE,iBACVrE,KAAKkJ,qBAEJlJ,KAAKuD,UAAYvD,KAAKwC,KAAOxC,KAAKyC,IAAMzC,KAAKuD,YAAevD,aAAiBA,KAAkB,cAChGkL,SAAOlL,KAAK+L,cACZb,SAAOlL,KAAKwM,QACZxM,KAAK+L,aAAe/L,KAAKwM,OAAS,KAClCxM,KAAKoJ,uBAGApJ,aAAiBA,mBAAsBA,KAAK+L,aAAarI,UAAU+I,SAAS,gBAC7ExF,eAAajH,KAAK+L,cAAe1K,GACjC6J,SAAOlL,KAAK+L,cACZb,SAAOlL,KAAKwM,QACZxM,KAAK+L,aAAe/L,KAAKwM,OAAS,KAClCxM,KAAKoJ,sBAGb,MACJ,KAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,iBACL,IAAK,WACDpJ,KAAKkY,YACwB,eAAzBlY,KAAKyD,iBACLzD,KAAKiJ,sBACLjJ,KAAKkJ,qBAEAlJ,KAAKqE,kBACVrE,KAAKiJ,sBACLjJ,KAAKkJ,oBAET,MACJ,KAAK,SAUD,GATAlJ,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAClB,eAAzBjD,KAAKyD,iBACLzD,KAAKiJ,sBACLjJ,KAAKkJ,qBAEAlJ,KAAKqE,kBACVrE,KAAKiJ,sBACLjJ,KAAKkJ,qBAEoB,aAAzBlJ,KAAKyD,gBAAgC,CACrC,GAAI4I,IAAeC,MAAO,QAC1BtM,MAAKiM,IAAM,GAAIM,QAAKvM,KAAKyD,gBAAiB4I,EAAYrM,KAAKiD,QAE/DjD,KAAKiM,IAAIkM,UAAUnY,KAAKiD,QACpBjD,KAAKmJ,iBACLnJ,KAAK8L,cAET,MACJ,KAAK,kBACGgM,EAAQ3O,gBACRnJ,KAAKoJ,sBAGAlG,oBAAkBlD,KAAK+L,eAAkB7I,oBAAkBlD,KAAKwM,UACjEtB,SAAOlL,KAAK+L,cACZb,SAAOlL,KAAKwM,QACZxM,KAAK+L,aAAe/L,KAAKwM,WAAS4L,IAG1CpY,KAAKoD,eAAgB+F,gBAAiB2O,EAAQ3O,kBAAmB,MAYjFzH,EAAaxB,UAAU+X,eAAiB,SAAUhK,EAAgB4C,GAC9D,GAAI5C,IAAmB/K,oBAAkB2N,IAAWA,EAAOlQ,OAAS,EAAG,CAEnE,IAAK,GADD+S,GAAa1T,KAAK0T,WAAW7C,GACxBwH,EAAY,EAAGA,EAAY3E,EAAW/S,OAAQ0X,IAAa,CAChE,GAAI/E,GAAYI,EAAW2E,GACvBpQ,EAA8B,cAAtBjI,KAAK4C,aAAgC,YAAc,UAC3D0V,MAAkB,EAElBA,GADsB,cAAtBtY,KAAK4C,aACa5C,KAAK+C,UAAUqP,WAAWkB,GAAarL,KAAM,OAAQiK,SAAU,QAG/DlS,KAAK+C,UAAUqP,WAAWkB,GAAarL,KAAM,WAAYiK,SAAU,OAAQsB,SAAU,WAE3G,IAAI+E,IAAoBtQ,KAAM,OAAQiK,SAAU,MAAOsB,SAAUvL,GAE7DuQ,EADiBxY,KAAK+C,UAAUqP,WAAWpS,KAAKwC,IAAK+V,GAErDE,GAAoBxQ,KAAM,OAAQiK,SAAU,MAAOsB,SAAUvL,GAE7DyQ,EADiB1Y,KAAK+C,UAAUqP,WAAWpS,KAAKyC,IAAKgW,KAEpD,GAAI3V,MAAKwV,IAAoB,GAAIxV,MAAK0V,KACtC,GAAI1V,MAAKwV,IAAoB,GAAIxV,MAAK4V,MACvChF,EAAWV,OAAOqF,EAAW,GAC7BA,GAAa,GAGrBrY,KAAKoD,eAAgByN,OAAQ6C,IAAc,KAGnDhS,EAAaxB,UAAUyY,eAAiB,WAC/BzV,oBAAkBlD,KAAK0J,oBACxBwB,SAAOlL,KAAK0J,kBACZ1J,KAAKoD,eAAgBsI,MAAO1L,KAAK2N,gBAAiB,GAClD3N,KAAKkJ,sBAGbxH,EAAaxB,UAAUwT,WAAa,SAAU7C,GAC1C,GAAI6C,KACJ,KAAKxQ,oBAAkB2N,IAAWA,EAAOlQ,OAAS,EAC9C,IAAK,GAAIgG,GAAQ,EAAGA,EAAQkK,EAAOlQ,OAAQgG,IACvC+M,EAAW9I,KAAK,GAAI9H,OAAM+N,EAAOlK,IAGzC,OAAO+M,IAEXhS,EAAaxB,UAAUiR,YAAc,SAAU1B,EAAMrB,GACjD,GACIwK,GACAC,EAFA9V,EAAY,GAAIC,wBAAqBhD,KAAKiD,QAG1CgF,EAA8B,cAAtBjI,KAAK4C,aAAgC,YAAc,SAW/D,QAV0B,cAAtB5C,KAAK4C,cACLgW,EAAmB7V,EAAUqP,WAAW3C,GAAQxH,KAAM,WAAYiK,SAAU,QAASsB,SAAUvL,IAC/F4Q,EAAqB9V,EAAUqP,WAAW3C,GACtC+C,OAAQ,KAAMvK,KAAM,WAAYiK,SAAU,IAAKsB,SAAUvL,MAI7D2Q,EAAmB7V,EAAUqP,WAAW3C,GAAQxH,KAAM,WAAYuK,OAAQ,SAAUgB,SAAUvL,IAC9F4Q,EAAqB9V,EAAUqP,WAAW3C,GAAQxH,KAAM,WAAYuK,OAAQ,IAAKgB,SAAUvL,KAEvFmG,GACJ,IAAK,OACDpO,KAAKuI,mBAAmByD,YAAchM,KAAK6K,aAAa+N,EACxD,MACJ,KAAK,SACD5Y,KAAKuI,mBAAmByD,YAAc6M,IAGlDnX,EAAaxB,UAAU4Y,oBAAsB,WACzC,GAAI9P,GAIA+F,EAHAgK,EAAa/Y,KAAK0J,iBAAiBC,cAAc,wBACjDqP,EAAchZ,KAAK0J,iBAAiBC,cAAc,oBAClD1B,EAA8B,cAAtBjI,KAAK4C,aAAgC,YAAc,UAE3DwL,EAAOpO,KAAK2N,aAwBhB,OAtBIoB,GADS,UAATX,EACQpO,KAAK+C,UAAUqP,WAAWpS,KAAKsG,aAAe2B,KAAM,OAAQiK,SAAU,OAAQsB,SAAUvL,IAElF,SAATmG,EACQ,YAATnG,EACQjI,KAAK+C,UAAUqP,WAAWpS,KAAKsG,aAAe2B,KAAM,OAAQiK,SAAU,QAASsB,SAAUvL,IAGzFjI,KAAK+C,UAAUqP,WAAWpS,KAAKsG,aAAe2B,KAAM,OAAQiK,SAAU,QAASsB,SAAUvL,IAI7FjI,KAAK+C,UAAUqP,WAAWpS,KAAKsG,aACnCkM,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,IAAKsB,SAAUvL,KAGzD+Q,GAAeD,KACV7V,oBAAkB8V,IACnBA,EAAY5U,aAAa,gBAAiB,SAE7C2U,GAAcC,GAAa5U,aAAa,aAAc2K,GACvD/F,GAAM+P,GAAcC,GAAa7U,aAAa,OAE3C6E,GAEXtH,EAAaxB,UAAUyW,YAAc,WAEjC,OADA,GAAI7T,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAcqO,QAAQ,GAC5C3U,KAAK2N,eACT,IAAK,QACD3N,KAAKiZ,oBAAoBjZ,KAAKkZ,aAAa,GAAIpW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKwC,KAAO,GACpGxC,KAAKmZ,gBAAgBnZ,KAAKkZ,aAAa,GAAIpW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKyC,MAAQ,EACjG,MACJ,KAAK,OACDzC,KAAKiZ,oBAAoBjZ,KAAKoZ,YAAY,GAAItW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKwC,KAAO,GACnGxC,KAAKmZ,gBAAgBnZ,KAAKoZ,YAAY,GAAItW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKyC,MAAQ,EAChG,MACJ,KAAK,SACDzC,KAAKiZ,oBAAoBjZ,KAAKqZ,cAAc,GAAIvW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKwC,KAAO,GACrGxC,KAAKmZ,gBAAgBnZ,KAAKqZ,cAAc,GAAIvW,MAAK9C,KAAKqG,WAAWrG,KAAKsG,cAAetG,KAAKyC,MAAQ,KAQ9Gf,EAAaxB,UAAUoZ,QAAU,WACA,aAAzBtZ,KAAKyD,iBAAkCzD,KAAK6B,QAC5CoF,eAAajH,KAAK6B,UAAWV,IAGzBnB,KAAKqE,iBAAmBrE,KAAK6B,SAC7BoF,eAAajH,KAAK6B,UAAWV,IAGR,aAAzBnB,KAAKyD,iBAAkCzD,KAAK6B,UACvCqB,oBAAkBlD,KAAKuI,qBACxBc,eAAaQ,OAAO7J,KAAKuI,mBAAoB,QAASvI,KAAK8M,eAE3D9M,KAAK+L,cACL1C,eAAaQ,OAAO7J,KAAK+L,aAAc,QAAS/L,KAAK0M,kBAEzD1M,KAAKiZ,qBAAoB,GACzBjZ,KAAKmZ,iBAAgB,GACrBnZ,KAAKiN,eAAeqM,UACpBtZ,KAAK6B,QAAQ0X,gBAAgB,aACxBrW,oBAAkBlD,KAAK0C,gBAAgByB,aAAa,aAIrDnE,KAAK6B,QAAQ0X,gBAAgB,YAH7BvZ,KAAK6B,QAAQuC,aAAa,WAAYpE,KAAKiE,WAM/CjE,KAAK6B,UACL7B,KAAK6B,QAAQ4J,UAAY,IAE7BzL,KAAK+L,aAAe,KACpB/L,KAAK0J,iBAAmB,KACxB1J,KAAKwZ,iBAAmB,KACxBxZ,KAAKgO,kBAAoB,KACzBhO,KAAK4H,cAAgB,KACrB5H,KAAKsI,SAAW,KAChBtI,KAAK2I,MAAQ,KACb3I,KAAKoL,iBAAmB,KACxBpL,KAAK+H,aAAe,KACpB/H,KAAKuI,mBAAqB,KAC1BvI,KAAKwM,OAAS,KACdxM,KAAK0I,eAAiB,KACtB/G,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,OAElC0B,EAAaxB,UAAU6O,MAAQ,SAAUtB,GACrC,GAAIE,GAAc3N,KAAK6N,cAAc7N,KAAK2N,cAC1C3N,MAAKgC,OAt/CA,WAu/CLhC,KAAKqX,aAAa1J,EAAaF,IAEnC/L,EAAaxB,UAAU2N,cAAgB,SAAU4L,GAC7C,MAAkB,UAAdA,EACO,EAEY,SAAdA,EACE,EAGA,GAGf/X,EAAaxB,UAAU4M,cAAgB,SAAUW,GAC7CA,EAAEe,iBACFxO,KAAK+O,MAAMtB,IAEf/L,EAAaxB,UAAUwZ,SAAW,WAC9B1Z,KAAKgC,OAAS,EACd,IAAI2L,GAAc3N,KAAK6N,cAAc7N,KAAK2N,cAC1C,QAAQ3N,KAAK2N,eACT,IAAK,QACD3N,KAAKkP,UAAUlP,KAAKsG,aAAc,GAClCtG,KAAKqX,WAAW1J,EAChB,MACJ,KAAK,OACD3N,KAAKmP,SAASnP,KAAKsG,aAAc,GACjCtG,KAAKqX,WAAW1J,EAChB,MACJ,KAAK,SACD3N,KAAKmP,SAASnP,KAAKsG,aAAc,IACjCtG,KAAKqX,WAAW1J,KAI5BjM,EAAaxB,UAAU4O,iBAAmB,SAAUrB,IAC/C5J,UAAQC,UAAY2J,EAAEe,iBACG,cAAtBxO,KAAK4C,aACL5C,KAAK0Z,WAGL1Z,KAAKyQ,cAAckJ,kBAEvB3Z,KAAKiQ,gBAAgBxC,IAEzB/L,EAAaxB,UAAU0Z,KAAO,WAC1B5Z,KAAKgC,OAAS,EACd,IAAI2L,GAAc3N,KAAK6N,cAAc7N,KAAK2N,cAC1C,QAAQ3N,KAAK2N,eACT,IAAK,QACD3N,KAAKkP,UAAUlP,KAAKsG,YAAa,GACjCtG,KAAKqX,WAAW1J,EAChB,MACJ,KAAK,OACD3N,KAAKmP,SAASnP,KAAKsG,YAAa,GAChCtG,KAAKqX,WAAW1J,EAChB,MACJ,KAAK,SACD3N,KAAKmP,SAASnP,KAAKsG,YAAa,IAChCtG,KAAKqX,WAAW1J,KAI5BjM,EAAaxB,UAAU2O,aAAe,SAAUkI,IAC3ClT,UAAQC,UAAYiT,EAAIvI,iBACC,cAAtBxO,KAAK4C,aACL5C,KAAK4Z,OAGL5Z,KAAKyQ,cAAcoJ,cAEvB7Z,KAAKiQ,gBAAgB8G,IAUzBrV,EAAaxB,UAAU4N,WAAa,SAAUM,EAAMqB,EAAM/B,IACjD+B,IAASzP,KAAKwC,MAAQiN,IAASzP,KAAKyC,MACrCzC,KAAKsG,YAAcmJ,IAElBA,IAASzP,KAAKwC,MACfxC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,QAEhDiN,IAASzP,KAAKyC,MACfzC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKyC,OAEhDzC,KAAK6N,cAAc7N,KAAK4N,QAAU5N,KAAK6N,cAAcO,KACjDpO,KAAK6N,cAAc7N,KAAK4N,QAAU5N,KAAK6N,cAAc7N,KAAK0L,QACxD1L,KAAK6N,cAAc7N,KAAK4N,SAAW5N,KAAK6N,cAAcO,MACzDA,EAAOpO,KAAK4N,OAGpB5N,KAAKqX,WAAWrX,KAAK6N,cAAcO,GAAO,KAAM,KAAMV,IAQ1DhM,EAAaxB,UAAUyN,YAAc,WACjC,OAAKzK,oBAAkBlD,KAAK0I,iBAAmB1I,KAAK0I,eAAehF,UAAU+I,SAvnD1E,UAwnDQ,QAEDvJ,oBAAkBlD,KAAK0I,iBAAmB1I,KAAK0I,eAAehF,UAAU+I,SAxnD7E,YAynDM,SAGA,SAIf/K,EAAaxB,UAAUmT,WAAa,SAAU5D,EAAMtJ,GAChD,OAASjD,oBAAkBiD,IAAUsJ,EAAKsB,YAAc,EAAQA,WACzDtB,EAAKyB,aAAe,EAAQA,YAAczB,EAAKL,gBAAkB,EAAQA,eAGpF1N,EAAaxB,UAAUoK,kBAAoB,SAAUwP,EAAIrZ,GACrD,GAAIsZ,GAAkB,0CAA4C/Z,KAAKkK,gBAAgBC,cACnF6P,EAAgB,wCAA0Cha,KAAKkK,gBAAgBC,aAEnF,OAA0B,cAAtBnK,KAAK4C,aACEwH,WAFG,QAEqBpK,KAAKiD,OAAS8W,EAAiBD,GAGvD1P,WAAS,QAAepK,KAAKiD,OAAS+W,EAAeF,IAGpEpY,EAAaxB,UAAU8R,QAAU,SAAUzS,GACvC,GAAI+G,GAAc,GAAIxD,MAAK9C,KAAKqG,WAAW9G,IAAIkW,UAC3ChG,EAAO,GAAI3M,MAAKvD,EAAE6P,cAAe,EAAG,GAAGqG,SAC3C,OAAOM,MAAKkE,MAAQ3T,EAAcmJ,EAxnDpB,OAAA,MAwnDkE,IAEpF/N,EAAaxB,UAAUuR,aAAe,SAAUhC,EAAMyK,GAClD,GAAIC,GAAW1K,EAAKwG,oBAChB1W,EAAI,GAAIuD,MAAK2M,EAAK2K,UAAYF,GAC9BG,EAAe9a,EAAE0W,oBAAsBkE,CAC3C1K,GAAK6K,QAAQ/a,EAAE6a,UA7nDG,IA6nDSC,IAE/B3Y,EAAaxB,UAAUgP,UAAY,SAAUO,EAAMzO,GAC/C,GAA0B,cAAtBhB,KAAK4C,aAA8B,CACnC,GAAI8O,GAAMjC,EAAKsB,SACftB,GAAKkF,QAAQ,GACblF,EAAKiF,SAASjF,EAAKyB,WAAalQ,GAChCyO,EAAKkF,QAAQoB,KAAKvT,IAAIkP,EAAK1R,KAAKua,WAAW9K,SAE1C,CACD,GAAIyH,GAAclX,KAAKyQ,cAAc0G,eAAe1H,EACpDzP,MAAKsG,YAActG,KAAKyQ,cAAc2G,YAAYF,EAAY1B,KAAO0B,QAAqBlW,EAAG,KAGrGU,EAAaxB,UAAUiP,SAAW,SAAUM,EAAMzO,GAC9C,GAA0B,cAAtBhB,KAAK4C,aAA8B,CACnC,GAAI8O,GAAMjC,EAAKsB,SACftB,GAAKkF,QAAQ,GACblF,EAAKuF,YAAYvF,EAAKL,cAAgBpO,GACtCyO,EAAKkF,QAAQoB,KAAKvT,IAAIkP,EAAK1R,KAAKua,WAAW9K,SAE1C,CACD,GAAIyH,GAAclX,KAAKyQ,cAAc0G,eAAe1H,EACpDzP,MAAKsG,YAActG,KAAKyQ,cAAc2G,YAAYF,EAAY1B,KAAOxU,EAAIkW,QAAoB,KAGrGxV,EAAaxB,UAAU8W,WAAa,SAAUvJ,EAAG5L,GAC7C,GAAIkV,EAEAA,GADAtJ,EACMA,EAAE2F,cAGFvR,CAEV,IACIoQ,IAAsBhK,KAAM,WAAYiK,SAAU,OAAQsB,SAD5B,cAAtBxT,KAAK4C,aAAgC,YAAc,WAG3D4X,EAAaxa,KAAK+C,UAAUqP,WAAW,GAAItP,MAAK8D,SAAS,GAAKmQ,EAAI5S,aAAa,MAAO,IAAK8N,GAC3FxC,EAAOzP,KAAK+C,UAAUoP,UAAUqI,EAAYvI,GAC5C9L,EAAQsJ,EAAKgG,UAAYhG,EAAKgG,UAAY,GAC9C,OAAO,IAAI3S,MAAKqD,IAGpBzE,EAAaxB,UAAUuI,qBAAuB,WAC1CxB,eAAajH,KAAK6B,SA3qDN,4BA4qDiB,SAAzB7B,KAAKkK,iBACLhD,YAAmC,aAAzBlH,KAAKyD,gBAAiCzD,KAAK6B,QAAU7B,KAAKqE,iBA7qD5D,6BAgrDhB3C,EAAaxB,UAAUwO,WAAa,SAAUjB,EAAGgC,EAAMgL,EAAMxM,EAAgB4C,GACzE,GAAIhP,GAAU4Y,GAAQhN,EAAE2F,aAExB,IADApT,KAAKkC,gBAAiB,EACK,WAAvBlC,KAAK2N,cACL3N,KAAK0a,cAAc1a,KAAKsG,YAAamJ,EAAKL,mBAEzC,IAA2B,SAAvBpP,KAAK2N,cACV3N,KAAK2a,YAAY3a,KAAKsG,YAAamJ,OAElC,CACD,GAAIxB,IAAmBjO,KAAK4a,iBAAiBnL,EAAMoB,GAAS,CACpD6C,EAAa1T,KAAK0T,WAAW7C,IAC5B3N,oBAAkB2N,IAAW6C,EAAW/S,OAAS,GAClD+S,EAAW9I,KAAK,GAAI9H,MAAK9C,KAAKqG,WAAWoJ,KACzCzP,KAAKoD,eAAgByN,OAAQ6C,IAAc,GAC3C1T,KAAKoD,eAAgB+C,MAAO0K,EAAOA,EAAOlQ,OAAS,KAAM,IAGzDX,KAAKoD,eAAgByN,QAAS,GAAI/N,MAAK9C,KAAKqG,WAAWoJ,OAAW,OAItEzP,MAAKoD,eAAgB+C,MAAO,GAAIrD,MAAK9C,KAAKqG,WAAWoJ,MAAU,EAEnEzP,MAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWoJ,IAEhD,GAAI/F,GAAmBnF,UAAQ1C,EAAS,IAAMV,EAa9C,IAZI+B,oBAAkBwG,KAClBA,EAAmB1J,KAAK0J,kBAEvBuE,GAAmB/K,oBAAkBwG,EAAiBC,cAAc,IAAMpI,KAC3E0F,eAAayC,EAAiBC,cAAc,IAAMpI,IAAYA,GAE7D0M,GAAmB/K,oBAAkBwG,EAAiBC,cAAc,IAAMnI,KAC3EyF,eAAayC,EAAiBC,cAAc,IAAMnI,IAAeA,GAEhEyM,GAAmB/K,oBAAkBwG,EAAiBC,cAAc,IAAMlI,KAC3EwF,eAAayC,EAAiBC,cAAc,IAAMlI,IAAeA,GAEjEwM,EAAgB,CAGhB,IAAK,GAFDyF,GAAa1T,KAAK0T,WAAW7C,GAC7B+E,EAAahW,MAAMM,UAAU8K,MAAMjJ,KAAK/B,KAAK0J,iBAAiBuB,iBAAiB,OAC1EtE,EAAQ,EAAGA,EAAQiP,EAAWjV,OAAQgG,IAAS,CACpD,GAAIkU,GAAcnR,EAAiBuB,iBAAiB,MAAazJ,GAAa,GAC1EsZ,EAAkBpR,EAAiBuB,iBAAiB,MAAa1J,GAAU,EAC3EqU,GAAWjP,KAAWkU,GACtB5T,eAAa2O,EAAWjP,IAASnF,GAEjCoU,EAAWjP,KAAWmU,GACrB9a,KAAK4a,iBAAiB,GAAI9X,MAAK8D,SAASkU,EAAgB3W,aAAa,MAAMgK,MAAM,KAAK,GAAI,KAAM0C,IACjG5J,eAAa2O,EAAWjP,IAASpF,GAGzC,GAAIM,EAAQ6B,UAAU+I,SAASlL,GAAW,CACtC0F,eAAapF,GAAUN,EACvB,KAAK,GAAIP,GAAI,EAAGA,EAAI0S,EAAW/S,OAAQK,IAAK,CACxC,GACIuS,IAAkBf,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,QAASsB,SADnC,cAAtBxT,KAAK4C,aAAgC,YAAc,UAI/D,IAFsB5C,KAAK+C,UAAUqP,WAAW3C,EAAM8D,KACjCvT,KAAK+C,UAAUqP,WAAWsB,EAAW1S,GAAIuS,GACtB,CAChC5M,EAAQ+M,EAAWE,QAAQF,EAAW1S,GAC1C0S,GAAWV,OAAOrM,EAAO,GACzBO,YAAUrF,GAAUL,IAG5BxB,KAAKoD,eAAgByN,OAAQ6C,IAAc,OAG3CxM,aAAUrF,GAAUN,OAIxB2F,aAAUrF,GAAUN,EAExBvB,MAAKkC,gBAAiB,GAE1BR,EAAaxB,UAAU0a,iBAAmB,SAAUG,EAAOlK,GACvD,GAAImK,IAAgB,CACpB,KAAK9X,oBAAkB2N,GACnB,IAAK,GAAIoK,GAAgB,EAAGA,EAAgBpK,EAAOlQ,OAAQsa,IAAiB,CACxE,GAAIhT,GAA8B,cAAtBjI,KAAK4C,aAAgC,YAAc,SACzC5C,MAAK+C,UAAUqP,WAAW2I,GAC5CvI,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,QAASsB,SAAUvL,MAExCjI,KAAK+C,UAAUqP,WAAWvB,EAAOoK,IAClDzI,OAAQ,KAAMvK,KAAM,OAAQiK,SAAU,QAASsB,SAAUvL,MAGzD+S,GAAgB,GAI5B,MAAOA,IAEXtZ,EAAaxB,UAAU2W,wBAA0B,WAC7C9S,aAAW/D,KAAK2I,OACZG,wBAAyB,GAAK9I,KAAK8Y,yBAG3CpX,EAAaxB,UAAU+Y,oBAAsB,SAAUzU,GAC/CA,EACKtB,oBAAkBlD,KAAK+H,gBACxBsB,eAAaQ,OAAO7J,KAAK+H,aAAc,QAAS/H,KAAK8P,yBACrD5I,YAAUlH,KAAK+H,cAAe,GAAK1G,GACnC6F,YAAUlH,KAAK+H,cAAe,GAAKzG,GACnCtB,KAAK+H,aAAa3D,aAAa,gBAAiB,UAIpDiF,eAAa1F,IAAI3D,KAAK+H,aAAc,QAAS/H,KAAK8P,yBAClD7I,eAAajH,KAAK+H,cAAe,GAAK1G,GACtC4F,eAAajH,KAAK+H,cAAe,GAAKzG,GACtCtB,KAAK+H,aAAa3D,aAAa,gBAAiB,WAGxD1C,EAAaxB,UAAU0S,mBAAqB,SAAUpJ,GAClDuD,SAAO/M,KAAKgO,mBAAqByJ,KAAM,kBACvCzX,KAAKkb,QAAQ,gBAAiB1R,IAElC9H,EAAaxB,UAAUib,eAAiB,SAAUpE,GAC9ChK,SAAO/M,KAAKob,eAAiB3D,KAAM,YAAa4D,MAAOtE,IACvD/W,KAAKkb,QAAQ,YAAalb,KAAKob,gBAEnC1Z,EAAaxB,UAAU+P,gBAAkB,SAAUoL,GAC/Crb,KAAKob,eAAkBhN,KAAMpO,KAAK2N,cAAe8B,KAAMzP,KAAKsG,aAC5DtG,KAAKmb,eAAeE,IAExB3Z,EAAaxB,UAAUiZ,gBAAkB,SAAU3U,GAC3CA,EACKtB,oBAAkBlD,KAAK+H,gBACxBsB,eAAaQ,OAAO7J,KAAKsI,SAAU,QAAStI,KAAK+P,qBACjD7I,YAAUlH,KAAKsI,UAAWjH,GAC1B6F,YAAUlH,KAAKsI,UAAWhH,GAC1BtB,KAAKsI,SAASlE,aAAa,gBAAiB,UAIhDiF,eAAa1F,IAAI3D,KAAKsI,SAAU,QAAStI,KAAK+P,qBAC9C9I,eAAajH,KAAKsI,UAAWjH,GAC7B4F,eAAajH,KAAKsI,UAAWhH,GAC7BtB,KAAKsI,SAASlE,aAAa,gBAAiB,WAGpD1C,EAAaxB,UAAUob,QAAU,SAAUC,EAAWC,EAASC,GAC3D,GACIlW,GACAmW,EAFAhQ,EAAQ8P,EAAQpM,aAepB,OAZA7J,GAAMmG,EACNgQ,EAAS,EACLD,IAEAlW,GADAmG,GAAgBA,EAAQ+P,GACV/P,EAAQ+P,EAAWA,EAAW,GAE5CF,EAAUnM,cAAgB7J,EAC1BmW,EAAS,EAEJH,EAAUnM,cAAgB1D,IAC/BgQ,GAAU,GAEPA,GAEXha,EAAaxB,UAAU0P,cAAgB,SAAUH,GAC7C,OAAQA,IAASzP,KAAKwC,MAAQiN,IAASzP,KAAKyC,KAEhDf,EAAaxB,UAAUwP,iBAAmB,SAAUD,GAChD,GAA0B,cAAtBzP,KAAK4C,aACL,MAAO6M,GAAKyB,YAAclR,KAAKwC,IAAI0O,YAC5BzB,EAAKL,eAAiBpP,KAAKwC,IAAI4M,eAC/BK,EAAKyB,YAAclR,KAAKyC,IAAIyO,YAC5BzB,EAAKL,eAAiBpP,KAAKyC,IAAI2M,aAGtC,IAAI8H,GAAclX,KAAKyQ,cAAc0G,eAAe1H,EACpD,OAAOyH,GAAYtC,OAAU5U,KAAKyQ,cAAc0G,eAAe,GAAIrU,MAAK,KAAM,EAAG,KAAM8R,OAChFsC,EAAY1B,MAASxV,KAAKyQ,cAAc0G,eAAe,GAAIrU,MAAK,KAAM,EAAG,KAAM0S,MAC/E0B,EAAYtC,OAAU5U,KAAKyQ,cAAc0G,eAAe,GAAIrU,MAAK,KAAM,EAAG,KAAM8R,OAChFsC,EAAY1B,MAASxV,KAAKyQ,cAAc0G,eAAe,GAAIrU,MAAK,KAAM,EAAG,KAAM0S,MAG9F9T,EAAaxB,UAAUkZ,YAAc,SAAU1N,EAAOnG,GAClD,MAAOvF,MAAKsb,QAAQ5P,EAAOnG,EAAK,IAEpC7D,EAAaxB,UAAUmZ,cAAgB,SAAU3N,EAAOnG,GACpD,MAAOvF,MAAKsb,QAAQ5P,EAAOnG,EAAK,KAEpC7D,EAAaxB,UAAUqL,WAAa,SAAUoQ,EAAO3a,GACjD,MAAO2a,GAAM3Q,MAAMhK,GAAG4a,OAAOD,EAAM3Q,MAAM,EAAGhK,KAEhDU,EAAaxB,UAAUyP,OAAS,SAAUF,EAAMzO,EAAGyM,EAAGhL,EAAKD,GACvD,GAAIqZ,GAAS7a,EACTmF,EAAQ,GAAIrD,OAAM2M,EACtB,KAAKvM,oBAAkBlD,KAAK0J,oBAAsBxG,oBAAkBuK,GAAI,CACpE,KAAOzN,KAAK8b,WAAW,GAAIhZ,OAAM2M,GAAOoM,EAAQpZ,EAAKD,IACjDqZ,GAAU7a,CAEd,IAAI+a,GAAa,GAAIjZ,MAAKqD,EAAMwO,QAAQxO,EAAM4K,UAAY8K,GAC1DA,IAAWE,GAActZ,IAAQsZ,GAAcvZ,EAAOqZ,IAAW7a,EAAIA,EAAIA,EAAIA,EAAI6a,EAErFpM,EAAKkF,QAAQlF,EAAKsB,UAAY8K,IAElCna,EAAaxB,UAAU4b,WAAa,SAAUrM,EAAMoM,EAAQpZ,EAAKD,GAC7D,GAAI2D,GAAQ,GAAIrD,MAAK2M,EAAKkF,QAAQlF,EAAKsB,UAAY8K,IAC/CjG,KACAnD,GAAa,CACjB,MAAMvP,oBAAkBiD,IAAUA,EAAM+K,gBAAkBhO,oBAAkBlD,KAAKsG,cAAgBtG,KAAKsG,YAAY4K,YAAa,CAQ3H0E,GAN0B,cAAtB5V,KAAK4C,aACI5C,KAAKwQ,WAAWrK,GAGhBnG,KAAKyQ,cAAcC,kBAAkB1Q,KAAKsG,YAAaH,IAEhD6V,OAAO,SAAUna,GACjC,MAAOA,GAAQ6B,UAAU+I,SAASpL,SAItCuU,GAAa5V,KAAK0J,iBAAiBuB,iBAAiB,MAAQ5J,EAEhE,KAAK8E,QAAsBA,OACnByP,EAAWjV,OACX,IAAK,GAAIK,GAAI,EAAGA,EAAI4U,EAAWjV,UAE3B8R,GAAetM,IAAW,GAAIrD,MAAK8D,SAASgP,EAAW5U,GAAGgI,GAAI,KAF3BhI,KAS/C,MAAOyR,IAEX/Q,EAAaxB,UAAUqa,WAAa,SAAUhb,GAC1C,GAAIkQ,GACAwM,EAAU,GAAInZ,MAAK9C,KAAKqG,WAAW9G,GACvCkQ,GAAO,EAEP,KADA,GAAImF,GAAQqH,EAAQ/K,WACb+K,EAAQ/K,aAAe0D,KACxBnF,EACFwM,EAAQtH,QAAQlF,EAEpB,OAAOA,GAAO,GAElB/N,EAAaxB,UAAUwa,cAAgB,SAAUjL,EAAM+F,GACnD/F,EAAKuF,YAAYQ,GACjBxV,KAAKoD,eAAgB+C,MAAO,GAAIrD,MAAK9C,KAAKqG,WAAWoJ,MAAU,IAEnE/N,EAAaxB,UAAUya,YAAc,SAAUlL,EAAMtJ,GACjDsJ,EAAKuF,YAAY7O,EAAMiJ,cAAejJ,EAAM+K,WAAYzB,EAAKsB,WACzD5K,EAAM+K,aAAezB,EAAKyB,aAC1BzB,EAAKkF,QAAQ,GACb3U,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWF,KAEhDnG,KAAKoD,eAAgB+C,MAAO,GAAIrD,MAAK9C,KAAKqG,WAAWoJ,MAAU,IAEnE/N,EAAaxB,UAAUgZ,aAAe,SAAUxN,EAAOnG,GAWnD,MATImG,GAAM0D,cAAgB7J,EAAI6J,cACjB,EAEJ1D,EAAM0D,cAAgB7J,EAAI6J,eACrB,EAGD1D,EAAMwF,aAAe3L,EAAI2L,WAAa,EAAIxF,EAAMwF,WAAa3L,EAAI2L,WAAa,GAAK,GAIpGxP,EAAaxB,UAAUmG,WAAa,SAAU6V,GAC1C,MAAIA,aAAmBpZ,MACXoZ,EAAQC,cAGR,GAAKD,GAGrBxa,EAAaxB,UAAUgY,UAAY,WACZ,WAAflY,KAAK0L,OAAqC,SAAf1L,KAAK0L,OAChC1L,KAAKoD,eAAgBsI,MAAO,UAAW,GAExB,WAAf1L,KAAK4N,OAAqC,SAAf5N,KAAK4N,OAChC5N,KAAKoD,eAAgBwK,MAAO,UAAW,GAEvC5N,KAAK6N,cAAc7N,KAAK4N,OAAS5N,KAAK6N,cAAc7N,KAAK0L,QACzD1L,KAAKoD,eAAgBwK,MAAO,UAAW,IAG/ClM,EAAaxB,UAAU6Q,QAAU,SAAUtB,EAAMuB,GAI7C,MAHIA,KACAvB,EAAO,GAAI3M,MAAK2M,EAAK2M,eAAe,SAAWC,SAAUrL,MAEtDvB,GAEXrP,GACIkc,WAAS,GAAIxZ,MAAK,KAAM,EAAG,KAC5BpB,EAAaxB,UAAW,UAAO,IAClCE,GACIkc,YAAS,IACV5a,EAAaxB,UAAW,cAAW,IACtCE,GACIkc,WAAS,OACV5a,EAAaxB,UAAW,eAAY,IACvCE,GACIkc,WAAS,GAAIxZ,MAAK,KAAM,GAAI,MAC7BpB,EAAaxB,UAAW,UAAO,IAClCE,GACIkc,WAAS,OACV5a,EAAaxB,UAAW,qBAAkB,IAC7CE,GACIkc,WAAS,cACV5a,EAAaxB,UAAW,mBAAgB,IAC3CE,GACIkc,WAAS,UACV5a,EAAaxB,UAAW,YAAS,IACpCE,GACIkc,WAAS,UACV5a,EAAaxB,UAAW,YAAS,IACpCE,GACIkc,YAAS,IACV5a,EAAaxB,UAAW,iBAAc,IACzCE,GACIkc,WAAS,aACV5a,EAAaxB,UAAW,eAAY,IACvCE,GACIkc,YAAS,IACV5a,EAAaxB,UAAW,sBAAmB,IAC9CE,GACIkc,WAAS,UACV5a,EAAaxB,UAAW,sBAAmB,IAC9CE,GACIkc,YAAS,IACV5a,EAAaxB,UAAW,wBAAqB,IAChDE,GACIkc,WAAS,OACV5a,EAAaxB,UAAW,iBAAc,IACzCE,GACIkc,WAAS,OACV5a,EAAaxB,UAAW,2BAAwB,IACnDE,GACImc,WACD7a,EAAaxB,UAAW,cAAW,IACtCE,GACImc,WACD7a,EAAaxB,UAAW,gBAAa,IACxCE,GACImc,WACD7a,EAAaxB,UAAW,gBAAa,IACxCE,GACImc,WACD7a,EAAaxB,UAAW,oBAAiB,IAC5CwB,EAAetB,GACXoc,yBACD9a,IAEL+a,aAcEC,EAA0B,SAAU/a,GAUpC,QAAS+a,GAAS9a,EAASC,GACvB,MAAOF,GAAOI,KAAK/B,KAAM4B,EAASC,IAAY7B,KA4hBlD,MAtiBAX,GAAUqd,EAAU/a,GAkBpB+a,EAASxc,UAAUoC,OAAS,WAIxB,GAH0B,YAAtBtC,KAAK4C,kBAAqDwV,KAAvBpY,KAAKyQ,eACxCkM,aAAW,8EAEX3c,KAAK4c,kBAA2C,gBAAhB5c,MAAK6Q,SAAwB3N,oBAAkBlD,KAAK6Q,SAAW7Q,KAAK6Q,OAAOlQ,OAAS,EAAG,CAGvH,IAAK,GAFDkc,MACAnJ,KACKoJ,EAAQ,EAAGA,EAAQ9c,KAAK6Q,OAAOlQ,OAAQmc,KACK,IAA7CD,EAAWjJ,SAAS5T,KAAK6Q,OAAOiM,MAChCD,EAAWjS,MAAM5K,KAAK6Q,OAAOiM,IAC7BpJ,EAAW9I,KAAK5K,KAAK6Q,OAAOiM,IAGpC9c,MAAKoD,eAAgByN,OAAQ6C,IAAc,EAC3C,KAAK,GAAI/M,GAAQ,EAAGA,EAAQ3G,KAAK6Q,OAAOlQ,OAAQgG,IAC5C,IAAK3G,KAAKoG,eAAepG,KAAK6Q,OAAOlK,IACjC,GAAoC,gBAAxB3G,MAAK6Q,OAAOlK,IAAwB3G,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAK6Q,OAAOlK,MAAW,CAChH,GAAIoW,GAAW,GAAIja,MAAK9C,KAAKqG,WAAWrG,KAAK6Q,OAAOlK,IACpD3G,MAAK6Q,OAAOmC,OAAOrM,EAAO,GAC1B3G,KAAK6Q,OAAOmC,OAAOrM,EAAO,EAAGoW,OAG7B/c,MAAK6Q,OAAOmC,OAAOrM,EAAO,EAItC3G,MAAKoD,eAAgB+C,MAAOnG,KAAK6Q,OAAO7Q,KAAK6Q,OAAOlQ,OAAS,KAAM,GACnEX,KAAKgd,eAAiBhd,KAAK6Q,OAAOlQ,OAStC,GAPAX,KAAKkG,eACLlG,KAAKgH,eACwB,aAAzBhH,KAAKyD,kBACLzD,KAAKid,UAAUjd,KAAKyE,SACpBzE,KAAKkd,SAASld,KAAKmd,WAEvBxb,EAAOzB,UAAUoC,OAAOP,KAAK/B,MACA,aAAzBA,KAAKyD,gBAAgC,CACrC,GAAI2Z,GAAO7Y,UAAQvE,KAAK6B,QAAS,OAC7Bub,IACA/T,eAAa1F,IAAIyZ,EAAM,QAASpd,KAAKqd,iBAAiB/P,KAAKtN,OAE/DA,KAAKsd,YAAYtd,KAAKud,sBAE1Bvd,KAAKwd,kBAETd,EAASxc,UAAU+c,UAAY,SAAUQ,GAChCA,EAIDxW,eAAajH,KAAK6B,SAAUR,GAH5B6F,YAAUlH,KAAK6B,SAAUR,IAMjCqb,EAASxc,UAAUgd,SAAW,SAAUQ,EAAaC,GAC5Cza,oBAAkBya,KACnBA,EAAeA,EAAYC,QAAQ,OAAQ,KAAMC,QAEhD3a,oBAAkBwa,KACnBA,EAAeA,EAAYE,QAAQ,OAAQ,KAAMC,QAEhD3a,oBAAkBya,IAAgC,KAAhBA,GACnC1W,eAAajH,KAAK6B,SAAU8b,EAAYxP,MAAM,MAE7CjL,oBAAkBwa,IACnBxW,YAAUlH,KAAK6B,SAAU6b,EAAYvP,MAAM,OAGnDuO,EAASxc,UAAU4d,iBAAmB,WAClC,GAAIC,GAAe,GAAIjb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,oBACxD+H,EAAc,GAAIlb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,mBAC3D,OAAQjW,MAAKmG,MAAM8P,oBAAsBF,KAAKtT,IAAIub,EAAaD,IAEnErB,EAASxc,UAAUod,YAAc,SAAUW,GACvC,IAAK/a,oBAAkBlD,KAAKud,uBAAyBvd,KAAKmG,MAAO,CAC7D,GAEI+X,GAFqBD,GACA,GAAInb,OAAOmT,oBAAsB,EAE1DiI,GAAele,KAAK8d,mBAAqBI,IAAiBA,EAC1Dle,KAAKmG,MAAQ,GAAIrD,MAAK9C,KAAKmG,MAAMiU,UAA4B,GAAf8D,EAAoB,GAAK,OAG/ExB,EAASxc,UAAUmd,iBAAmB,WAClCrd,KAAKoD,eAAgB+C,MAAO,OAAQ,IAExCuW,EAASxc,UAAUgG,aAAe,WACJ,gBAAflG,MAAKmG,OACZnG,KAAKoD,eAAgB+C,MAAOnG,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKmG,WAAY,GAE9FxE,EAAOzB,UAAUgG,aAAanE,KAAK/B,KAAMA,KAAKmG,QACzCjD,oBAAkBlD,KAAKmG,QAAUnG,KAAKwC,KAAOxC,KAAKyC,KAAOzC,KAAKmG,OAASnG,KAAKwC,KAAOxC,KAAKmG,OAASnG,KAAKyC,MACvGzC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKmG,SAEjDgQ,OAAOnW,KAAKmG,QACZnG,KAAKoD,eAAgB+C,MAAO,OAAQ,IAG5CuW,EAASxc,UAAU8G,aAAe,WACD,aAAzBhH,KAAKyD,mBACAP,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,OAASnG,KAAKwC,KAAOxC,KAAKwC,KAAOxC,KAAKyC,KAC7EzC,KAAKoD,eAAgB+C,MAAOnG,KAAKwC,MAAO,GACxCxC,KAAKme,aAAgBhY,MAAOnG,KAAKmG,SAG5BjD,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,OAASnG,KAAKyC,KAAOzC,KAAKwC,KAAOxC,KAAKyC,MAC7EzC,KAAKoD,eAAgB+C,MAAOnG,KAAKyC,MAAO,GACxCzC,KAAKme,aAAgBhY,MAAOnG,KAAKmG,SAIhB,aAAzBnG,KAAKyD,iBAAmCP,oBAAkBlD,KAAKmG,OAW/DxE,EAAOzB,UAAU8G,aAAajF,KAAK/B,KAAMA,KAAKmG,QAVzCjD,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,MAAQnG,KAAKwC,KAAOxC,KAAKwC,KAAOxC,KAAKyC,IAC5Ed,EAAOzB,UAAU8G,aAAajF,KAAK/B,KAAMA,KAAKwC,MAGzCU,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,MAAQnG,KAAKyC,KAAOzC,KAAKwC,KAAOxC,KAAKyC,KAC5Ed,EAAOzB,UAAU8G,aAAajF,KAAK/B,KAAMA,KAAKyC,MAQ9Dia,EAASxc,UAAUke,iBAAmB,SAAUjY,GAC5C,GAAImN,GAAY,GAAIxQ,KAapB,OAZKI,qBAAkBlD,KAAKgR,YACxBsC,EAAY3R,EAAOzB,UAAU6Q,QAAQhP,KAAK/B,KAAMsT,EAAWtT,KAAKgR,WAEhE7K,GAASjD,oBAAkBlD,KAAKgR,WAChCsC,EAAU9P,SAAS2C,EAAMiL,YACzBkC,EAAU+K,WAAWlY,EAAMkL,cAC3BiC,EAAUzQ,WAAWsD,EAAMmL,cAC3BgC,EAAUgL,gBAAgBnY,EAAMoL,oBAGhC+B,EAAY,GAAIxQ,MAAKwQ,EAAUlE,cAAekE,EAAUpC,WAAYoC,EAAUvC,UAAW,EAAG,EAAG,EAAG,GAE/FuC,GAEXoJ,EAASxc,UAAUwM,iBAAmB,SAAUe,GAC5C,GAAIzN,KAAKmJ,gBAAiB,CACtB,GAAImK,GAAYtT,KAAKoe,iBAAiBpe,KAAKmG,MAI3C,IAHAnG,KAAKoD,eAAgB+C,MAAOmN,IAAa,GACzCtT,KAAKmC,gBAAiB,EACtBnC,KAAKwZ,iBAAmB/L,EACpBzN,KAAK4c,iBAAkB,CACvB,GAAIlJ,GAAa1T,KAAK0T,WAAW1T,KAAK6Q,OACjClP,GAAOzB,UAAU0a,iBAAiB7Y,KAAK/B,KAAMsT,EAAWtT,KAAK6Q,UAC9D6C,EAAW9I,KAAK0I,GAChBtT,KAAKoD,eAAgByN,OAAQ6C,KAGrC/R,EAAOzB,UAAUwM,iBAAiB3K,KAAK/B,KAAMyN,EAAG,GAAI3K,OAAM9C,KAAKmG,UAGvEuW,EAASxc,UAAUmN,gBAAkB,SAAUI,GAC3C9L,EAAOzB,UAAUmN,gBAAgBtL,KAAK/B,KAAMyN,EAAGzN,KAAKmG,MAAOnG,KAAK4c,mBAQpEF,EAASxc,UAAU2P,UAAY,WAC3B,GAAI/N,GAAQ9B,IACZA,MAAKue,cAAgB,SAAU9Q,GAC3B3L,EAAM0c,cAAc/Q,IAExBzN,KAAKkY,YACLvW,EAAOzB,UAAU2P,UAAU9N,KAAK/B,KAAMA,KAAKmG,QAM/CuW,EAASxc,UAAUyE,cAAgB,WAC/B3E,KAAKye,aAAeze,KAAKmG,MACzBnG,KAAK0e,iBAAmB1e,KAAKmG,MAC7BxE,EAAOzB,UAAUyE,cAAc5C,KAAK/B,OAExC0c,EAASxc,UAAUgQ,WAAa,SAAUC,GACtC,MAAOxO,GAAOzB,UAAUgQ,WAAWnO,KAAK/B,KAAMmQ,IAElDuM,EAASxc,UAAU2L,aAAe,SAAU4B,EAAGtH,EAAOuH,GAClD/L,EAAOzB,UAAU2L,aAAa9J,KAAK/B,KAAMyN,EAAGzN,KAAKmG,MAAOuH,IAE5DgP,EAASxc,UAAUsQ,WAAa,SAAUlK,EAAaH,EAAOwY,EAAe9N,EAAQnD,EAAcD,GAC/F,GAAImR,GAAWjd,EAAOzB,UAAUsQ,WAAWzO,KAAK/B,KAAMsG,EAAatG,KAAKmG,MAAOnG,KAAK4c,iBAAkB5c,KAAK6Q,OAAQnD,EAAcD,EAIjI,OAHIzN,MAAK4c,kBACLjb,EAAOzB,UAAU+X,eAAelW,KAAK/B,KAAMA,KAAK4c,iBAAkB5c,KAAK6Q,QAEpE+N,GAEXlC,EAASxc,UAAUyL,YAAc,SAAU8B,GACb,cAAtBzN,KAAK4C,aACLjB,EAAOzB,UAAUyL,YAAY5J,KAAK/B,KAAMyN,EAAGzN,KAAKmG,OAGhDnG,KAAKyQ,cAAcoO,mBAAmBpR,EAAGzN,KAAKmG,QAGtDuW,EAASxc,UAAU0L,cAAgB,SAAU6B,GACf,cAAtBzN,KAAK4C,aACLjB,EAAOzB,UAAU0L,cAAc7J,KAAK/B,KAAMyN,EAAGzN,KAAKmG,OAGlDnG,KAAKyQ,cAAcqO,oBAAoBrR,EAAGzN,KAAKmG,QAGvDuW,EAASxc,UAAUyQ,eAAiB,SAAUyF,EAAUC,EAAOC,EAAS7I,GAC1C,cAAtBzN,KAAK4C,aACLjB,EAAOzB,UAAUyQ,eAAe5O,KAAK/B,KAAMoW,EAAUC,EAAOC,EAAS7I,EAAGzN,KAAKmG,OAG7EnG,KAAKyQ,cAAcG,sBAAsBwF,EAAUC,EAAOC,EAAS7I,EAAGzN,KAAKmG,OAE/EnG,KAAKme,aAAgBhY,MAAOnG,KAAKmG,MAAO0K,OAAQ7Q,KAAK6Q,QACrDpD,GAAgB,UAAXA,EAAExF,MAAoBwF,EAAE2F,cAAc1P,UAAU+I,SAASvL,GAAclB,KAAKue,cAAc9Q,GAAKzN,KAAKue,iBAE7G7B,EAASxc,UAAUiT,aAAe,SAAU1F,GACxC,GAAIsJ,GAAMtJ,EAAE2F,aAEZ,IADApT,KAAKiC,gBAAiB,EAClB8U,EAAIrT,UAAU+I,SAASvL,GACvB,GAAIlB,KAAK4c,iBAAkB,CACvB,GAAIlJ,GAAa1T,KAAK0T,WAAW1T,KAAK6Q,SACsC,IAAxE6C,EAAW3M,WAAW6M,QAAQ5T,KAAKgX,WAAWvJ,EAAG,MAAM1G,aACvD2M,EAAW9I,KAAK5K,KAAKgX,WAAWvJ,EAAG,OACnCzN,KAAKoD,eAAgByN,OAAQ6C,IAAc,GAC3C1T,KAAKoD,eAAgB+C,MAAOnG,KAAK6Q,OAAO7Q,KAAK6Q,OAAOlQ,OAAS,KAAM,IAGnEX,KAAKqC,eAAgB,MAIzBrC,MAAKoD,eAAgB+C,MAAOnG,KAAKgX,WAAWvJ,EAAG,QAAS,EAGhE,IAAIsR,GAAY/e,KAAK2N,aACrBhM,GAAOzB,UAAUiT,aAAapR,KAAK/B,KAAMyN,EAAGzN,KAAKmG,OAC7CnG,KAAK4c,kBAAoB5c,KAAKsG,cAAgBtG,KAAKmG,QAClDjD,oBAAkBlD,KAAK0J,iBAAiBuB,iBAAiB,IAAMzJ,GAAa,KAAqB,SAAdud,GACpF/e,KAAK0J,iBAAiBuB,iBAAiB,IAAMzJ,GAAa,GAAGkC,UAAUmG,OAAOrI,IAGtFkb,EAASxc,UAAUmX,WAAa,SAAUjJ,EAAMX,EAAGmP,EAAkBlP,GACjE/L,EAAOzB,UAAUmX,WAAWtV,KAAK/B,KAAMoO,EAAMX,EAAGzN,KAAK4c,iBAAkBlP,IAQ3EgP,EAASxc,UAAUuD,cAAgB,WAE/B,MADA9B,GAAOzB,UAAUuD,cAAc1B,KAAK/B,MAC7B,YAQX0c,EAASxc,UAAUwX,eAAiB,WAChC/V,EAAOzB,UAAUwX,eAAe3V,KAAK/B,KACrC,IAAI2X,IAAa,QAAS,SAC1B,OAAO3X,MAAK4X,aAAaD,IAW7B+E,EAASxc,UAAU2X,kBAAoB,SAAUC,EAASC,GACtD/X,KAAKgC,OAAS,GACdhC,KAAKuC,gBAAgBvC,KAAKwC,IAAKxC,KAAKyC,IACpC,KAAK,GAAI+H,GAAK,EAAGC,EAAKhL,OAAOiL,KAAKoN,GAAUtN,EAAKC,EAAG9J,OAAQ6J,IAExD,OADWC,EAAGD,IAEV,IAAK,QACGxK,KAAKkC,iBACwB,gBAAlB4V,GAAQ3R,MACfnG,KAAKoD,eAAgB+C,MAAO,GAAIrD,MAAK9C,KAAKqG,WAAWyR,EAAQ3R,UAAW,GAGxE2R,EAAQ3R,MAAQ,GAAIrD,MAAK9C,KAAKqG,WAAWyR,EAAQ3R,QAEjDgQ,OAAOnW,KAAKmG,QACZnG,KAAKoD,eAAgB+C,MAAO4R,EAAQ5R,QAAS,GAEjDnG,KAAKgf,SAET,MACJ,KAAK,SACD,GAAIhf,KAAKkC,eAAgB,CACrB,GAA8B,gBAAnB4V,GAAQjH,QAAiD,gBAAnBiH,GAAQjH,OACrD7Q,KAAKoD,eAAgByN,OAAQ,OAAQ,OAEpC,CAED,IAAK,GADD6C,GAAa1T,KAAK0T,WAAW1T,KAAK6Q,QAC7BlK,EAAQ,EAAGA,EAAQ+M,EAAW/S,OAAQgG,IAAS,CACpD,GAAIsY,GAAWvL,EAAW/M,EACtB3G,MAAKoG,eAAe6Y,KAActd,EAAOzB,UAAU0a,iBAAiB7Y,KAAK/B,KAAMif,EAAUvL,IACzFA,EAAW9I,KAAKqU,GAGxBjf,KAAKoD,eAAgByN,OAAQ6C,IAAc,GACvC1T,KAAK6Q,OAAOlQ,OAAS,GACrBX,KAAKoD,eAAgB+C,MAAO2R,EAAQjH,OAAOiH,EAAQjH,OAAOlQ,OAAS,KAAM,GAGjFX,KAAKiY,eAAejY,KAAK4c,iBAAkB5c,KAAK6Q,QAChD7Q,KAAKgf,SAET,KACJ,KAAK,mBACGhf,KAAKkC,iBACLlC,KAAKoD,eAAgBwZ,iBAAkB9E,EAAQ8E,mBAAoB,GACnE5c,KAAKgf,SAET,MACJ,KAAK,UACDhf,KAAKid,UAAUjd,KAAKyE,QACpB,MACJ,KAAK,WAC4B,aAAzBzE,KAAKyD,iBACLzD,KAAKkd,SAASpF,EAAQqF,SAAUpF,EAAQoF,SAE5C,MACJ,SACIxb,EAAOzB,UAAU2X,kBAAkB9V,KAAK/B,KAAM8X,EAASC,EAAS/X,KAAK4c,iBAAkB5c,KAAK6Q,QAGxG7Q,KAAKoC,cAAgBpC,KAAKqP,WAAarP,KAAKoC,eAAiBpC,KAAKoC,cAAgBpC,KAAKoC,eAO3Fsa,EAASxc,UAAUoZ,QAAU,WAEzB,GADA3X,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,MACD,aAAzBA,KAAKyD,gBAAgC,CACrCzD,KAAKme,YAAc,IACnB,IAAIf,GAAO7Y,UAAQvE,KAAK6B,QAAS,OAC7Bub,IACA/T,eAAaQ,OAAOuT,EAAM,QAASpd,KAAKqd,iBAAiB/P,KAAKtN,SAa1E0c,EAASxc,UAAU4N,WAAa,SAAUM,EAAMqB,EAAM/B,GAClD1N,KAAKgH,eACLrF,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMqB,EAAM/B,IASvDgP,EAASxc,UAAUyN,YAAc,WAC7B,MAAOhM,GAAOzB,UAAUyN,YAAY5L,KAAK/B,OAU7C0c,EAASxc,UAAUgf,QAAU,SAAUnE,GACnC,GAAqB,gBAAVA,IAAuC,gBAAVA,GAAoB,CACxD,GAAIrH,GAAa1T,KAAK0T,WAAW1T,KAAK6Q,OACtC,IAAqB,gBAAVkK,IAAsB,EAAQpa,OAAS,EAE9C,IAAK,GADDwe,GAAYpE,EACP/Z,EAAI,EAAGA,EAAIme,EAAUxe,OAAQK,IAC9BhB,KAAKoG,eAAe+Y,EAAUne,MAAQW,EAAOzB,UAAU0a,iBAAiB7Y,KAAK/B,KAAMmf,EAAUne,GAAI0S,MAC5FxQ,oBAAkBwQ,IAAeA,EAAW/S,OAAS,EACtD+S,EAAW9I,KAAKuU,EAAUne,IAG1B0S,GAAc,GAAI5Q,OAAMqc,EAAUne,UAM1ChB,MAAKoG,eAAe2U,KAAWpZ,EAAOzB,UAAU0a,iBAAiB7Y,KAAK/B,KAAM+a,EAAOrH,MAC9ExQ,oBAAkBwQ,IAAeA,EAAW/S,OAAS,EACtD+S,EAAW9I,QAGX8I,GAAc,GAAI5Q,OAAMiY,IAIpC/a,MAAKoD,eAAgByN,OAAQ6C,IAAc,GACvC1T,KAAK4c,kBACL5c,KAAKoD,eAAgB+C,MAAOnG,KAAK6Q,OAAO7Q,KAAK6Q,OAAOlQ,OAAS,KAAM,GAEvEX,KAAKiY,eAAejY,KAAK4c,iBAAkBlJ,GAC3C1T,KAAKgf,SACLhf,KAAKme,aAAgBhY,MAAOnG,KAAKmG,MAAO0K,OAAQ7Q,KAAK6Q,QACrD7Q,KAAKue,kBAUb7B,EAASxc,UAAUkf,WAAa,SAAUrE,GACtC,GAAqB,gBAAVA,IAAuC,gBAAVA,KAAuB7X,oBAAkBlD,KAAK6Q,SAAW7Q,KAAK6Q,OAAOlQ,OAAS,EAAG,CACrH,GAAI+S,GAAa1T,KAAK0T,WAAW1T,KAAK6Q,OACtC,IAAqB,gBAAVkK,IAAuB,EAAQpa,OAAS,EAE/C,IAAK,GADDwe,GAAYpE,EACPpU,EAAQ,EAAGA,EAAQwY,EAAUxe,OAAQgG,IAC1C,IAAS3F,EAAI,EAAGA,EAAI0S,EAAW/S,OAAQK,KAC9B0S,EAAW1S,KAAQme,EAAUxY,IAC9B+M,EAAWV,OAAOhS,EAAG,OAMjC,KAAK,GAAIA,GAAI,EAAGA,EAAI0S,EAAW/S,OAAQK,KAC9B0S,EAAW1S,KAAQ+Z,GACpBrH,EAAWV,OAAOhS,EAAG,EAIjChB,MAAKoD,eAAgByN,OAAQ6C,IAAc,GAC3C1T,KAAKgf,SACDhf,KAAK4c,kBACL5c,KAAKoD,eAAgB+C,MAAOnG,KAAK6Q,OAAO7Q,KAAK6Q,OAAOlQ,OAAS,KAAM,GAEvEX,KAAKme,aAAgBhY,MAAOnG,KAAKmG,MAAO0K,OAAQ7Q,KAAK6Q,QACrD7Q,KAAKue,kBAUb7B,EAASxc,UAAUmf,aAAe,SAAU5P,GACxC,GAAIlM,GAAY,GAAIT,OAAM2M,EAC1BzP,MAAKoD,eAAgB+C,MAAO5C,IAAa,GACzC5B,EAAOzB,UAAUwM,iBAAiB3K,KAAK/B,KAAM,KAAMuD,GAAW,IAElEmZ,EAASxc,UAAU8e,OAAS,WACxBhf,KAAKkG,eACLlG,KAAKgH,eACLrF,EAAOzB,UAAUyY,eAAe5W,KAAK/B,OAEzC0c,EAASxc,UAAUwO,WAAa,SAAUjB,EAAGgC,EAAM5N,GAC/CF,EAAOzB,UAAUwO,WAAW3M,KAAK/B,KAAMyN,EAAGgC,EAAM5N,EAAS7B,KAAK4c,iBAAkB5c,KAAK6Q,QACjF7Q,KAAK4c,mBAAqB1Z,oBAAkBlD,KAAK6Q,SAAW7Q,KAAK6Q,OAAOlQ,OAAS,GACjFX,KAAKoD,eAAgB+C,MAAOnG,KAAK6Q,OAAO7Q,KAAK6Q,OAAOlQ,OAAS,KAAM,GAEvEX,KAAKme,aAAgBhY,MAAOnG,KAAKmG,MAAO0K,OAAQ7Q,KAAK6Q,QACrD7Q,KAAKue,cAAc9Q,IAGvBiP,EAASxc,UAAUof,YAAc,SAAU7R,KAClCzN,KAAKmG,OAASnG,KAAKmG,MAAMsP,cAAgBzV,KAAKye,eAAiBze,KAAKye,aAAahJ,YAC/EzV,KAAK4c,oBACJ5c,KAAKqP,WAAarP,KAAKoC,cACvBpC,KAAKoC,eAAgB,EAGrBpC,KAAKkb,QAAQ,SAAUlb,KAAKme,aAEhCne,KAAKye,aAAe,GAAI3b,OAAM9C,KAAKmG,SAG3CuW,EAASxc,UAAUse,cAAgB,SAAU/Q,IACpCvK,oBAAkBlD,KAAKwZ,mBAAqBxZ,KAAKmC,iBAClDsL,EAAIzN,KAAKwZ,iBACTxZ,KAAKmC,gBAAiB,GAE1BnC,KAAKme,YAAY9C,MAAQ5N,GAAK,KAC9BzN,KAAKme,YAAYoB,cAAgBrc,oBAAkBuK,GAC9CvK,oBAAkBlD,KAAKmG,QACxBnG,KAAKoD,eAAgB+C,MAAOnG,KAAKmG,QAAS,GAEzCnG,KAAK4c,mBAAqB5c,KAAKmG,QAAUqZ,OAAOC,MAASvc,oBAAkBlD,KAAKmG,QAChFjD,oBAAkBlD,KAAKye,iBAAuC,OAAtBze,KAAKye,cAC1CtI,OAAOnW,KAAKmG,QAGVjD,oBAAkBlD,KAAK6Q,SAAW7Q,KAAKgd,iBAAmBhd,KAAK6Q,OAAOlQ,SAC5EX,KAAKsf,YAAY7R,GACjBzN,KAAKgd,eAAiBhd,KAAK6Q,OAAOlQ,QAJlCX,KAAKsf,YAAY7R,IAOzBrN,GACIkc,WAAS,OACVI,EAASxc,UAAW,YAAS,IAChCE,GACIkc,WAAS,OACVI,EAASxc,UAAW,aAAU,IACjCE,GACIkc,YAAS,IACVI,EAASxc,UAAW,uBAAoB,IAC3CE,GACImc,WACDG,EAASxc,UAAW,aAAU,IACjCwc,EAAWtc,GACPoc,yBACDE,IAELhb,GC9mFEge,EAAyB,WACzB,QAASA,GAAQC,GACb3f,KAAK4f,iBAAmBD,EAghB5B,MA9gBAD,GAAQxf,UAAUuD,cAAgB,WAC9B,MAAO,WAEXic,EAAQxf,UAAU2f,mBAAqB,SAAUpQ,EAAMrB,GACnD,GAAIrL,GAAY,GAAIC,wBAAqBhD,KAAK4f,iBAAiB3c,OAC/D,QAAQmL,GACJ,IAAK,OACDpO,KAAK4f,iBAAiBrX,mBAAmByD,YAAcjJ,EAAUqP,WAAW3C,GAAQxH,KAAM,WAAYuK,OAAQ,WAAYgB,SAAU,WACpI,MACJ,KAAK,SACDxT,KAAK4f,iBAAiBrX,mBAAmByD,YAAcjJ,EAAUqP,WAAW3C,GAAQxH,KAAM,WAAYuK,OAAQ,OAAQgB,SAAU,cAG5IkM,EAAQxf,UAAUwQ,kBAAoB,SAAUpK,EAAaH,EAAO8H,EAAgB4C,GAChF,GAGIX,GAHAI,KAEAH,EAAY,GAAIrN,MAAK9C,KAAK8f,eAAexZ,GAE7CtG,MAAK6f,mBAAmBvZ,EAAa,OACrC,IAAI4Q,GAAclX,KAAKmX,eAAehH,GAClC4P,EAAkB/f,KAAKoX,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAO,GACxE3D,EAAeiG,EAAYtC,KAE/B,KADAzE,EAAY4P,EACL5P,EAAUqB,WAAaxR,KAAK4f,iBAAiBzc,gBAChDnD,KAAK4f,iBAAiBnO,aAAatB,GAAW,MAElD,KAAK,GAAIuB,GAAM,EAAGA,EAXD,KAWqBA,EAAK,CACvC,GAAIC,GAAU3R,KAAK4f,iBAAiBtb,cAAc,MAAQuD,UAnC3D,WAoCK+J,EAAa5R,KAAK4f,iBAAiBtb,cAAc,OACjDoN,GAAM,GAAM,GAAK1R,KAAK4f,iBAAiBvU,aACvCuG,EAAW5F,YAAc,GAAKhM,KAAK4f,iBAAiB5N,QAAQ7B,GAC5DwB,EAAQnJ,YAAYoJ,GACpB1K,YAAUyK,GA9CT,iBA+CDrB,EAAO1F,KAAK+G,IAEhBzB,EAAa,GAAIpN,OAAMqN,GACvBA,EAAYnQ,KAAK4f,iBAAiB1P,WAAWC,EAC7C,IAAI8B,IAAsBhK,KAAM,WAAYiK,SAAU,OAAQsB,SAAU,WACpE/D,EAAOzP,KAAK4f,iBAAiB7c,UAAUoP,UAAUnS,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,EAAW8B,GAAoBA,GAC3HI,EAAQrS,KAAKggB,eAAe7P,GAC5BpB,EAAQ/O,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,GAAalI,KAAM,OAAQiK,SAAU,OAAQsB,SAAU,YAC1GjB,EAAUvS,KAAK4f,iBAAiBtb,cAAc,OAClDiO,GAAQvG,YAAchM,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,GAAalI,KAAM,OAAQiK,SAAU,IAAKsB,SAAU,WACrH,IAAIhP,GAAYxE,KAAK4f,iBAAiBpd,IAAM2N,GAAenQ,KAAK4f,iBAAiBnd,IAAM0N,CACnF3L,IACA0C,YAAUmL,GA9DX,cA+DCnL,YAAUmL,GA9DZ,cAiEEE,EAAQnO,aAAa,QAAS,GAAK2K,GAGnCkC,IADmBjR,KAAKmX,eAAehH,GACLyE,OAClC1N,YAAUmL,GA1ET,iBA4EsB,IAAvBlC,EAAUqB,UAAyC,IAAvBrB,EAAUqB,UACtCtK,YAAUmL,GAvEZ,aAyEFA,EAAM7J,YAAY+J,GAClBvS,KAAK4f,iBAAiB5R,mBAClByB,KAAMU,EACNsC,YAAY,EACZ5Q,QAASwQ,EACTK,aAAclO,EAElB,IAAImO,GAAW3S,KAAK4f,iBAAiB5R,iBAErC,IADAhO,KAAK4f,iBAAiBhN,mBAAmBD,GACrCA,EAASF,WACT,GAAIzS,KAAK4f,iBAAiBhD,kBACtB,IAAK1Z,oBAAkBlD,KAAK4f,iBAAiB/O,SAAW7Q,KAAK4f,iBAAiB/O,OAAOlQ,OAAS,EAC1F,IAAK,GAAIgG,GAAQ,EAAGA,EAAQkK,EAAOlQ,OAAQgG,KACnCmM,GAAmB,GAAIhQ,MAAK9C,KAAK4f,iBAAiB7c,UAAUqP,WAAWO,EAASlD,MAAQxH,KAAM,OAAQiK,SAAU,MAAOsB,SAAU,iBACjIT,GAAkB,GAAIjQ,MAAK9C,KAAK4f,iBAAiB7c,UAAUqP,WAAWpS,KAAK4f,iBAAiB/O,OAAOlK,IAAUsB,KAAM,OAAQiK,SAAU,MAAOsB,SAAU,gBAEtJxT,KAAK4f,iBAAiB/O,OAAOmC,OAAOrM,EAAO,GAC3CA,GAAS,OAKhBR,KAAUA,IAAWwM,EAASlD,MACnCzP,KAAK4f,iBAAiBxc,eAAgB+C,MAAO,OAAQ,EAGzDnG,MAAK4f,iBAAiB5R,kBAAkByE,aAAeJ,EAAM3O,UAAU+I,SAjGxE,gBAkGCvF,YAAUmL,GAtGX,cAuGCnL,YAAUmL,GAtGZ,cAuGOrS,KAAK4f,iBAAiB5R,kBAAkByB,OAAUzP,KAAK4f,iBAAiBrc,YACzEvD,KAAK4f,iBAAiBtc,eAAgB,GAG9C,IAAI2P,GAAgBZ,EAAM3O,UAAU+I,SAhH/B,iBAiHDyG,EAAcb,EAAM3O,UAAU+I,SA7G/B,aAiHH,IAHKyG,GACD7J,eAAa1F,IAAI0O,EAAO,QAASrS,KAAK4f,iBAAiBzM,aAAcnT,KAAK4f,mBAE1E5f,KAAK4f,iBAAiBhD,kBAAqB1Z,oBAAkBlD,KAAK4f,iBAAiB/O,SAClFoC,GAAkBC,EAgBbD,GAAkBC,IAAelT,KAAK4f,iBAAiBvM,WAAWlD,EAAWhK,GAInFnG,KAAK4f,iBAAiB/L,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GAHhFY,YAAUmL,GA/HX,kBA8GiC,CAChC,IAAK,GAAIiB,GAAY,EAAGA,EAAYtT,KAAK4f,iBAAiB/O,OAAOlQ,OAAQ2S,IAAa,CAClF,GAAIR,GAAkB9S,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,GAAalI,KAAM,OAAQiK,SAAU,QAASsB,SAAU,YACrHT,EAAiB/S,KAAK4f,iBAAiB7c,UAAUqP,WAAWpS,KAAK4f,iBAAiB/O,OAAOyC,IAAcrL,KAAM,OAAQiK,SAAU,QAASsB,SAAU,WAClJV,KAAoBC,GACpB/S,KAAK4f,iBAAiBvM,WAAWlD,EAAWnQ,KAAK4f,iBAAiB/O,OAAOyC,IACzEpM,YAAUmL,GApHnB,cAuHSrS,KAAK4f,iBAAiB/L,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GAGpFtG,KAAK4f,iBAAiB/O,OAAOlQ,QAAU,GACvCX,KAAK4f,iBAAiB/L,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAO/L,GASpFmJ,EAAKsB,aAAc,GAAIjO,OAAOiO,WAAatB,EAAKyB,cAAe,GAAIpO,OAAOoO,YACtEzB,EAAKL,iBAAkB,GAAItM,OAAOsM,eAClClI,YAAUmL,GAnIlB,WAsIAlC,EAAY,GAAIrN,OAAMoN,GACtBI,EAAO1F,KAAK5K,KAAK4f,iBAAiB5R,kBAAkBnM,SACpD7B,KAAK4f,iBAAiBjQ,OAAOQ,EAAW,EAAG,KAAMnQ,KAAK4f,iBAAiBnd,IAAKzC,KAAK4f,iBAAiBpd,KAEtG,MAAO8N,IAEXoP,EAAQxf,UAAU0W,mBAAqB,WACnC,GAAI9T,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBtZ,cAAcqO,QAAQ,EACzE,IAAIlF,GAAO,GAAI3M,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBtZ,aAC9D,QAAQtG,KAAK4f,iBAAiBjS,eAC1B,IAAK,QAEG,GAAIsS,GAAmBjgB,KAAKkgB,oBAAoBzQ,EAAMzP,KAAK4f,iBAAiBpd,KAAO,EAC/E2d,EAAmBngB,KAAKkgB,oBAAoBzQ,EAAMzP,KAAK4f,iBAAiBnd,MAAQ,CACpFzC,MAAK4f,iBAAiB3G,oBAAoBgH,GAC1CjgB,KAAK4f,iBAAiBzG,gBAAgBgH,EAE1C,MACJ,KAAK,OAEG,GAAIC,GAAkBpgB,KAAKqgB,iBAAiB5Q,EAAMzP,KAAK4f,iBAAiBpd,KAAO,EAC3E8d,EAAkBtgB,KAAKqgB,iBAAiB5Q,EAAMzP,KAAK4f,iBAAiBnd,MAAQ,CAChFzC,MAAK4f,iBAAiB3G,oBAAoBmH,GAC1CpgB,KAAK4f,iBAAiBzG,gBAAgBmH,EAE1C,MACJ,KAAK,SACD,GACIC,GAAiBC,cAAYpJ,YADV,KACwC,EAAG,GAC9DqJ,EAAoBzgB,KAAK0gB,mBAAmBjR,EAAMzP,KAAK4f,iBAAiBpd,KAAO,EAC/Eme,EAAoB3gB,KAAK0gB,mBAAmBjR,EAAMzP,KAAK4f,iBAAiBnd,MAAQ,CACpFge,GAAoBD,cAAYpJ,YAAYpX,KAAK4f,iBAAiBrX,mBAAmByD,YAAYmC,MAAM,KAAK,GAAG0P,OAAQ,EAAG,GAAGzO,gBAAkBmR,EAAenR,eAAuBqR,EACrLzgB,KAAK4f,iBAAiB3G,oBAAoBwH,GAC1CzgB,KAAK4f,iBAAiBzG,gBAAgBwH,KAIlDjB,EAAQxf,UAAU2Z,YAAc,WAC5B7Z,KAAK4f,iBAAiB5d,OAAS,EAC/B,IAAIoM,GAAOpO,KAAK4f,iBAAiB/R,cAAc7N,KAAK4f,iBAAiBjS,eACjEuJ,EAAclX,KAAKmX,eAAenX,KAAK4f,iBAAiBtZ,YAC5D,QAAQtG,KAAK4f,iBAAiBjS,eAC1B,IAAK,OACD3N,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAO,EAAG0B,EAAYtC,MAAO,GAC9F5U,KAAK4f,iBAAiBvI,WAAWjJ,EACjC,MACJ,KAAK,QACDpO,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAQ,EAAG,GAC9F5U,KAAK4f,iBAAiBvI,WAAWjJ,EACjC,MACJ,KAAK,SACDpO,KAAK4f,iBAAiBgB,iBAAkB,EACpC1J,EAAY1B,KAAOxV,KAAK4f,iBAAiBhY,cAAcoE,YAAYmC,MAAM,KAAK,GAAG0P,QAAW,IAC5F3G,EAAY1B,KAAO0B,EAAY1B,KAAOxV,KAAK4f,iBAAiBhY,cAAcoE,YAAYmC,MAAM,KAAK,GAAG0P,QAAW,EAAI3G,EAAY1B,KAAO,EAAI0B,EAAY1B,MAE1JxV,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAO,GAAI0B,EAAYtC,MAAO,GAC/F5U,KAAK4f,iBAAiBvI,WAAWjJ,KAI7CsR,EAAQxf,UAAUyZ,gBAAkB,WAChC,GAAIhM,GAAc3N,KAAK4f,iBAAiB/R,cAAc7N,KAAK4f,iBAAiBjS,cAC5E3N,MAAK4f,iBAAiB5d,OAAS,EAC/B,IAAIkV,GAAclX,KAAKmX,eAAenX,KAAK4f,iBAAiBtZ,YAC5D,QAAQtG,KAAK4f,iBAAiBjS,eAC1B,IAAK,QACD3N,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAQ,EAAG,GAC9F5U,KAAK4f,iBAAiBvI,WAAW1J,EACjC,MACJ,KAAK,OACD3N,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAO,EAAG0B,EAAYtC,MAAO,GAC9F5U,KAAK4f,iBAAiBvI,WAAW1J,EACjC,MACJ,KAAK,SACD3N,KAAK4f,iBAAiBiB,qBAAsB,EAC5C7gB,KAAK4f,iBAAiBtZ,YAActG,KAAKoX,YAAYF,EAAY1B,KAAO,GAAI0B,EAAYtC,MAAQ,EAAG,GACnG5U,KAAK4f,iBAAiBvI,WAAW1J,KAI7C+R,EAAQxf,UAAU2e,mBAAqB,SAAUpR,EAAGtH,GAChDnG,KAAK4f,iBAAiB5L,wBACtB,IACI1D,MACA2D,EAAY/Q,oBAAkBiD,GAE9BgK,EADU,GAAIrN,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBtZ,cAE7D4Q,EAAclX,KAAKmX,eAAehH,EAEtCA,GADsBqQ,cAAYpJ,YAAYF,EAAY1B,KAAM,EAAG,EAEnE,IAAIrB,GAAM+C,EAAYtC,MAClBR,EAAK8C,EAAY1B,KACjBnB,EAAS6C,EAAY1B,KACrBlB,EAAStU,KAAKmX,eAAenX,KAAK4f,iBAAiBpd,KAAMgT,KACzDjB,EAAYvU,KAAKmX,eAAenX,KAAK4f,iBAAiBpd,KAAMoS,MAC5DJ,EAASxU,KAAKmX,eAAenX,KAAK4f,iBAAiBnd,KAAM+S,KACzDf,EAAYzU,KAAKmX,eAAenX,KAAK4f,iBAAiBnd,KAAMmS,KAChE5U,MAAK6f,mBAAmB7f,KAAK4f,iBAAiBtZ,YAAa,SAC3D,KAAK,GAAIsO,GAAQ,EAAGA,GAAS,KAAMA,EAAO,CACtC,GAAIkM,GAAgB9gB,KAAKmX,eAAehH,EAExCA,GADwBqQ,cAAYpJ,YAAY0J,EAActL,KAAMZ,EAAO,EAE3E,IAAIvC,GAAQrS,KAAKggB,eAAe7P,GAC5BoC,EAAUvS,KAAK4f,iBAAiBtb,cAAc,QAC9CuQ,EAAc1O,GACbnG,KAAKmX,eAAehR,GAAQyO,QAAW5U,KAAKmX,eAAehH,GAAYyE,MACxEvP,EAAUc,GAAUnG,KAAKmX,eAAehR,GAAQqP,OAASpB,GAAMS,CACnEtC,GAAQvG,YAAchM,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,GAAalI,KAAM,WAAYuK,OAAQ,MAAOgB,SAAU,YACpHxT,KAAK4f,iBAAiBpd,MAAQ6R,EAASC,GAAUM,EAAQL,GAAYF,IAAWC,IAAatU,KAAK4f,iBAAiBnd,MAAQ4R,EAASG,GAAUI,EAAQH,GAAYJ,GAAUG,GAC7KtN,YAAUmL,GA1PX,eA4PO4B,GAAa5O,EACnB6B,YAAUmL,GAzPX,cA4PMrS,KAAKmX,eAAehH,GAAYyE,QAAUT,GAC1CnU,KAAKmX,eAAenX,KAAK4f,iBAAiBtZ,aAAcsO,QAAUT,GACnEjN,YAAUmL,GA7PZ,kBAgQDA,EAAM3O,UAAU+I,SArQlB,eAsQCpD,eAAa1F,IAAI0O,EAAO,QAASrS,KAAK4f,iBAAiBzM,aAAcnT,KAAK4f,kBAE9EvN,EAAM7J,YAAY+J,GAClBjC,EAAO1F,KAAKyH,GAEhBrS,KAAK4Q,sBAAsBN,EA5CZ,EAlOZ,SA8QgD7C,EAAGtH,IAE1DuZ,EAAQxf,UAAU4e,oBAAsB,SAAUrR,EAAGtH,GACjDnG,KAAK4f,iBAAiB5L,wBACtB,IAEI1D,MACAH,EAAY,GAAIrN,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBtZ,cAC/D4Q,EAAclX,KAAKmX,eAAehH,GAGlC2E,GADJ3E,EADsBqQ,cAAYpJ,YAAYF,EAAY1B,KAAM,EAAG,IAE3CpG,cACpB2F,EAAU,GAAIjS,MAAK9C,KAAK8f,eAAgBhL,EAAUA,EAAU,KAC5DG,EAAQ,GAAInS,MAAK9C,KAAK8f,eAAgBhL,EAAUA,EAAU,OAC1DI,EAAcH,EAAQ3F,cACtB+F,EAAYF,EAAM7F,cAClBgG,EAAapV,KAAK4f,iBAAiB7c,UAAUqP,WAAW2C,GAAW9M,KAAM,WAAYuK,OAAQ,IAAKgB,SAAU,YAC5G6B,EAAWrV,KAAK4f,iBAAiB7c,UAAUqP,WAAW6C,GAAShN,KAAM,WAAYuK,OAAQ,IAAKgB,SAAU,WACvE,QAAjCxT,KAAK4f,iBAAiB3c,SACtBmS,EAAaoK,OAAOpK,EAAWwI,QAAQ,gBAAiB,SAAUre,GAAK,MAAOwhB,QAAOC,aAAazhB,EAAE0hB,WAAW,GAAK,KAAO,OAC3H5L,EAAWmK,OAAOnK,EAASuI,QAAQ,gBAAiB,SAAUre,GAAK,MAAOwhB,QAAOC,aAAazhB,EAAE0hB,WAAW,GAAK,KAAO,OAE3H,IAAIC,GAAYlhB,KAAK4f,iBAAiBhY,cAAcoE,YAAYmC,MAAM,IAWtE,MAVMjL,oBAAkBuK,IAAOyT,EAAU,KAAO9L,GAA4B,SAAb3H,EAAES,SAC3DhL,oBAAkBuK,IAAiB,YAAXA,EAAExF,MAAmC,QAAbwF,EAAES,UACpDkH,EAAapV,KAAK4f,iBAAiBhY,cAAcoE,YAAYmC,MAAM,KAAK,GAAG0P,OAC3ExI,EAAWrV,KAAK4f,iBAAiBhY,cAAcoE,YAAYmC,MAAM,KAAK,GAAG0P,QAEzE7d,KAAK4f,iBAAiB3I,wBACtB7B,EAAapV,KAAK4f,iBAAiB3I,sBAAsB9I,MAAM,KAAK,GAAG0P,OACvExI,EAAWrV,KAAK4f,iBAAiB3I,sBAAsB9I,MAAM,KAAK,GAAG0P,OACrE7d,KAAK4f,iBAAiB3I,sBAAwB,MAE9CjX,KAAK4f,iBAAiBiB,oBAAqB,CACvC7f,EAAI,CACR,KAAKA,EAAI,EAAGA,GAAKkgB,EAAUvgB,OAAQK,KAC/BqU,EAAWA,EAAW6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAChDqU,GAAa,GAAKzO,SAASyO,EAAU,IAAM,GAAGtO,WAChDsO,EAAW6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKqU,GAAa,GACxDzO,SAASyO,EAAU,IAAM,GAAGtO,WAAasO,EAAW6L,EAAUlgB,IAAO,GACtEkgB,EAAUlgB,GAAKqU,GAAa,GAAKzO,SAASyO,EAAU,IAAM,GAAGtO,WAC7DsO,EAAW6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKqU,GAAa,GACxDzO,SAASyO,EAAU,IAAM,GAAGtO,WAAasO,GACvC6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKqU,GAAa,IAC7DA,GAAYzO,SAASyO,EAAU,IAAM,GAAGtO,WAG5CsO,GAAW6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKqU,GAAa,IAC7DA,GAAYzO,SAASyO,EAAU,IAAM,GAAGtO,WACxCqO,GAAcxO,SAASyO,EAAU,IAAM,GAAGtO,YAE1CsO,EAAW6L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKqU,GAAa,IAC7DA,GAAYzO,SAASyO,EAAU,IAAM,GAAGtO,WACxCqO,GAAcxO,SAASyO,EAAU,IAAM,GAAGtO,YAM1CsO,GAJJD,EAAaC,EAAWD,GAAe,IAChCxO,SAASwO,EAAY,IAAM,GAAGrO,WAAasO,EAAWD,GAAe,IACrExO,SAASwO,EAAY,IAAM,GAAGrO,WAAasO,EAAWD,GAAe,IACrExO,SAASwO,EAAY,IAAM,GAAGrO,WAAaqO,IACpB,IAC1BA,GAAcxO,SAASwO,EAAY,IAAM,GAAGrO,YAGpD,GAAI/G,KAAK4f,iBAAiBgB,gBAAiB,CACvC,IAAK,GAAI5f,GAAI,EAAGA,GAAKkgB,EAAUvgB,OAAQK,IAC/BoU,EAAa8L,EAAUlgB,IAAO,GAAKkgB,EAAUlgB,GAAKoU,GAAe,IACjEA,GAAcxO,SAASwO,EAAY,IAAM,GAAGrO,YAE5CqO,EAAa8L,EAAUlgB,IAAO,GAAKoU,EAAa8L,EAAUlgB,GAAG6c,SAC7DzI,GAAcxO,SAASwO,EAAY,IAAM,GAAGrO,YAE5Cma,EAAUlgB,GAAKoU,GAAe,GAAKA,EAAa8L,EAAUlgB,GAAG6c,SAC7DzI,GAAcxO,SAASwO,EAAY,IAAM,GAAGrO,WAGhDqO,GAAapV,KAAK4f,iBAAiBrX,mBAAmByD,YAAYmC,MAAM,KAAK,GAAG0P,OAAS,IACzFzI,GAAcxO,SAAS5G,KAAK4f,iBAAiBrX,mBAAmByD,YAAYmC,MAAM,KAAK,GAAG0P,OAAQ,IAAM,GAAG9W,WAC3GsO,GAAYzO,SAASwO,EAAY,IAAM,GAAGrO,YAG9CsO,GADAA,EAAWA,EAAWD,GAAe,IAAMxO,SAASyO,EAAU,IAAM,GAAGtO,WAAasO,GAC9DD,GAAe,GAC9BxO,SAASyO,EAAU,IAAM,GAAGtO,WAAasO,EAAWD,GAAe,GACnExO,SAASyO,EAAU,IAAM,GAAGtO,WAAasO,EAEpD,GAAqC,OAAjCrV,KAAK4f,iBAAiB3c,OAAiB,CACvC,GAAIke,GAAkBnhB,KAAK4f,iBAAiB7c,UAAUqP,WAAW2C,GAAW9M,KAAM,WAAYuK,OAAQ,IAAKgB,SAAU,YACjH4N,EAAgBphB,KAAK4f,iBAAiB7c,UAAUqP,WAAW6C,GAAShN,KAAM,WAAYuK,OAAQ,IAAKgB,SAAU,WACjHxT,MAAK4f,iBAAiBrX,mBAAmByD,YAAcmV,EAAkB,YAGzEnhB,MAAK4f,iBAAiBrX,mBAAmByD,YAAcoJ,EAAa,OAExEpV,MAAK4f,iBAAiBgB,gBAAkB5gB,KAAK4f,iBAAiBiB,qBAAsB,CACpF,IAAIrL,IAAQ5O,SAASwO,EAAY,IAAM,GAAGrO,UAC1CmO,GAAca,KAAKsL,MAAiC,IAA3Bza,SAASwO,EAAY,IAAa,KAC3DD,EAAYY,KAAKsL,MAA+B,IAAzBza,SAASyO,EAAU,IAAa,IAEvD,KAAK,GADDC,GAAYS,KAAKsL,MAA2B,IAArBza,SAAS4O,EAAM,IAAa,KAC9C8L,EAAW,EAAGA,GA5FR,KA4FgCA,EAAU,CACrD,GAAIC,GAASjM,EAAYgM,CAYzB,IAXAnR,EAAU6E,YAAYuM,GACtBpR,EAAUwE,QAAQ,GAClBxE,EAAUuE,SAAS,GACd1U,KAAKmX,eAAehH,GAAWqF,KAAO0B,EAAY1B,KAAQ,IAC3DrF,EAAUuE,SAAS,GACnB4M,GAAsB,EACtBnR,EAAU6E,YAAY7E,EAAUf,cAAgB,IAEpD8H,EAAclX,KAAKmX,eAAehH,GAElCA,EADwBqQ,cAAYpJ,YAAYF,EAAY1B,KAAM,EAAG,GAEjE0B,EAAY1B,OAAS5O,SAASwO,EAAY,IAAM,GAAK8B,EAAY1B,MAAQJ,GACzE8B,EAAY1B,MAAQL,GAAa+B,EAAY1B,OAAS5O,SAASyO,EAAU,IAAM,EAAG,CAClF,GAAIhD,GAAQrS,KAAKggB,eAAe7P,EAChCpM,cAAWsO,GAASxJ,KAAQ,YAC5B,IAAI0J,GAAUvS,KAAK4f,iBAAiBtb,cAAc,OAClDiO,GAAQvG,YAAchM,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,GAAalI,KAAM,WAAYuK,OAAQ,IAAKgB,SAAU,YACnH0D,EAAY1B,OAAS5O,SAASwO,EAAY,IAAM,GAAMmM,EAASrM,GAC9DqM,EAASpM,GAAc+B,EAAY1B,OAAS5O,SAASyO,EAAU,IAChEnO,YAAUmL,GArYb,iBAuYQkP,EAAS,GAAIze,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBpd,MAAM4M,eACpEmS,EAAS,GAAIze,MAAK9C,KAAK8f,eAAe9f,KAAK4f,iBAAiBnd,MAAM2M,cACrElI,YAAUmL,GArYf,cAuYWnP,oBAAkBiD,IACvBnG,KAAKmX,eAAehH,GAAYqF,OAC5BxV,KAAKmX,eAAehR,GAAQqP,KAI7BrF,EAAUf,gBAAkBpP,KAAK4f,iBAAiBtZ,YAAY8I,eAC7DiD,EAAM3O,UAAU+I,SA9Y1B,eA+YSvF,YAAUmL,GA1YhB,kBAqYEnL,YAAUmL,GAtYf,cA8YMA,EAAM3O,UAAU+I,SAlZtB,eAmZKpD,eAAa1F,IAAI0O,EAAO,QAASrS,KAAK4f,iBAAiBzM,aAAcnT,KAAK4f,kBAE9EvN,EAAM7J,YAAY+J,KACZrP,oBAAkBuK,IAAmB,SAAbA,EAAES,QAAqBgJ,EAAY1B,KAAKzO,aAAeqO,IAAiBlS,oBAAkBuK,IAAmB,QAAbA,EAAES,QAAoBgJ,EAAY1B,KAAKzO,aAAesO,IAChLnO,YAAUmL,GAlZZ,kBAoZF/B,EAAO1F,KAAKyH,IAGpBrS,KAAK4Q,sBAAsBN,EA7IZ,EA6I8B,WAAY7C,EAAGtH,IAEhEuZ,EAAQxf,UAAU8f,eAAiB,SAAU7P,GACzC,GAAI8B,IAAsBC,SAAU,OAAQjK,KAAM,WAAYuL,SAAU,WACpEpB,EAAapS,KAAK4f,iBAAiB7c,UAAUqP,WAAWjC,EAAW8B,GAEnE9L,EADOnG,KAAK4f,iBAAiB7c,UAAUoP,UAAUC,EAAYH,GAChDwD,UACbzN,GACAH,UA3ZD,SA2ZkBG,OAASgB,GAAM,GAAK0M,cAAY,GAAKvP,GAAQwP,gBAAiB,QAAS9M,KAAQ,YAEpG,OAAO7I,MAAK4f,iBAAiBtb,cAAc,KAAM0D,IAGrD0X,EAAQxf,UAAU0Q,sBAAwB,SAAUwF,EAAUC,EAAOC,EAAS7I,EAAGtH,GAC7E,GACIoQ,GADAnI,EAAOpO,KAAK4f,iBAAiB/R,cAAc7N,KAAK4f,iBAAiBjS,cAErE3N,MAAK4f,iBAAiBlW,iBAAmB1J,KAAK4f,iBAAiBtb,cAAc,SAC7EtE,KAAK4f,iBAAiBjX,MAAMH,YAAYxI,KAAK4f,iBAAiBlW,kBAC9DzC,eAAajH,KAAK4f,iBAAiBlX,eAAgB1I,KAAK4f,iBAAiBhY,gBAhbrE,UACC,WAFF,WAkbHV,YAAUlH,KAAK4f,iBAAiBlX,eAAgB1I,KAAK4f,iBAAiBhY,gBAAiB0O,GAMvF,KAAK,GAFDE,GAAMH,EACNiL,EAAW,EACNhP,EAAU,EAAGA,EAAUyD,KAAKsL,MAAMjL,EAASzV,OAAS0V,KAAU/D,EAAS,CAE5E,IADAiE,EAAQvW,KAAK4f,iBAAiBtb,cAAc,MAAQ0D,OAASa,KAAQ,SAChEyY,EAAW,EAAIA,EAAUA,EAAW9K,EAAK8K,IACrClL,EAASkL,GAAU5d,UAAU+I,SAAS,kBAAqBvJ,oBAAkBkT,EAASkL,GAAU7K,SAAS,MAC1GvP,YAAUkP,EAASkL,GAAU7K,SAAS,KAjb/C,UAkbSvO,eAAakO,EAASkL,GAAU7K,SAAS,IACrCtO,SAAU,IACVE,gBAAgB,KAGxBkO,EAAM/N,YAAY4N,EAASkL,IACvBthB,KAAK4f,iBAAiBvU,YACTqL,IAAb4K,GAAmClL,EAASM,GAAoBhT,UAAU+I,SArc7E,kBAscGvF,YAAUqP,GA5bV,iBA8bCvW,KAAK4f,iBAAiBvU,YAlBd,IAmBNiW,GAA+BlL,EAnBzB,GAmBkD1S,UAAU+I,SAzcxE,kBA0cGvF,YAAUqP,GAhcV,gBAkcAvW,KAAK4f,iBAAiBvU,WAxBhB,KAyBFiW,GAA4BlL,EAzB1B,IAyBgD1S,UAAU+I,SA7cnE,kBA8cOvF,YAAUqP,GApcd,gBA2aK,KA6BD+K,GAA2BlL,EA7B1B,IA6B+C1S,UAAU+I,SAldjE,kBAmdOvF,YAAUqP,GAzcd,eA6cRC,IAAYH,EACZiL,GAAsB,EACtBthB,KAAK4f,iBAAiBlW,iBAAiBlB,YAAY+N,GAEvDvW,KAAK4f,iBAAiBjX,MAAMgB,cAAc,SAAS9B,UAAY7H,KAAK4f,iBAAiB5d,OACrFhC,KAAK4W,sBACDxI,IAASpO,KAAK4f,iBAAiB/R,cAAc7N,KAAK4f,iBAAiBjS,gBACtD,IAATS,GAAcA,IAASpO,KAAK4f,iBAAiB/R,cAAc7N,KAAK4f,iBAAiBjS,iBACrF3N,KAAK4f,iBAAiB5P,gBAAgBvC,GAE1CzN,KAAK4f,iBAAiB/I,0BACtB7W,KAAK4f,iBAAiBzB,aAAgBhY,MAAOnG,KAAK4f,iBAAiBzZ,MAAO0K,OAAQ7Q,KAAK4f,iBAAiB/O,QACxG7Q,KAAK4f,iBAAiBrB,iBAE1BmB,EAAQxf,UAAUggB,oBAAsB,SAAUxU,EAAOnG,GACrD,GAAIic,GAAcxhB,KAAKmX,eAAezL,GAClC+V,EAAYzhB,KAAKmX,eAAe5R,EAWpC,OATIic,GAAWhM,KAAOiM,EAASjM,KAClB,EAEJgM,EAAWhM,KAAOiM,EAASjM,MACtB,EAGDgM,EAAW5M,QAAU6M,EAAS7M,MAAQ,EAAI4M,EAAW5M,MAAQ6M,EAAS7M,MAAQ,GAAK,GAIpG8K,EAAQxf,UAAUwhB,eAAiB,SAAUnG,EAAWC,EAASC,GAC7D,GAGIlW,GACAmW,EAJA8F,EAAaxhB,KAAKmX,eAAeoE,GAEjC7P,EADW1L,KAAKmX,eAAeqE,GACdhG,IAmBrB,OAhBAjQ,GAAMmG,EACNgQ,EAAS,EACLD,IAEAlW,GADAmG,GAAgBA,EAAQ+P,GACV/P,EAAQ+P,EAAWA,EAAW,GAE5C+F,EAAWhM,KAAOjQ,EAClBmW,EAAS,EAEqC,WAAxC1b,KAAK4f,iBAAiBjS,eAA+B6T,EAAWhM,KAAO9J,KAC1E6P,EAAUnM,eArfT,MAqfuCmM,EAAUnM,eApfjD,MAqfJsM,GAAU,EAEL8F,EAAWhM,KAAO9J,GAAkD,SAAxC1L,KAAK4f,iBAAiBjS,gBACvD+N,GAAU,GAEPA,GAEXgE,EAAQxf,UAAUiX,eAAiB,SAAU1H,GACzC,MAAQ+Q,eAAYmB,aAAalS,IAErCiQ,EAAQxf,UAAUkX,YAAc,SAAU5B,EAAMZ,EAAOnF,GACnD,MAAO+Q,eAAYpJ,YAAY5B,EAAMZ,EAAOnF,IAEhDiQ,EAAQxf,UAAUmgB,iBAAmB,SAAU3U,EAAOnG,GAClD,MAAOvF,MAAK0hB,eAAehW,EAAOnG,EAAK,IAE3Cma,EAAQxf,UAAUwgB,mBAAqB,SAAUhV,EAAOnG,GACpD,MAAOvF,MAAK0hB,eAAehW,EAAOnG,EAAK,KAE3Cma,EAAQxf,UAAUoZ,QAAU,WACxBtZ,KAAK4f,iBAAmB,MAE5BF,EAAQxf,UAAU4f,eAAiB,SAAU5D,GACzC,MAAIA,aAAmBpZ,MACXoZ,EAAQC,cAGR,GAAKD,GAGdwD,KC7iBPrgB,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAa5DO,EAAO,eAoBPygB,GAAiB,QAAS,QAAS,SAcnCC,EAA4B,SAAUlgB,GAStC,QAASkgB,GAAWjgB,EAASC,GACzB,GAAIC,GAAQH,EAAOI,KAAK/B,KAAM4B,EAASC,IAAY7B,IAenD,OAdA8B,GAAMggB,mBAAoB,EAC1BhgB,EAAMigB,iBAAkB,EACxBjgB,EAAMyd,cAAe,EACrBzd,EAAMkgB,mBAAqB,KAC3BlgB,EAAMmgB,mBAAqB,KAC3BngB,EAAMogB,gBAAkB,GACxBpgB,EAAMM,eAAgB,EACtBN,EAAMqgB,eAAgB,EACtBrgB,EAAMsgB,uBAAwB,EAC9BtgB,EAAM+K,WAAa/K,EAAM2B,gBACzB3B,EAAMugB,WAAY,EAClBvgB,EAAMwgB,QAAS,EACfxgB,EAAMygB,aAAc,EACpBzgB,EAAM0gB,kBAAoB5gB,EACnBE,EA+9DX,MAv/DAzC,GAAUwiB,EAAYlgB,GAgCtBkgB,EAAW3hB,UAAUoC,OAAS,WAC1BtC,KAAKyiB,aACLziB,KAAK0iB,aACuB,UAAxB1iB,KAAK2iB,gBACLC,QAAMC,eAAe7iB,KAAKsP,aAActP,KAAK8iB,aAAaC,WAEzD7f,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQvE,KAAK6B,QAAS,cAAgB0C,UAAQvE,KAAK6B,QAAS,YAAY2C,WAC3FxE,KAAKyE,SAAU,GAEnBzE,KAAKwd,iBACLxd,KAAKsd,YAAYtd,KAAKud,uBAE1BsE,EAAW3hB,UAAUod,YAAc,SAAUW,GACzC,IAAK/a,oBAAkBlD,KAAKud,uBAAyBvd,KAAKmG,MAAO,CAC7D,GAEI+X,GADqBD,GADA,GAAInb,OAAOmT,oBAAsB,EAG1DiI,GAAele,KAAK8d,mBAAqBI,IAAiBA,EAC1Dle,KAAKmG,MAAQ,GAAIrD,MAAM9C,WAAYoa,UAA4B,GAAf8D,EAAoB,GAAK,KACzEle,KAAKkjB,gBAGbrB,EAAW3hB,UAAU4d,iBAAmB,WACpC,GAAIE,GAAc,GAAIlb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,oBACvD8H,EAAe,GAAIjb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,mBAC5D,OAAQjW,MAAKmG,MAAM8P,oBAAsBF,KAAKtT,IAAIub,EAAaD,IAEnE8D,EAAW3hB,UAAUijB,aAAe,WAC5BnjB,KAAKojB,UACApjB,KAAKqjB,UACNrjB,KAAKsP,aAAaiK,gBAAgB,YAItCxV,aAAW/D,KAAKsP,cAAgB+T,SAAY,KAEhDrjB,KAAKsjB,mBAETzB,EAAW3hB,UAAUojB,gBAAkB,WAC9BtjB,KAAKojB,YAAapjB,KAAK8iB,cAAiB9iB,KAAKqjB,SAQzCrjB,KAAK8iB,cACV7b,eAAajH,KAAK8iB,aAAaC,YAnG7B,eA2F8B,KAA5B/iB,KAAKsP,aAAanJ,MAClBc,eAAajH,KAAK8iB,aAAaC,YA5FjC,eA+FE7b,YAAUlH,KAAK8iB,aAAaC,YA/F9B,gBAsGVlB,EAAW3hB,UAAUuiB,WAAa,WAC9BziB,KAAKujB,kBAAkBvjB,KAAKmG,OACxBnG,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,mBAGhB1jB,KAAK2jB,cACL3jB,KAAK4jB,+BACL5jB,KAAKmjB,gBACDnjB,KAAKwjB,YAAexjB,KAAKmG,QAASnG,KAAKkiB,iBAA4C,WAAxBliB,KAAK2iB,gBAAgC3iB,KAAK2iB,gBAAmB3iB,KAAK6jB,YAIvH7jB,KAAKwjB,YACXxjB,KAAKkjB,aAAY,IAJjBljB,KAAKkjB,aAAY,GACjBljB,KAAK8jB,iBAAiB9jB,KAAKkiB,kBAK/BliB,KAAK+jB,qBAAuB/jB,KAAKsP,aAAanJ,MAC9CnG,KAAKye,aAAgBvb,oBAAkBlD,KAAKmG,OAAiC,KAAxB,GAAIrD,OAAM9C,KAAKmG,OACpEnG,KAAKsP,aAAalL,aAAa,QAASpE,KAAKsP,aAAanJ,OAC1DnG,KAAKgkB,eAAiBhkB,KAAKmG,OAE/B0b,EAAW3hB,UAAUyjB,YAAc,WAC/B,GAAIM,IACAzc,cAAe,OAAQ0c,gBAAiB,QACxCrb,KAAQ,WAAYsb,aAAgB,MAAOC,YAAe,MAC1DC,eAAkB,MAAOC,WAAc,QAASC,eAAgB,QAASld,aAAcrH,KAAKyD,gBAEhG,IAA6B,eAAzBzD,KAAKyD,gBAAkC,CACvC,GAAI4I,IAAewX,YAAa7jB,KAAK6jB,YACrC7jB,MAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKwkB,KAAO,GAAIjY,QAAK,aAAcF,EAAYrM,KAAKiD,QACpDjD,KAAKoD,eAAgBygB,YAAa7jB,KAAK6jB,aAAe7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAE9FlM,KAAKykB,gBAAkB5gB,UAAQC,WAC/B9D,KAAKmd,UAAY,kBAErB,IAAIuH,GAAwB1kB,KAAKmd,QAC5Bja,qBAAkBlD,KAAKmd,WAA+B,KAAlBnd,KAAKmd,WAC1CuH,EAAyB1kB,KAAKmd,SAASS,QAAQ,OAAQ,KAAMC,OAEjE,IAAI8G,IAAoB3kB,KAAKwjB,UAC7BxjB,MAAK8iB,aAAeF,QAAMe,aACtB9hB,QAAS7B,KAAKsP,aACdqT,eAAgB3iB,KAAK2iB,eACrBiC,gBAAiBD,EACjBE,YACIxB,SAAUrjB,KAAKqjB,SACfQ,YAAa7jB,KAAK6jB,YAClB1G,SAAUuH,EACVjgB,QAASzE,KAAKyE,QACdb,UAAW5D,KAAK4D,UAChBkhB,gBAAiB9kB,KAAK8kB,iBAE1B9B,SAAU+B,2CACX/kB,KAAKsE,eACRtE,KAAKglB,SAAShlB,KAAKilB,OACY,KAA3BjlB,KAAKsP,aAAamI,KAClBzX,KAAKsP,aAAalL,aAAa,OAAQ,GAAKpE,KAAKsP,aAAanL,aAAa,SAG3EnE,KAAKsP,aAAalL,aAAa,OAAQ,GAAKpE,KAAK6B,QAAQmH,IAE7DjF,aAAW/D,KAAKsP,aAAc2U,GACzBjkB,KAAKyE,SAKNzE,KAAKsP,aAAalL,aAAa,gBAAiB,SAChDpE,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,YALhDjE,KAAKsP,aAAalL,aAAa,gBAAiB,QAChDpE,KAAKsP,aAAarL,UAAY,GAMlC2e,QAAMsC,eAAgB7d,aAAc,SAAUwB,KAAQ,UAAY7I,KAAK8iB,aAAaE,QAAQ,IAC5F9b,YAAUlH,KAAK8iB,aAAaC,WAnMlB,mBAqMdlB,EAAW3hB,UAAUgjB,YAAc,SAAUiC,EAAW7C,OAClC,KAAd6C,IAAwBA,GAAY,OACzB,KAAX7C,IAAqBA,GAAS,EAClC,IAAI/O,EAaJ,IAZIvT,KAAKmG,QAAUnG,KAAKolB,cACpBplB,KAAKqlB,cAAcF,EAAW7C,GAE9BnM,OAAO,GAAIrT,MAAK9C,KAAKqG,WAAWrG,KAAKmG,UACrCnG,KAAKoD,eAAgB+C,MAAO,OAAQ,GAEpCnG,KAAKslB,aAEL3jB,EAAOzB,UAAUgG,aAAanE,KAAK/B,MACnCA,KAAKulB,gBACL5jB,EAAOzB,UAAU8G,aAAajF,KAAK/B,QAElCkD,oBAAkBlD,KAAKmG,OAAQ,CAChC,GAAIqf,GAAYxlB,KAAKmG,MACjBqU,MAAa,GACbiL,EAAcviB,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,YAsB9D,IArB6B,mBAAzB1lB,KAAKyD,gBAED+W,EADsB,cAAtBxa,KAAK4C,aACQ5C,KAAK+C,UAAUqP,WAAWpS,KAAKmG,OACxCqM,OAAQiT,EAAYxd,KAAM,WAAYiK,SAAU,QAIvClS,KAAK+C,UAAUqP,WAAWpS,KAAKmG,OACxCqM,OAAQiT,EAAYxd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,aAMrED,EADsB,cAAtBvT,KAAK4C,cACa4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAGvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAE9FgH,EAAaxa,KAAK+C,UAAUqP,WAAWpS,KAAKmG,MAAOoN,KAEjDiS,IAAcxlB,KAAKyC,MAAU+iB,IAAcxlB,KAAKwC,IAClDxC,KAAK8jB,iBAAiBtJ,OAErB,CACD,GAAIrU,IAAUqf,IAAcxlB,KAAKyC,OAASzC,KAAKmG,SAAanG,KAAKmG,QAAUqf,IAAcxlB,KAAKwC,KACzFxC,KAAKslB,YAAcnf,GACpBnG,KAAK8jB,iBAAiBtJ,IAI9BtX,oBAAkBlD,KAAKmG,QAAUnG,KAAKslB,aACjCtlB,KAAKwjB,YAINxjB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKyjB,OAAO,cACRC,OAAQ,oBALZ1jB,KAAK8jB,iBAAiB,MASzB9jB,KAAKslB,YAAcpiB,oBAAkBlD,KAAKmG,QAAUnG,KAAKgiB,oBAC1DhiB,KAAK8jB,iBAAiB9jB,KAAKgiB,oBAE/BhiB,KAAKme,aAAgBhY,MAAOnG,KAAKmG,OACjCnG,KAAK4lB,aACL5lB,KAAKsjB,mBAETzB,EAAW3hB,UAAUqlB,cAAgB,YAC5BriB,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,MAAQnG,KAAKwC,KAAOxC,KAAKwC,KAAOxC,KAAKyC,KAAOzC,KAAKslB,YACxFtlB,KAAKoD,eAAgB+C,MAAOnG,KAAKwC,MAAO,GACxCxC,KAAKme,aAAgBhY,MAAOnG,KAAKmG,SAG5BjD,oBAAkBlD,KAAKmG,QAAUnG,KAAKmG,MAAQnG,KAAKyC,KAAOzC,KAAKwC,KAAOxC,KAAKyC,KAAOzC,KAAKslB,aACxFtlB,KAAKoD,eAAgB+C,MAAOnG,KAAKyC,MAAO,GACxCzC,KAAKme,aAAgBhY,MAAOnG,KAAKmG,SAI7C0b,EAAW3hB,UAAU2lB,iBAAmB,SAAUC,GAC9C,GAAIC,GAAa,KACbxS,EAAgB,KAChByS,EAAiB,IACrB,IAA6B,mBAAzBhmB,KAAKyD,gBAAsC,CAC3C,GAAIwiB,GAAU,GAAIjjB,wBAAqBhD,KAAKiD,OAClB,eAAtBjD,KAAK4C,cACL2Q,GAAkBf,OAAQxS,KAAK2lB,eAAgB1d,KAAM,WAAYiK,SAAU,OAC3E8T,GAAmBxT,OAAQyT,EAAQC,gBAAiBhU,SAAU,QAAUjK,KAAM,cAG9EsL,GAAkBf,OAAQxS,KAAK2lB,eAAgB1d,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAC5FwS,GAAmBxT,OAAQyT,EAAQC,gBAAiBhU,SAAU,QAAUjK,KAAM,WAAYuL,SAAU,gBAKpGD,GADsB,cAAtBvT,KAAK4C,cACa4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAGvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,UAOlG,OAJAuS,GAAa/lB,KAAKoG,eAAepG,KAAK+C,UAAUoP,UAAU2T,EAAKvS,IAC3DrQ,oBAAkB6iB,IAAyC,mBAAzB/lB,KAAKyD,kBACvCsiB,EAAa/lB,KAAKoG,eAAepG,KAAK+C,UAAUoP,UAAU2T,EAAKE,KAE5DD,GAEXlE,EAAW3hB,UAAUqjB,kBAAoB,SAAUpd,GAC/C,KAAMA,YAAiBrD,OAAUI,oBAAkBiD,IAAQ,CACvD,GAAIggB,GAAY,KACZC,EAAcjgB,CACG,iBAAVA,KACPigB,EAAcjgB,EAAMY,WAIxB,IAA6B,mBAAzB/G,KAAKyD,gBAAsC,CAC3C,GAAIwiB,GAAU,GAAIjjB,wBAAqBhD,KAAKiD,OAClB,eAAtBjD,KAAK4C,eACa4P,OAAQxS,KAAK2lB,eAAgB1d,KAAM,WAAYiK,SAAU,QACxDM,OAAQyT,EAAQC,gBAAiBhU,SAAU,QAAUjK,KAAM,eAG5DuK,OAAQxS,KAAK2lB,eAAgB1d,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,YAEzEhB,OAAQyT,EAAQC,gBAAiBhU,SAAU,QAAUjK,KAAM,WAAYuL,SAAU,gBAI9E,cAAtBxT,KAAK4C,cACa4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAIvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,UAGlG,IAAI6S,IAAU,CACd,IAA2B,gBAAhBD,GACPA,EAAc,KACdC,GAAU,MAOV,IAJ2B,gBAAhBD,KACPA,EAAcA,EAAYvI,UAE9BsI,EAAYnmB,KAAK6lB,iBAAiBO,IAClB,CACZ,GACIE,GAAiB,IAIrBA,GAAiB,8IAFF,kJAGIC,KAAKH,KAAiBE,EAAeC,KAAKH,IACtD,mBAAqBG,KAAKH,IAAgBjQ,OAAO,GAAIrT,MAAK9C,KAAKqG,WAAW+f,KAC7EC,GAAU,EAGVF,EAAY,GAAIrjB,MAAKsjB,GAI7BC,GACKrmB,KAAKslB,aACNtlB,KAAKgiB,mBAAqBoE,GAE9BpmB,KAAKoD,eAAgB+C,MAAO,OAAQ,IAGpCnG,KAAKoD,eAAgB+C,MAAOggB,IAAa,KAIrDtE,EAAW3hB,UAAUsmB,eAAiB,WAC7BtjB,oBAAkBlD,KAAK0lB,gBAAiB1lB,KAAKwjB,aAC1CxjB,KAAKwjB,aAAkD,IAApCxjB,KAAK0lB,aAAa9R,QAAQ,KAC7CvK,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAKymB,aAAczmB,MAGhEqJ,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAKymB,gBAIjE5E,EAAW3hB,UAAUwiB,WAAa,WAC9BrZ,eAAa1F,IAAI3D,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAK0mB,gBAAiB1mB,MAClFqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,UAAWtP,KAAK2mB,eAAgB3mB,MACpEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAK4mB,kBAAmB5mB,MACrEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,OAAQtP,KAAK6mB,iBAAkB7mB,MACnEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAK8mB,aAAc9mB,MAC5DA,KAAKwjB,YACLna,eAAa1F,IAAI3D,KAAKsP,aAAc,UAAWtP,KAAK+mB,eAAgB/mB,MAExEA,KAAKwmB,iBAELnd,eAAa1F,IAAI3D,KAAKsP,aAAc,SAAUtP,KAAKgnB,mBAAoBhnB,MACnEA,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,uBAAwBjnB,KAAKknB,aAAclnB,MAE3FA,KAAKmnB,aACL9d,eAAa1F,IAAI3D,KAAKmnB,YAAa,QAASnnB,KAAKonB,iBAAkBpnB,MAEvEA,KAAK8E,kBAAoBiI,SAAO/M,KAAK8E,kBAAmB9E,KAAKgN,YAC7DhN,KAAKqnB,gBAAkB,GAAIna,kBAAelN,KAAKsP,cAC3CnC,UAAW,UACXC,UAAWpN,KAAKsnB,qBAAqBha,KAAKtN,MAC1CgN,WAAYhN,KAAK8E,qBAGzB+c,EAAW3hB,UAAU6mB,eAAiB,SAAUtZ,GAC5C,OAAQA,EAAE8Z,MACN,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,MACL,IAAK,UACGvnB,KAAKwjB,YAAexjB,KAAKwnB,UAAaxnB,KAAKqjB,WAC5B,WAAX5V,EAAE8Z,MACF9Z,EAAEe,iBAENxO,KAAKyjB,OAAO,kBACRC,OAAQ,iBACRjW,EAAGA,OAQvBoU,EAAW3hB,UAAUunB,aAAe,WAC3BvkB,oBAAkBlD,KAAK8iB,eACxBzZ,eAAaQ,OAAO7J,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAK0mB,iBAExErd,eAAaQ,OAAO7J,KAAKsP,aAAc,UAAWtP,KAAK2mB,gBACvDtd,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK4mB,mBACrDvd,eAAaQ,OAAO7J,KAAKsP,aAAc,OAAQtP,KAAK6mB,kBACpDxd,eAAaQ,OAAO7J,KAAKsP,aAAc,SAAUtP,KAAKgnB,oBACtD3d,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK8mB,cACjD9mB,KAAKwjB,YACLna,eAAaQ,OAAO7J,KAAKsP,aAAc,UAAWtP,KAAK+mB,gBAEvD/mB,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAaQ,OAAO7J,KAAK8iB,aAAamE,YAAa,uBAAwBjnB,KAAKknB,cAEhFlnB,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKonB,mBAG5DvF,EAAW3hB,UAAUknB,iBAAmB,WACpC,GAAKpnB,KAAKyE,UAGLzE,KAAKsP,aAAa9K,SAAU,CAC7B,GAAI2B,GAAQnG,KAAKsP,aAAanL,aAAa,QACd,oBAAzBnE,KAAK6B,QAAQ6lB,SAAyD,uBAAzB1nB,KAAK6B,QAAQ6lB,UAC1DvhB,EAAQ,GACRnG,KAAKgkB,eAAiB,KACtBhkB,KAAKsP,aAAalL,aAAa,QAAS,KAE5CpE,KAAKoD,eAAgB+C,MAAOnG,KAAKgkB,iBAAkB,GACnDhkB,KAAK2nB,eACD3nB,KAAKsP,eACLtP,KAAK8jB,iBAAiB3d,GACtBnG,KAAK4lB,gBAIjB/D,EAAW3hB,UAAUynB,aAAe,WAChC3nB,KAAKsG,YAActG,KAAKmG,MAAQnG,KAAKmG,MAAQ,GAAIrD,MACjD9C,KAAKye,aAAeze,KAAKmG,MACzBnG,KAAK+jB,qBAAwB7gB,oBAAkBlD,KAAKgkB,gBAAmB,GACnEhkB,KAAK+C,UAAUqP,WAAWpS,KAAKgkB,gBAC3BxR,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,SAGnE2P,EAAW3hB,UAAU8mB,mBAAqB,SAAUvZ,GAC3CzN,KAAKyE,SAGVgJ,EAAEma,mBAEN/F,EAAW3hB,UAAU2nB,eAAiB,WAC9B7nB,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,uBAAwBjnB,KAAKknB,aAAclnB,OAGnG6hB,EAAW3hB,UAAUgnB,aAAe,SAAUzZ,GACrCzN,KAAKyE,UAGVgJ,EAAEe,iBACFxO,KAAK8nB,MAAMra,KAEfoU,EAAW3hB,UAAUymB,eAAiB,SAAUlZ,GACxCzN,KAAKwjB,aACL/V,EAAEe,iBACFxO,KAAKyjB,OAAO,oBACRC,OAAQ,qBAIpB7B,EAAW3hB,UAAU4nB,MAAQ,SAAUzM,GACnCrb,KAAKoD,eAAgB+C,MAAO,OAAQ,GAC/BnG,KAAKwjB,YACNxjB,KAAK8jB,iBAAiB,GAE1B,IAAIiE,IACA1M,MAAOA,EAYX,IAVArb,KAAKkb,QAAQ,UAAW6M,GACxB/nB,KAAKgiB,mBAAqB,GAC1BhiB,KAAKkjB,cACLljB,KAAKgoB,cACLhoB,KAAKsf,YAAYjE,GACbrb,KAAKwjB,YACLxjB,KAAKyjB,OAAO,gBACRC,OAAQ,mBAGZnf,UAAQvE,KAAK6B,QAAS,QAAS,CAC/B,GAAIA,GAAU7B,KAAK6B,QACfomB,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrCvmB,EAAQwmB,cAAcJ,KAG9BpG,EAAW3hB,UAAUooB,qBAAuB,SAAU7a,GAClDA,EAAEe,iBAEFxO,KAAKuoB,eAAeC,kBAAkB,oBAE1C3G,EAAW3hB,UAAU4jB,iBAAmB,SAAU3d,GAC9Cyc,QAAM6F,SAAStiB,EAAOnG,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,kBAEvEjD,EAAW3hB,UAAUwmB,gBAAkB,SAAUjZ,GACxCzN,KAAKyE,UAGVzE,KAAKmiB,eAAgB,EACjBte,UAAQC,WACR9D,KAAKsP,aAAalL,aAAa,WAAY,IAC3CpE,KAAKsP,aAAaoZ,QAEtBjb,EAAEe,iBACGxO,KAAKqjB,WACFrjB,KAAKolB,aACLplB,KAAKuP,KAAK9B,IAGVzN,KAAK8hB,mBAAoB,EACzB9hB,KAAK2oB,KAAK,KAAMlb,GACa,mBAAzBzN,KAAKyD,iBACLzD,KAAKsP,aAAaX,QAEtB3O,KAAKsP,aAAaX,QAClBzH,YAAUlH,KAAK8iB,aAAaC,YAtiB3B,kBAuiBD7b,WAASlH,KAAK8iB,aAAaE,QApiB9B,cAuiBLhjB,KAAKmiB,eAAgB,IAEzBN,EAAW3hB,UAAU0jB,6BAA+B,WAChD,IAAK1gB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACb,KAAKtH,oBAAkBlD,KAAK4oB,eAAe,GAAKroB,KACxCqhB,EAAchO,QAAQrT,IAAQ,EAC9B,GAAY,UAARA,EAAiB,CACjB,GAAIsoB,GAAsB7oB,KAAK4oB,eAAe,GAAKroB,GAAKqd,QAAQ,OAAQ,KAAMC,MACnD,MAAvBgL,GACA3hB,YAAUlH,KAAK8iB,aAAaC,WAAY8F,EAAmB1a,MAAM,UAGpE,IAAY,UAAR5N,EAAiB,CACtB,GAAIuoB,GAAW9oB,KAAK8iB,aAAaC,UAAU5e,aAAa5D,EACnD2C,qBAAkB4lB,GASnBA,EAAW9oB,KAAK4oB,eAAe,GAAKroB,GARS,MAAzCuoB,EAASC,OAAOD,EAASnoB,OAAS,GAClCmoB,GAAsB9oB,KAAK4oB,eAAe,GAAKroB,GAG/CuoB,EAAWA,EAAW,IAAM9oB,KAAK4oB,eAAe,GAAKroB,GAM7DP,KAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAKuoB,OAG9C9oB,MAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAO/FshB,EAAW3hB,UAAU8oB,6BAA+B,WAChD,IAAK9lB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACToX,GAAchO,QAAQrT,GAAO,GAC7BP,KAAKsP,aAAalL,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAK7EshB,EAAW3hB,UAAU+oB,eAAiB,SAAUvL,EAAaC,GACpDza,oBAAkBya,KACnBA,EAAeA,EAAYC,QAAQ,OAAQ,KAAMC,QAEhD3a,oBAAkBwa,KACnBA,EAAeA,EAAYE,QAAQ,OAAQ,KAAMC,QAErD+E,QAAMsG,YAAYxL,GAAc1d,KAAK8iB,aAAaC,WAAYpF,GAC1D3d,KAAKwG,cACLoc,QAAMsG,YAAYxL,GAAc1d,KAAKwG,cAAemX,IAG5DkE,EAAW3hB,UAAUipB,wBAA0B,SAAU1b,GACrD,OAAQA,EAAES,QACN,IAAK,SACGlO,KAAKolB,aACLplB,KAAKuP,KAAK9B,GAGVzN,KAAK8iB,aAAaC,UAAUtM,SAASzW,KAAK2G,OAAO+hB,MAErD,MACJ,KAAK,QACI1oB,KAAKolB,cAIDplB,KAAKmG,QAAWnG,KAAKsG,aAAgBtG,KAAKolB,cAC3CplB,KAAK8iB,aAAaC,UAAUtM,SAASzW,KAAK2G,OAAOgI,QAJrD3O,KAAK2oB,KAAK,KAAMlb,GAOS,mBAAzBzN,KAAKyD,iBACLzD,KAAKsP,aAAaX,UAKlCkT,EAAW3hB,UAAU0mB,kBAAoB,WAErC,GADA5mB,KAAKqiB,WAAY,EACZriB,KAAKyE,QAAV,CAGIzE,KAAKwjB,aAAexjB,KAAKsP,aAAanJ,OAASnG,KAAK6jB,eAChD7jB,KAAKkiB,iBAAoBliB,KAAKmG,OAAkC,SAAxBnG,KAAK2iB,gBAAqD,UAAxB3iB,KAAK2iB,iBAA8B3iB,KAAK6jB,cAClH7jB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKsP,aAAa8Z,eAAiB,EACnCppB,KAAKsP,aAAa+Z,aAAerpB,KAAKsP,aAAanJ,MAAMxF,QAGjE,IAAI2oB,IACAC,MAAOvpB,KAEXA,MAAK8hB,mBAAoB,EACzB9hB,KAAKkb,QAAQ,QAASoO,GACtBtpB,KAAKsjB,kBACDtjB,KAAKwpB,cAAgBxpB,KAAKmiB,eAC1BniB,KAAK2oB,SAGb9G,EAAW3hB,UAAUumB,aAAe,WAChCzmB,KAAKiC,gBAAiB,EAClBjC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,gBACRC,OAAQ,oBAIpB7B,EAAW3hB,UAAU2mB,iBAAmB,SAAUpZ,GAC9C,GAAKzN,KAAKyE,QAAV,CAsBA,GAnBAzE,KAAKypB,mBAC2B,KAA5BzpB,KAAKsP,aAAanJ,OAAgBjD,oBAAkBlD,KAAKmG,SACzDnG,KAAKgiB,mBAAqB,KAC1BhiB,KAAK8jB,iBAAiB,KAE1B9jB,KAAKsiB,QAAS,EACdtiB,KAAKkjB,aAAY,GAAO,GACxBljB,KAAKsiB,QAAS,EACdtiB,KAAKgoB,cACLhoB,KAAK0pB,cAAcjc,GACfzN,KAAKwjB,YAAcxjB,KAAKkiB,iBAAmBliB,KAAK6jB,aAAuC,WAAxB7jB,KAAK2iB,iBAChE3iB,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,iBAAoBliB,KAAKmG,OAAkC,SAAxBnG,KAAK2iB,gBAAqD,UAAxB3iB,KAAK2iB,iBAA8B3iB,KAAK6jB,aAC9I7jB,KAAK8jB,iBAAiB,KAG9B9jB,KAAK4lB,aACD5lB,KAAKolB,cAAgB8C,SAASyB,gBAAkB3pB,KAAKsP,cACrDtP,KAAKuP,KAAK9B,GAEe,eAAzBzN,KAAKyD,gBAAkC,CACvC,GAAImmB,IACAL,MAAOvpB,KAEXA,MAAKkb,QAAQ,OAAQ0O,GAErB5pB,KAAKolB,eACLplB,KAAK8E,kBAAoBiI,SAAO/M,KAAK8E,kBAAmB9E,KAAKgN,YAC7DhN,KAAK6pB,wBAA0B,GAAI3c,kBAAelN,KAAKqE,gBAAgBoS,SAAS,GAAGqT,mBAC/E3c,UAAW,UACXC,UAAWpN,KAAKmpB,wBAAwB7b,KAAKtN,MAC7CgN,WAAYhN,KAAK8E,qBAGzB9E,KAAKiC,gBAAiB,IAE1B4f,EAAW3hB,UAAU6pB,gBAAkB,SAAUtc,GACvCvK,oBAAkBlD,KAAKwnB,WAActkB,oBAAkBlD,KAAK8iB,iBAAkB9iB,KAAK8iB,aAAaC,UAAUtW,SAASgB,EAAEnN,SAAsB,cAAXmN,EAAExF,MACnIjI,KAAKwnB,SAAS3lB,SAAW7B,KAAKwnB,SAAS3lB,QAAQ4K,SAASgB,EAAEnN,UAAyB,eAAXmN,EAAExF,MAC3EwF,EAAEe,gBAEN,IAAIlO,GAASmN,EAAEnN,MACTiE,WAAQjE,EAAQ,kCAAsC4C,oBAAkBlD,KAAK8iB,eAC1Eve,UAAQjE,EAAQ,oBAA0BN,KAAK8iB,aAAaC,WAC5DziB,EAAOoD,UAAU+I,SAAS,UAC1BnM,EAAOoD,UAAU+I,SAAS,iBAI1BlI,UAAQjE,EAAQ,mCAEjBA,EAAOoD,UAAU+I,SAAS,WACtBvJ,oBAAkBuK,EAAEnN,OAAO0pB,gBAC5Bvc,EAAEnN,OAAO0pB,cAActmB,UAAU+I,SAAS,eAC1ClI,UAAQjE,EAAQ,eAChBiE,UAAQjE,EAAQ,cAAcoD,UAAU+I,SAAS,KAAOzM,KAAK4N,MAAMzD,eACtEnK,KAAKuP,KAAK9B,GAELlJ,UAAQjE,EAAQ,wBAClBA,EAAOoD,UAAU+I,SAAS,YAC1BnM,EAAOoD,UAAU+I,SAAS,WACxB,GAAI3J,OAAM9C,KAAKmG,SAAYxE,EAAOzB,UAAUke,iBAAiBrc,KAAK/B,KAAMA,KAAKmG,QAClFnG,KAAKuP,KAAK9B,KAhBdzN,KAAKuP,KAAK9B,GACVzN,KAAKiqB,aAmBbpI,EAAW3hB,UAAUonB,qBAAuB,SAAU7Z,GAClD,GAAIyc,GAAclqB,KAAK2N,aACvB,QAAQF,EAAES,QACN,IAAK,aACDlO,KAAK+hB,iBAAkB,EACvB/hB,KAAKuP,KAAK9B,GACVzN,KAAKsP,aAAaX,OAClB,MACJ,KAAK,eACD3O,KAAK+hB,iBAAkB,EACvB/hB,KAAKypB,mBACLzpB,KAAKkjB,cACLljB,KAAK0pB,cAAcjc,GACU,eAAzBzN,KAAKyD,iBACLzD,KAAK2oB,KAAK,KAAMlb,EAEpB,MACJ,KAAK,SACDzN,KAAKuP,KAAK9B,EACV,MACJ,KAAK,QACDzN,KAAKypB,mBACLzpB,KAAKkjB,cACLljB,KAAKgoB,cACLhoB,KAAK0pB,cAAcjc,GACnBzN,KAAK4lB,aACA5lB,KAAKolB,cAAgB8C,SAASyB,gBAAkB3pB,KAAKsP,cACtDtP,KAAKuP,KAAK9B,GAEVzN,KAAKolB,eACL3X,EAAEe,iBACFf,EAAEma,kBAEN,MACJ,KAAK,MACL,IAAK,WAEG,GAAIlc,GAAQ1L,KAAKsP,aAAa8Z,eAC1B7jB,EAAMvF,KAAKsP,aAAa+Z,YAC5B,IAAIrpB,KAAKwjB,aAAexjB,KAAKwnB,WAAaxnB,KAAKqjB,SAAU,CACrD,GAAI8G,GAAWnqB,KAAKsP,aAAanJ,MAAMxF,QACxB,IAAV+K,GAAenG,IAAQ4kB,GAAc5kB,IAAQ4kB,GAAyB,QAAb1c,EAAES,QAAgC,IAAVxC,GAA4B,aAAb+B,EAAES,SACnGT,EAAEe,iBAENxO,KAAKyjB,OAAO,kBACRC,OAAQ,iBACRjW,EAAGA,IAEP/B,EAAQ1L,KAAKsP,aAAa8Z,eAC1B7jB,EAAMvF,KAAKsP,aAAa+Z,aAE5BrpB,KAAKypB,mBACLzpB,KAAKkjB,cACLljB,KAAKgoB,cACLhoB,KAAK0pB,cAAcjc,GACnBzN,KAAK4lB,aACD5lB,KAAKwjB,aACLxjB,KAAKsP,aAAa8Z,eAAiB1d,EACnC1L,KAAKsP,aAAa+Z,aAAe9jB,GAEpB,QAAbkI,EAAES,QAAoBT,EAAEnN,SAAWN,KAAKsP,cAAgBtP,KAAKolB,cAAgB8C,SAASyB,gBAAkB3pB,KAAKsP,eAC7G7B,EAAEe,iBACFxO,KAAKuI,mBAAmBoG,SAEX,aAAblB,EAAES,QAAyBT,EAAEnN,SAAWN,KAAKsP,cAAgBtP,KAAKolB,cAAgB8C,SAASyB,gBAAkB3pB,KAAKsP,cAClHtP,KAAKuP,KAAK9B,EAEd,MAER,SACIzN,KAAKoqB,cAAc3c,GAEF,WAAbA,EAAES,QAAuBgc,IAAgBlqB,KAAK4N,OAC9C5N,KAAKuP,KAAK9B,KAI1BoU,EAAW3hB,UAAUkqB,cAAgB,SAAU3c,GAC3CzN,KAAKye,cAAkBvb,oBAAkBlD,KAAKmG,QAAU,GAAIrD,OAAM9C,KAAKmG,QAAW,KAC9EnG,KAAKolB,eACLzjB,EAAOzB,UAAUmN,gBAAgBtL,KAAK/B,KAAMyN,GACxCzN,KAAKolB,cACLrhB,aAAW/D,KAAKsP,cACZxG,wBAAyB,GAAK9I,KAAK8Y,0BAKnD+I,EAAW3hB,UAAU8nB,YAAc,WAC/B,IAAK9kB,oBAAkBlD,KAAKmG,SAAajD,oBAAkBlD,KAAKye,eAChC,mBAAzBze,KAAKyD,kBAA2CzD,KAAKmG,QAAWnG,KAAKye,cAA6C,mBAAzBze,KAAKyD,kBAA2CzD,KAAKmG,QAAWnG,KAAK0e,oBAC7J1e,KAAKwnB,UACDxnB,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,eAAgBtK,OAAS,GAChEsG,cAAYjH,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,gBApzBxD,gBAuzBE/H,oBAAkBlD,KAAKmG,SAClBnG,KAAKmG,QAAUnG,KAAKwC,MAAUxC,KAAKmG,QAAUnG,KAAKyC,KAAM,CAC1D,GAAI4nB,GAAa,GAAIvnB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,OAC/CxE,GAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAASqqB,KAKhExI,EAAW3hB,UAAUupB,iBAAmB,WACpC,GAAIjX,GAGAe,EAFA+W,EAAU,KACVC,EAAc,WAEW,oBAAzBvqB,KAAKyD,gBACL+O,EAAUtP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aAEhD4E,EAAQ/D,KAAKvmB,KAAK0lB,gBAAiB6E,EAAYhE,KAAKvmB,KAAK0lB,gBAC/DlT,EAAStP,oBAAkBlD,KAAK0lB,cAAgB1lB,KAAK0lB,aAAe1lB,KAAK0lB,aAAa9H,QAAQ,KAAM,MAEnG1a,oBAAkBsP,GAOnBA,EAASxS,KAAK0lB,aANJlT,EAAOrE,MAAM,KAAKxN,OAAS,EAC3B,IACN6R,EAASA,EAAOoL,QAAQ,KAAM,KAMtC,IAAI4M,EAGIA,GAFqB,mBAAzBxqB,KAAKyD,gBACqB,cAAtBzD,KAAK4C,cAED4P,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,QAK5BM,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAMjDD,EADsB,cAAtBvT,KAAK4C,cACa4P,OAAQA,EAAQvK,KAAM,WAAYiK,SAAU,QAG5CM,OAAQA,EAAQvK,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,UAIvF,IAAI/D,EAIJ,IAHuC,gBAA5BzP,MAAKsP,aAAanJ,QACzBnG,KAAKsP,aAAanJ,MAAQnG,KAAKsP,aAAanJ,MAAM0X,QAExB,mBAAzB7d,KAAKyD,gBACN,GAAIzD,KAAKoG,eAAepG,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanJ,MAAOqkB,IAAe,CACrF,GAAIC,GAAgBzqB,KAAKsP,aAAanJ,MAAMyX,QAAQ,uBAAwB,SAAU8M,GAAS,MAAOA,GAAMC,qBAC5Glb,GAAOzP,KAAK+C,UAAUoP,UAAUsY,EAAeD,OAI3CjX,GADsB,cAAtBvT,KAAK4C,cACa4P,OAAQA,EAAQvK,KAAM,WAAYiK,SAAU,QAG5CM,OAAQA,EAAQvK,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAEnF/D,EAAOzP,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanJ,MAAOoN,OAI7D9D,GAAOzP,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanJ,MAAOqkB,GACzD/a,GAASvM,oBAAkBuM,IAAS0G,OAAO1G,GAAS,KAAOA,GACtDvM,oBAAkBlD,KAAK0lB,eAA6C,KAA5B1lB,KAAKsP,aAAanJ,OAAgBnG,KAAKslB,aAC3EtlB,KAAKiC,iBAAoBjC,KAAKiC,gBAAkBjC,KAAKsP,aAAanJ,QAAUnG,KAAK+jB,wBAC3C,IAApC/jB,KAAK0lB,aAAa9R,QAAQ,MAC7BnE,EAAKuF,YAAYhV,KAAKmG,MAAMiJ,cAKV,gBAAzBpP,KAAKyD,iBAAsCzD,KAAKmG,QAAUgQ,OAAOnW,KAAKmG,QAAWsJ,GAClFA,EAAKjM,SAASxD,KAAKmG,MAAMiL,WAAYpR,KAAKmG,MAAMkL,aAAcrR,KAAKmG,MAAMmL,aAActR,KAAKmG,MAAMoL,mBAElGvR,KAAKslB,YAAc7V,GACnBzP,KAAK8jB,iBAAiB9jB,KAAK+C,UAAUqP,WAAW3C,EAAM+a,IAClDxqB,KAAKsP,aAAanJ,QAAUnG,KAAK+jB,sBACjC/jB,KAAKoD,eAAgB+C,MAAOsJ,IAAQ,IAGlCzP,KAAKslB,YACPtlB,KAAKsP,aAAanJ,QAAUnG,KAAK+jB,sBACjC/jB,KAAKoD,eAAgB+C,MAAOsJ,IAAQ,GAGxCzP,KAAKslB,aAAe7V,GAAQzP,KAAKsP,aAAanJ,SAAWnG,KAAKwjB,WAAaxjB,KAAKkiB,gBAAkB,KAClGliB,KAAKoD,eAAgB+C,MAAO,OAAQ,GAEpCgQ,OAAOnW,KAAKmG,QACZnG,KAAKoD,eAAgB+C,MAAO,OAAQ,GAEpCjD,oBAAkBlD,KAAKmG,SACvBnG,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,MAGjEqe,EAAW3hB,UAAU0qB,eAAiB,WAClC,GAAI9oB,GAAQ9B,IACZA,MAAKwG,aAAexG,KAAKsE,cAAc,OAASuD,UAAgB1G,EAAO,mBAAoB6H,GAAIhJ,KAAKsP,aAAatG,GAAK,aACtHhJ,KAAKwG,aAAapC,aAAa,aAAcpE,KAAK6B,QAAQmH,IAC1DhJ,KAAKwG,aAAapC,aAAa,OAAQ,UAClClB,oBAAkBlD,KAAKmd,YACxBnd,KAAKwG,aAAaqB,WAAa,IAAM7H,KAAKmd,UAE1CtZ,UAAQC,WACR9D,KAAK6qB,cACL7qB,KAAK0G,MAAQ1G,KAAKsE,cAAc,OAChCtE,KAAK0G,MAAMmB,UAAiB1G,EAAO,gBACnC+mB,SAAS4C,KAAKjjB,WAAa,mBAC3B7H,KAAK0G,MAAMG,MAAMkkB,QAAU,QAC3B7C,SAAS4C,KAAKtiB,YAAYxI,KAAK0G,QAGnC1G,KAAKqE,gBAAgBsF,cAAc,eAAe9B,UAAY,GAC9D7H,KAAKwnB,SAAW,GAAIwD,SAAMhrB,KAAKwG,cAC3BykB,QAASjrB,KAAKqE,gBACd6mB,SAAUrnB,UAAQC,SAAWokB,SAAS4C,KAAO9qB,KAAK8iB,aAAaC,UAC/DoI,SAAUtnB,UAAQC,UAAasnB,EAAG,SAAUC,EAAG,UAAcrrB,KAAK4D,WAAcwnB,EAAG,QAASC,EAAG,WAAeD,EAAG,OAAQC,EAAG,UAC5HC,QAx7BM,EAy7BNC,WAAY,YACZ3nB,UAAW5D,KAAK4D,UAChBkD,OAAQ9G,KAAK8G,OACb0kB,UAAW3nB,UAAQC,UAAasnB,EAAG,MAAOC,EAAG,OAAWrrB,KAAK4D,WAAcwnB,EAAG,MAAOC,EAAG,SAAaD,EAAG,OAAQC,EAAG,QACnHI,KAAM,WACE5nB,UAAQC,UAAYhC,EAAM2iB,iBAC1B3iB,EAAM4pB,UAAY9kB,SAAS+kB,OAAOC,iBAAiB9pB,EAAMuC,gBAAgBsF,cAAc,8BAA8BkiB,YAAa,IAAM,GACxI/pB,EAAMgqB,YAAc,GAAIC,SAAMjqB,EAAMuC,gBAAgBsF,cAAc,uBAC9DqiB,MAAOlqB,EAAMmqB,qBAAqB3e,KAAKxL,KAE3CuH,eAAa1F,IAAI7B,EAAMuC,gBAAgBsF,cAAc,sBAAuB,aAAc7H,EAAMoqB,kBAAmBpqB,IAEzF,mBAA1BA,EAAM2B,iBACFykB,SAASyB,gBAAkB7nB,EAAMwN,eACjCxN,EAAMgD,kBAAoBiI,SAAOjL,EAAMgD,kBAAmBhD,EAAMkL,YAChElL,EAAMuC,gBAAgBoS,SAAS,GAAGqT,kBAAkBnb,QACpD7M,EAAM+nB,wBAA0B,GAAI3c,kBAAepL,EAAMuC,gBAAgBoS,SAAS,GAAGqT,mBACjF3c,UAAW,UACXC,UAAWtL,EAAMqnB,wBAAwB7b,KAAKxL,GAC9CkL,WAAYlL,EAAMgD,oBAEtBhD,EAAM+nB,wBAA0B,GAAI3c,kBAAepL,EAAMghB,aAAaC,UAAUtM,SAAS3U,EAAM6E,QAC3FwG,UAAW,UACXC,UAAWtL,EAAMqnB,wBAAwB7b,KAAKxL,GAC9CkL,WAAYlL,EAAMgD,sBAI/BqnB,MAAO,WACFrqB,EAAMggB,mBACNhgB,EAAMghB,aAAaC,UAAUtM,SAAS3U,EAAM6E,OAAOgI,QAEnD7M,EAAMqE,OACNrE,EAAMujB,gBAENvjB,EAAM0lB,UACN1lB,EAAM0lB,SAASlO,UAEnBxX,EAAMiM,gBACN7C,SAAOpJ,EAAM0E,cACb1E,EAAM0lB,SAAW1lB,EAAM0E,aAAe,KACtC1E,EAAMsqB,YAAc,KACpBtqB,EAAM+nB,wBAA0B,KAChC/nB,EAAMuqB,qBACPC,mBAAoB,WACdzoB,UAAQC,UACThC,EAAMyN,UAIlBvP,KAAKwnB,SAAS3lB,QAAQgG,WAAa,IAAM7H,KAAKmd,SAC9Cnd,KAAKqsB,qBAETxK,EAAW3hB,UAAU+rB,qBAAuB,SAAUxe,GAClD,GAAI8e,GAAY,CAChB,IAAIvsB,KAAK0rB,UACL,OAAQje,EAAE+e,gBACN,IAAK,OACDD,EAAY,CACZ,MACJ,KAAK,QACDA,GAAa,MAOrB,QAAQ9e,EAAE+e,gBACN,IAAK,KACDD,EAAY,CACZ,MACJ,KAAK,OACDA,GAAa,EAMrBvsB,KAAKysB,aACa,IAAdF,EACAvsB,KAAK6O,aAAapB,IAEE,IAAf8e,GACLvsB,KAAK8O,iBAAiBrB,GAE1BzN,KAAKysB,YAAa,IAG1B5K,EAAW3hB,UAAUgsB,kBAAoB,SAAUze,GAC/CzN,KAAKysB,YAAa,GAEtB5K,EAAW3hB,UAAUwsB,gBAAkB,WAC9B1sB,KAAKyE,SAKNzE,KAAKsP,aAAalL,aAAa,gBAAiB,SAChDpE,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,YALhDjE,KAAKsP,aAAalL,aAAa,gBAAiB,QAChDpE,KAAKsP,aAAarL,UAAY,IAOtC4d,EAAW3hB,UAAU2qB,YAAc,WAC/B,GAAIL,GACAK,EAAc7qB,KAAKsE,cAAc,OAASuD,UAAW,mBACrD8kB,EAAc3sB,KAAKsE,cAAc,MAAQuD,UAAW,iBACpD+kB,EAAK5sB,KAAKsE,cAAc,OACxBuoB,EAAU7sB,KAAKsE,cAAc,QAAUuD,UAAW,gBAClDilB,EAAY9sB,KAAKsE,cAAc,QAAUuD,UAAW,iBAsBxD,IApBI2iB,EADsB,cAAtBxqB,KAAK4C,cACW4P,OAAQ,IAAKN,SAAU,aAGvBM,OAAQ,IAAKN,SAAU,WAAYsB,SAAU,WAEjEmZ,EAAY3gB,YAAc,GAAKhM,KAAK+C,UAAUqP,WAAWpS,KAAKmG,OAAS,GAAIrD,MAAQ0nB,GAE/EA,EADsB,cAAtBxqB,KAAK4C,cACW4P,OAAQ,IAAKN,SAAU,aAGvBM,OAAQ,IAAKN,SAAU,WAAYsB,SAAU,WAEjEqZ,EAAQ7gB,YAAmBhM,KAAK+C,UAAUqP,WAAWpS,KAAKmG,OAAS,GAAIrD,MAAQ0nB,GAAe,KAE1FA,EADsB,cAAtBxqB,KAAK4C,cACW4P,OAAQ,QAASN,SAAU,aAG3BM,OAAQ,QAASN,SAAU,WAAYsB,SAAU,WAErEsZ,EAAU9gB,YAAc,GAAKhM,KAAK+C,UAAUqP,WAAWpS,KAAKmG,OAAS,GAAIrD,MAAQ0nB,GAC7ExqB,KAAKykB,eAAgB,CACrB,GAAIsI,GAAiB/sB,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7DwB,gBAAa1F,IAAIopB,EAAgB,uBAAwB/sB,KAAKgtB,kBAAmBhtB,KACjF,IAAIitB,GAAmBjtB,KAAKqE,gBAAgBsF,cAAc,iBAC1DijB,GAAGlpB,UAAUC,IAAI,iBACjBspB,EAAiBvpB,UAAUC,IAAI,aAC/BknB,EAAYriB,YAAYukB,GACxBlC,EAAYriB,YAAYykB,GAEvBjtB,KAAKykB,gBACNoG,EAAYriB,YAAYmkB,GAE5BC,EAAGpkB,YAAYqkB,GACfD,EAAGpkB,YAAYskB,GACfjC,EAAYriB,YAAYokB,GACxB5sB,KAAKqE,gBAAgB6oB,aAAarC,EAAa7qB,KAAKqE,gBAAgBylB,oBAExEjI,EAAW3hB,UAAU8sB,kBAAoB,SAAUvf,GAC/CzN,KAAKuP,QAETsS,EAAW3hB,UAAUwpB,cAAgB,SAAUrO,GACvCrb,KAAKsP,aAAanJ,QAAUnG,KAAK+jB,uBAC3B/jB,KAAKye,cAAgBze,KAAKye,aAAahJ,cAAgBzV,KAAKmG,OAASnG,KAAKmG,MAAMsP,aAC9EzV,KAAKoiB,uBAAyBpiB,KAAKolB,cACnCplB,KAAKgoB,cAEThoB,KAAKme,YAAYhY,MAAQnG,KAAKmG,MAC9BnG,KAAKme,YAAY9C,MAAQA,GAAS,KAClCrb,KAAKme,YAAYtc,QAAU7B,KAAK6B,QAChC7B,KAAKme,YAAYoB,cAAgBrc,oBAAkBmY,GAC/Crb,KAAKqP,WAAarP,KAAKoC,cACvBpC,KAAKoC,eAAgB,EAGrBpC,KAAKkb,QAAQ,SAAUlb,KAAKme,aAEhCne,KAAK+jB,qBAAuB/jB,KAAKsP,aAAanJ,MAC9CnG,KAAKye,aAAgBtI,OAAO,GAAIrT,MAAK9C,KAAKqG,WAAWrG,KAAKmG,SAAmD,KAAxC,GAAIrD,MAAK9C,KAAKqG,WAAWrG,KAAKmG,QACnGnG,KAAKuf,cAAe,GAG5Bvf,KAAKuiB,aAAc,GAEvBV,EAAW3hB,UAAUib,eAAiB,WAClCnb,KAAKkb,QAAQ,YAAalb,KAAKob,gBAEnCyG,EAAW3hB,UAAU4mB,aAAe,SAAUrZ,GAC1CzN,KAAKuiB,YAAeviB,KAAKsP,aAAanJ,QAAUnG,KAAK+jB,sBAEzDlC,EAAW3hB,UAAUof,YAAc,SAAUjE,GACpCrb,KAAKmiB,eAAmBniB,KAAKsiB,QAAUtiB,KAAKuiB,aAC7CviB,KAAKmtB,eAAe9R,IAElBrb,KAAKye,cAAgBze,KAAKye,aAAahJ,cAAgBzV,KAAKmG,OAASnG,KAAKmG,MAAMsP,YAClFzV,KAAKme,YAAY9C,MAAQA,GAAgB,KACzCrb,KAAKme,YAAYtc,QAAU7B,KAAK6B,QAChC7B,KAAKme,YAAYoB,aAAevf,KAAKuf,aAChCvf,KAAKoiB,uBACNpiB,KAAKkb,QAAQ,SAAUlb,KAAKme,aAEhCne,KAAKye,aAAeze,KAAKmG,OAAS,GAAIrD,OAAM9C,KAAKmG,OAC5CnG,KAAKoiB,uBACNpiB,KAAKuP,KAAK8L,GAEdrb,KAAK+jB,qBAAuB/jB,KAAKsP,aAAanJ,MAC9CnG,KAAK4lB,cAEAvK,GACLrb,KAAKuP,KAAK8L,GAEdrb,KAAKuiB,aAAc,GAEvBV,EAAW3hB,UAAUoX,gBAAkB,WACnC,GAAIC,KAOJ,OAN0B,YAAtBvX,KAAK4C,cACL2U,EAAQ3M,MAAOpB,MAAOxJ,MAAOwX,OAAQ,UAAWC,KAAM,YAEtDzX,KAAKwjB,YACLjM,EAAQ3M,MAAOpB,MAAOxJ,MAAOwX,OAAQ,mBAElCD,GAEXsK,EAAW3hB,UAAUitB,eAAiB,SAAU1f,GAC5C,GAAIgC,GACAgW,EACAlS,CAEAkS,GADyB,mBAAzBzlB,KAAKyD,iBACSP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAGjE3lB,KAAK0lB,aAElB1lB,KAAKmG,QACwB,mBAAzBnG,KAAKyD,iBAED8P,EADsB,cAAtBvT,KAAK4C,cACa4P,OAAQiT,EAAYxd,KAAM,WAAYiK,SAAU,QAGhDM,OAAQiT,EAAYxd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAEvF/D,EAAOzP,KAAK+C,UAAUqP,WAAWpS,KAAKme,YAAYhY,MAAOoN,KAIrDA,EADsB,cAAtBvT,KAAK4C,cACa4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAGvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAE9F/D,EAAOzP,KAAK+C,UAAUqP,WAAWpS,KAAKme,YAAYhY,MAAOoN,IAEzDvT,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,oBAIfxgB,oBAAkBuM,KACnBzP,KAAK8jB,iBAAiBrU,GAClBzP,KAAKwjB,YACLxjB,KAAKyjB,OAAO,oBACRC,OAAQ,qBAKxB7B,EAAW3hB,UAAUklB,WAAa,WAC9B,SAAIplB,KAAKwG,eAAgBxG,KAAKwG,aAAa9C,UAAU+I,SAvsC1C,qBA4sCfoV,EAAW3hB,UAAU8kB,SAAW,SAAUC,GAElCjlB,KAAK8iB,aAAaC,UAAUlc,MAAMoe,MADjB,gBAAVA,GACmCmI,aAAWptB,KAAKilB,OAEpC,gBAAVA,GAC+BA,EAAMyF,MAAM,WAAe1qB,WAAeotB,aAAWptB,KAAKilB,OAG3D,QAUlDpD,EAAW3hB,UAAUyoB,KAAO,SAAU1gB,EAAMwF,GACxC,GAAI3L,GAAQ9B,IACZ,MAAKA,KAAKyE,SAAWzE,KAAKqjB,WAAcrjB,KAAKyE,SAAWzE,KAAKwnB,UAA7D,CAII,GAAI6F,IAAY,EACZC,MAAa,EACZpqB,qBAAkBlD,KAAKmG,SAAanG,KAAKmG,QAAU,GAAIrD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,QAC9ExC,KAAKmG,QAAU,GAAIrD,MAAK9C,KAAKqG,WAAWrG,KAAKyC,MAKjD6qB,EAAattB,KAAKmG,OAAS,MAJ3BmnB,EAAa,GAAIxqB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,QAC3CnG,KAAKoD,eAAgB+C,MAAS,OAAQ,IAKrCnG,KAAKolB,eACNzjB,EAAOzB,UAAUoC,OAAOP,KAAK/B,MAC7BA,KAAKoD,eAAgB+C,MAASmnB,GAAc,OAAQ,GACpDttB,KAAKye,aAAe6O,EACpBttB,KAAK4qB,kBAEL/mB,UAAQC,WACR9D,KAAKutB,mBAAqBvtB,KAAKsE,cAAc,OAASuD,UAAW,8BACjEqgB,SAAS4C,KAAKtiB,YAAYxI,KAAKutB,qBAEnCvtB,KAAKosB,aACD5d,eAAgB,WACZ6e,GAAY,GAEhBG,MAAOxtB,KAAKwnB,SACZnM,MAAO5N,GAAK,KACZggB,QAAQ,EACRC,SAAU7pB,UAAQC,SAAW9D,KAAKutB,mBAAqBrF,SAAS4C,KAEpE,IAAI6C,GAAY3tB,KAAKosB,WAiCrB,IAhCApsB,KAAKkb,QAAQ,OAAQyS,EAAW,SAAUA,GAEtC,GADA7rB,EAAMsqB,YAAcuB,EAChBN,IAAcvrB,EAAMsqB,YAAYqB,OAAQ,CACxCvmB,WAASpF,EAAMghB,aAAaE,QA9vCnC,YA+vCOlhB,EAAMsqB,YAAYsB,SAASllB,YAAY1G,EAAM0E,cAC7C1E,EAAM0lB,SAASoG,gBAAgB9rB,EAAMwN,aACrC,IAAIue,IACApW,KAAM,SACNtP,SAAUtE,UAAQC,SAAW,EA9vClC,IAgwCsB,OAAjBhC,EAAMgF,OACNhF,EAAM0lB,SAASmB,KAAK,GAAImF,aAAUD,GAAgB/rB,EAAMD,SAGxDC,EAAM0lB,SAASmB,KAAK,GAAImF,aAAUD,GAAgB,MAGtDlsB,EAAOzB,UAAUqG,gBAAgBxE,KAAKD,EAAOA,EAAMyrB,mBAAoBzrB,EAAM0lB,SAAS3lB,QAASC,EAAM4E,MAAO7C,UAAQC,UACpHhC,EAAMuqB,wBAGNvqB,GAAM0lB,SAASlO,UACfxX,EAAM0E,aAAe1E,EAAM0lB,SAAW,IAErCtkB,qBAAkBpB,EAAMwN,eAA8C,KAA7BxN,EAAMwN,aAAanJ,QACxDjD,oBAAkBpB,EAAM4H,mBAAqB5H,EAAM4H,iBAAiBuB,iBAAiB,iBAAiBtK,OAAS,IAChHuG,YAAUpF,EAAM4H,iBAAiBC,cAAc,kBA7wCrD,kBA8wCM1C,cAAYnF,EAAM4H,iBAAiBuB,iBAAiB,iBA/wC7D,eAkxCC5B,eAAa1F,IAAIukB,SAAU,uBAAwBpmB,EAAMioB,gBAAiBjoB,KAE1E+B,UAAQC,SAAU,CAClB,GAAIiqB,GAAa/tB,KAAKsE,cAAc,OAASuD,UAAW,iBACxDkmB,GAAWlnB,MAAMC,QAAU9G,KAAK8G,OAAS,GAAGC,WAC5C/G,KAAKutB,mBAAmB/kB,YAAYulB,MAUhDlM,EAAW3hB,UAAUqP,KAAO,SAAU8L,GAClC,GAAIvZ,GAAQ9B,IACZ,IAAKkD,oBAAkBlD,KAAKwG,cAuBpB3C,UAAQC,UAAY9D,KAAKojB,YAAcpjB,KAAKqjB,UAC5CrjB,KAAKsP,aAAaiK,gBAAgB,YAEtCvZ,KAAKmjB,mBA1BkC,CACvC,GAAI6K,IAAY,CAChBhuB,MAAKosB,aACD5d,eAAgB,WACZwf,GAAY,GAEhBR,MAAOxtB,KAAKwnB,SACZnM,MAAOA,GAAS,KAChBoS,QAAQ,GAEZxmB,cAAYjH,KAAK8iB,aAAaE,QApzC7B,YAqzCD/b,eAAaihB,SAAS4C,MApzCnB,kBAqzCH,IAAI6C,GAAY3tB,KAAKosB,WACjBpsB,MAAKolB,aACLplB,KAAKkb,QAAQ,QAASyS,EAAW,SAAUA,GACvC7rB,EAAMmsB,mBAAmBD,EAAWL,KAIxC3tB,KAAKiuB,mBAAmBD,EAAWL,KAW/C9L,EAAW3hB,UAAU+tB,mBAAqB,SAAUC,EAASP,GACzD3tB,KAAKosB,YAAcuB,EACf3tB,KAAKolB,cAAiB8I,IAAYluB,KAAKosB,YAAYqB,SACnDztB,KAAKwnB,SAASjY,OACdvP,KAAK+hB,iBAAkB,EACvB/hB,KAAKiN,eAAeqM,UACpBrS,cAAYjH,KAAK8iB,aAAaE,QA90C7B,aAg1CLhjB,KAAKqsB,oBACDxoB,UAAQC,UAAY9D,KAAK0G,QACzB1G,KAAK0G,MAAMG,MAAMkkB,QAAU,OAC3B/qB,KAAK0G,MAAMynB,UAAY,GACvBnuB,KAAK0G,MAAQ,MAEb7C,UAAQC,WACHZ,oBAAkBlD,KAAKutB,sBACvBW,IAAYhrB,oBAAkBlD,KAAKosB,cAAiBpsB,KAAKosB,YAAYqB,SACtEztB,KAAKutB,mBAAmB1jB,SACxB7J,KAAKutB,mBAAqB,OAGlClkB,eAAaQ,OAAOqe,SAAU,uBAAwBloB,KAAK+pB,iBACvDlmB,UAAQC,UAAY9D,KAAKojB,YAAcpjB,KAAKqjB,UAC5CrjB,KAAKsP,aAAaiK,gBAAgB,YAEtCvZ,KAAKmjB,gBASTtB,EAAW3hB,UAAUkuB,QAAU,SAAUC,GACjCnG,SAASyB,gBAAkB3pB,KAAKsP,cAAgBtP,KAAKyE,UACrDzE,KAAKsP,aAAaX,QAClBzH,YAAUlH,KAAK8iB,aAAaC,YAh3CvB,oBAy3CblB,EAAW3hB,UAAU+pB,SAAW,WACxB/B,SAASyB,gBAAkB3pB,KAAKsP,eAChCrI,eAAajH,KAAK8iB,aAAaC,YA33C1B,kBA43CL/iB,KAAKsP,aAAaoZ,SAU1B7G,EAAW3hB,UAAUyN,YAAc,WAC/B,GAAIA,EAKJ,OAJI3N,MAAKqE,kBAELsJ,EAAchM,EAAOzB,UAAUyN,YAAY5L,KAAK/B,OAE7C2N,GAWXkU,EAAW3hB,UAAU4N,WAAa,SAAUM,EAAMqB,GAC1CzP,KAAKqE,iBAEL1C,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMqB,IAQrDoS,EAAW3hB,UAAUoZ,QAAU,WAC3BtZ,KAAKynB,eACDznB,KAAK8kB,kBACL9kB,KAAKinB,YAAciB,SAASjF,uBAAuB,gBAAgB,IAEvEthB,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,MAC9B4iB,QAAMtJ,SACFzX,QAAS7B,KAAKsP,aACdqT,eAAgB3iB,KAAK2iB,eACrBkC,WAAY7kB,KAAK6kB,YAClB7kB,KAAKinB,aACH/jB,oBAAkBlD,KAAKqnB,kBACxBrnB,KAAKqnB,gBAAgB/N,UAErBtZ,KAAKwnB,UAAYxnB,KAAKwnB,SAAS3lB,QAAQ6B,UAAU+I,SAl7CjD,YAm7CA9K,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,KAElC,IAAIikB,IACAzc,cAAe,OAAQJ,gBAAiB,OACxC8c,gBAAiB,QAASrb,KAAQ,WAAYsb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAASjd,aAAcrH,KAAKyD,gBAEzFzD,MAAKsP,eACLsT,QAAM0L,iBAAiBrK,EAAWjkB,KAAKsP,cAClCpM,oBAAkBlD,KAAKuuB,iBAAiBpqB,aAAa,aAItDnE,KAAKsP,aAAaiK,gBAAgB,YAHlCvZ,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,UAKpDoF,eAAaQ,OAAO7J,KAAKsP,aAAc,OAAQtP,KAAK6mB,kBACpDxd,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK4mB,mBACrD5mB,KAAKwuB,wBAELxuB,KAAKolB,eACDplB,KAAKwG,cACL0E,SAAOlL,KAAKwG,cAEhBxG,KAAKwnB,SAAWxnB,KAAKwG,aAAe,KACpCxG,KAAKiN,eAAeqM,WAEL,OAAftZ,KAAKyuB,QACDzuB,KAAKsP,eACApM,oBAAkBlD,KAAK8iB,eACxB9iB,KAAK8iB,aAAaC,UAAU2L,sBAAsB,WAAY1uB,KAAKsP,cAEvErI,eAAajH,KAAKsP,eA/8ClB,aAi9CJrI,eAAajH,KAAK6B,UAAWV,IACxB+B,oBAAkBlD,KAAK8iB,eACxB5X,SAAOlL,KAAK8iB,aAAaC,YAG7B/iB,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKonB,kBAExDpnB,KAAK8iB,aAAe,KACpB9iB,KAAKqnB,gBAAkB,MAE3BxF,EAAW3hB,UAAUsuB,qBAAuB,WAExC,IAAK,GADDxW,MACKhX,EAAI,EAAGA,EAAIhB,KAAKsP,aAAavL,WAAWpD,OAAQK,IACrDgX,EAAKhX,GAAKhB,KAAKsP,aAAavL,WAAW/C,GAAGyW,IAE9C,KAASzW,EAAI,EAAGA,EAAIgX,EAAKrX,OAAQK,IACzBkC,oBAAkBlD,KAAKuuB,iBAAiBpqB,aAAa6T,EAAKhX,MAC5B,UAA1BgX,EAAKhX,GAAGmJ,gBACRnK,KAAKsP,aAAanJ,MAAQ,IAE9BnG,KAAKsP,aAAaiK,gBAAgBvB,EAAKhX,MAGT,UAA1BgX,EAAKhX,GAAGmJ,gBACRnK,KAAKsP,aAAanJ,MAAQnG,KAAKuuB,iBAAiBpqB,aAAa6T,EAAKhX,KAEtEhB,KAAKsP,aAAalL,aAAa4T,EAAKhX,GAAIhB,KAAKuuB,iBAAiBpqB,aAAa6T,EAAKhX,OAU5F6gB,EAAW3hB,UAAU2P,UAAY,WAC7B7P,KAAKuuB,iBAAmBvuB,KAAK6B,QAAQc,WAAU,GAC/CsE,eAAajH,KAAKuuB,mBAAoBptB,EA9/ChC,YADA,UAggDNnB,KAAKsP,aAAetP,KAAK6B,QACzB7B,KAAKmnB,YAAc5iB,UAAQvE,KAAKsP,aAAc,QAC9CtP,KAAK2G,MAAQ3G,KAAK8kB,gBAAkB,EAAI,EACxC9kB,KAAKyuB,MAAQ,KACgB,mBAAzBzuB,KAAK6B,QAAQ6lB,SAAyD,uBAAzB1nB,KAAK6B,QAAQ6lB,UAC1D1nB,KAAKyuB,MAAQzuB,KAAK6B,QAAQ6lB,QAC1B1nB,KAAKsP,aAAetP,KAAKsE,cAAc,SACvCtE,KAAK6B,QAAQ2G,YAAYxI,KAAKsP,eAE9BtP,KAAK6B,QAAQsC,aAAa,MACP,OAAfnE,KAAKyuB,QACLzuB,KAAKsP,aAAatG,GAAKhJ,KAAK6B,QAAQsC,aAAa,MAAQ,UAIhC,mBAAzBnE,KAAKyD,iBACLzD,KAAK6B,QAAQmH,GAAK0M,cAAY,sBACX,OAAf1V,KAAKyuB,OACL1qB,aAAW/D,KAAKsP,cAAgBtG,GAAMhJ,KAAK6B,QAAQmH,GAAK,aAI5DhJ,KAAK6B,QAAQmH,GAAK0M,cAAY,kBACX,OAAf1V,KAAKyuB,OACL1qB,aAAW/D,KAAKsP,cAAgBtG,GAAMhJ,KAAK6B,QAAQmH,GAAK,YAIjD,OAAfhJ,KAAKyuB,OACLzuB,KAAK2uB,oBAAoB3uB,KAAK6B,QAAS7B,KAAKsP,cAEhDtP,KAAKgpB,+BACLhpB,KAAK8E,kBAAoB9E,KAAK6E,sBAC9B7E,KAAK4uB,qBAAoB,GACzB5uB,KAAKiE,SAAWjE,KAAK6B,QAAQqC,aAAa,YAAclE,KAAK6B,QAAQsC,aAAa,YAAc,IAChGnE,KAAK6B,QAAQ0X,gBAAgB,YAC7B5X,EAAOzB,UAAU2P,UAAU9N,KAAK/B,OAEpC6hB,EAAW3hB,UAAU2E,oBAAsB,WAwBvC,MAvBA7E,MAAK8E,mBACDgB,WAAY,cACZ+oB,aAAc,gBACdC,OAAQ,SACRC,MAAO,QACPhqB,UAAW,UACXC,YAAa,UACbC,SAAU,YACVC,OAAQ,UACRC,SAAU,YACVC,UAAW,aACXC,OAAQ,QACRC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,SAAU,WACVC,YAAa,eACbC,cAAe,iBACfC,YAAa,YACbC,WAAY,WACZmpB,SAAU,YACVC,IAAK,OAEFjvB,KAAK8E,mBAEhB+c,EAAW3hB,UAAUyuB,oBAAsB,SAAUruB,EAAQgP,GACzD,GAAI4f,GAAgB5uB,EAAO6D,aAAa,QAAU7D,EAAO6D,aAAa,QAAU7D,EAAO6D,aAAa,KACpGmL,GAAalL,aAAa,OAAQ8qB,GAClC5uB,EAAOiZ,gBAAgB,OAEvB,KAAK,GADD4V,IAAa,WAAY,gBAAiB,QACrCnuB,EAAI,EAAGA,EAAImuB,EAAUxuB,OAAQK,IAClC,IAAIkC,oBAAkB5C,EAAO6D,aAAagrB,EAAUnuB,KAApD,CAGA,GAAIouB,GAAO9uB,EAAO6D,aAAagrB,EAAUnuB,GACzCsO,GAAalL,aAAa+qB,EAAUnuB,GAAIouB,GACxC9uB,EAAOiZ,gBAAgB4V,EAAUnuB,MAGzC6gB,EAAW3hB,UAAUmvB,YAAc,WAC/B,GAAIpJ,GAAU,GAAIjjB,wBAAqBhD,KAAKiD,OAC5C,IAAIjD,KAAKwS,OACL,GAA2B,gBAAhBxS,MAAKwS,OACZxS,KAAK0lB,aAAe1lB,KAAKwS,WAExB,IAA6B,KAAzBxS,KAAKwS,OAAON,UAAoBhP,oBAAkBlD,KAAKwS,OAAON,UAUtC,mBAAzBlS,KAAKyD,gBACLzD,KAAK0lB,aAAe1lB,KAAK2lB,eAGzB3lB,KAAK0lB,aAAe,SAdsD,CAC9E,GAAI4J,GAAiBtvB,KAAKwS,OAAON,QACJ,oBAAzBlS,KAAKyD,gBACLzD,KAAK0lB,aAAeO,EAAQC,gBAAiBhU,SAAUod,EAAgBrnB,KAAM,aAG7EjI,KAAK0lB,aAAeO,EAAQC,gBAAiBhU,SAAUod,EAAgBrnB,KAAM,aAarFjI,MAAK0lB,aAAe,MAG5B7D,EAAW3hB,UAAU0uB,oBAAsB,SAAUW,GACjDvvB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKqvB,cACLrvB,KAAKkY,WACL,IAEItW,GAFAmC,EAAawrB,EAAUrsB,oBAAkBlD,KAAK4oB,mBAAuBnpB,OAAOiL,KAAK1K,KAAK4oB,iBACrF,QAAS,MAAO,MAAO,WAAY,WAAY,QAAS,OAAQ,cAAe,OAI5EhnB,GAFqB,mBAAzB5B,KAAKyD,gBACqB,cAAtBzD,KAAK4C,cAED4P,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,QAK5BM,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAK3B,cAAtBxT,KAAK4C,cACO4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAGvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,UAG5F,KAAK,GAAIhJ,GAAK,EAAGglB,EAAezrB,EAAYyG,EAAKglB,EAAa7uB,OAAQ6J,IAAM,CACxE,GAAIwN,GAAOwX,EAAahlB,EACxB,KAAKtH,oBAAkBlD,KAAKsP,aAAanL,aAAa6T,IAClD,OAAQA,GACJ,IAAK,WACD,GAAM9U,oBAAkBlD,KAAKwiB,wBAA6DpK,KAAtCpY,KAAKwiB,kBAA2B,SAAqB+M,EAAU,CAC/G,GAAI9qB,GAAmD,aAAzCzE,KAAKsP,aAAanL,aAAa6T,IACA,KAAzChY,KAAKsP,aAAanL,aAAa6T,IACU,SAAzChY,KAAKsP,aAAanL,aAAa6T,EACnChY,MAAKoD,eAAgBqB,QAASA,IAAY8qB,GAE9C,KACJ,KAAK,WACD,GAAMrsB,oBAAkBlD,KAAKwiB,wBAA8DpK,KAAvCpY,KAAKwiB,kBAA4B,UAAqB+M,EAAU,CAChH,GAAIlM,GAAoD,aAAzCrjB,KAAKsP,aAAanL,aAAa6T,IACD,KAAzChY,KAAKsP,aAAanL,aAAa6T,IAAyD,SAAzChY,KAAKsP,aAAanL,aAAa6T,EAClFhY,MAAKoD,eAAgBigB,SAAUA,IAAakM,GAEhD,KACJ,KAAK,eACKrsB,oBAAkBlD,KAAKwiB,wBAAiEpK,KAA1CpY,KAAKwiB,kBAA+B,aAAqB+M,IACzGvvB,KAAKoD,eAAgBygB,YAAa7jB,KAAKsP,aAAanL,aAAa6T,KAAUuX,EAE/E,MACJ,KAAK,QACDvvB,KAAKsP,aAAalL,aAAa,QAAS,GAAKpE,KAAKsP,aAAanL,aAAa6T,GAC5E,MACJ,KAAK,OACDhY,KAAKsP,aAAalL,aAAa,OAAQ,GAAKpE,KAAKsP,aAAanL,aAAa6T,GAC3E,MACJ,KAAK,QACD,GAAM9U,oBAAkBlD,KAAKwiB,wBAA2DpK,KAApCpY,KAAKwiB,kBAAyB,OAAqB+M,EAAU,CAC7G,GAAIppB,GAAQnG,KAAKsP,aAAanL,aAAa6T,EAC3ChY,MAAKoD,cAAcqlB,WAASzQ,EAAMhY,KAAK+C,UAAUoP,UAAUhM,EAAOvE,QAAgB2tB,GAEtF,KACJ,KAAK,MACD,IAAMvvB,KAAKwC,MAAS,GAAIM,MAAK,KAAM,EAAG,IAAOysB,EAAS,CAClD,GAAI/sB,GAAMxC,KAAKsP,aAAanL,aAAa6T,EACzChY,MAAKoD,cAAcqlB,WAASzQ,EAAMhY,KAAK+C,UAAUoP,UAAU3P,QAAY+sB,GAE3E,KACJ,KAAK,MACD,IAAMvvB,KAAKyC,MAAS,GAAIK,MAAK,KAAM,GAAI,KAAQysB,EAAS,CACpD,GAAI9sB,GAAMzC,KAAKsP,aAAanL,aAAa6T,EACzChY,MAAKoD,cAAcqlB,WAASzQ,EAAMhY,KAAK+C,UAAUoP,UAAU1P,QAAY8sB,GAE3E,KACJ,KAAK,OAC4C,SAAzCvvB,KAAKsP,aAAanL,aAAa6T,IAC/BhY,KAAKsP,aAAalL,aAAa,OAAQ,WAa/Dyd,EAAW3hB,UAAUuD,cAAgB,WACjC,MAAO,cAEXoe,EAAW3hB,UAAUmlB,cAAgB,SAAUF,EAAW7C,OACpC,KAAd6C,IAAwBA,GAAY,OACzB,KAAX7C,IAAqBA,GAAS,EAClC,IAAI/O,GAEAkc,EAAYzvB,KAAKoG,eAAepG,KAAKmG,OAAS,GAAIrD,OAAM9C,KAAKmG,OAAS,GAAIrD,MAAK9C,KAAKqG,WAAWrG,KAAKmG,QACpGupB,EAAkB1vB,KAAKye,YAE3Bze,MAAKulB,kBACAJ,GAAcA,IAAcjiB,oBAAkBlD,KAAK2vB,iBACpDhuB,EAAOzB,UAAUoC,OAAOP,KAAK/B,MAEjCA,KAAKye,aAAeiR,CACpB,IAAIjgB,GAAOggB,MACPG,EAAe,eAAehS,QAAQ,MAAO,GAAKnO,EACjDzP,MAAKslB,aACoB,gBAAftlB,MAAKmG,OAA8C,gBAAfnG,MAAKmG,QAAyBnG,KAAKmG,QAAaspB,IAC3FzvB,KAAKoD,eAAgB+C,MAAOspB,IAAa,GAG5CvsB,oBAAkBlD,KAAKqE,kBAAqBnB,oBAAkBlD,KAAKqE,gBAAgB4G,iBAAiB2kB,GAAc,KAC/G5vB,KAAKqE,gBAAgB4G,iBAAiB2kB,GAAc,GAAGlsB,UAAU+I,SAAS,gBACrEzM,KAAKslB,aACNtlB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAIrE,IAAIqsB,EACyB,oBAAzB7vB,KAAKyD,gBAaLosB,EAZ0B,cAAtB7vB,KAAK4C,aACO5C,KAAK+C,UAAUqP,WAAWqd,GAClCjd,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,QAIpBlS,KAAK+C,UAAUqP,WAAWqd,GAClCjd,OAAStP,oBAAkBlD,KAAK0lB,cAAoC1lB,KAAK2lB,eAAzB3lB,KAAK0lB,aACrDzd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,aAOjDD,EADsB,cAAtBvT,KAAK4C,cACa4P,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,QAGvDM,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MAAOsB,SAAU,WAE9Fqc,EAAW7vB,KAAK+C,UAAUqP,WAAWqd,EAAWlc,IAE/CvT,KAAKwnB,WACNxnB,KAAK8jB,iBAAiB+L,GAClB7vB,KAAKwjB,aACLxjB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKyjB,OAAO,cACRC,OAAQ,iBAAkBpB,OAAQA,OAKlDT,EAAW3hB,UAAUmsB,kBAAoB,WACjCrsB,KAAKolB,cACLxC,QAAMsC,eAAgBhB,gBAAiB,QAAUlkB,KAAKsP,cACtDvL,aAAW/D,KAAKsP,cAAgBwgB,YAAa9vB,KAAKsP,aAAatG,GAAK,aACpEjF,aAAW/D,KAAKsP,cAAgBygB,gBAAiB/vB,KAAKsP,aAAatG,KAC/DhJ,KAAKmG,OACLpC,aAAW/D,KAAKsP,cAAgBxG,wBAAyB,GAAK9I,KAAK8Y,0BAIvE8J,QAAMsC,eAAgBhB,gBAAiB,SAAWlkB,KAAKsP,cACvDtP,KAAKsP,aAAaiK,gBAAgB,aAClCvZ,KAAKsP,aAAaiK,gBAAgB,iBAClCvZ,KAAKsP,aAAaiK,gBAAgB,2BAG1CsI,EAAW3hB,UAAU0lB,WAAa,WAC9B,GAAIgK,GAAe,eAAehS,QAAQ,MAAO,KAAO5d,KAAKmG,OACzD6pB,EAAiBhwB,KAAKqE,iBACtBrE,KAAKqE,gBAAgB4G,iBAAiB2kB,GAAc,IACpD5vB,KAAKqE,gBAAgB4G,iBAAiB2kB,GAAc,GAAGlsB,UAAU+I,SAAS,gBACxEvJ,oBAAkBlD,KAAKmG,QAAWjD,oBAAkBlD,KAAKwC,MAC1DU,oBAAkBlD,KAAKyC,MAAU,GAAIK,MAAK9C,KAAKmG,OAAOmY,gBAAgB,IAAM,GAAIxb,MAAK9C,KAAKwC,KAAK8b,gBAAgB,IAC7G,GAAIxb,MAAK9C,KAAKmG,OAAOmY,gBAAgB,IAAM,GAAIxb,MAAK9C,KAAKyC,KAAK6b,gBAAgB,MAC5Ete,KAAKslB,YAA0C,KAA5BtlB,KAAKsP,aAAanJ,OAAgBnG,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,iBAAmBhf,oBAAkBlD,KAAKmG,QAAU6pB,GAC/I9oB,YAAUlH,KAAK8iB,aAAaC,WAxxD5B,WAyxDAhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,UAE1CrhB,oBAAkBlD,KAAK8iB,gBAC7B7b,eAAajH,KAAK8iB,aAAaC,WA5xD/B,WA6xDAhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,YAWxD1C,EAAW3hB,UAAU2X,kBAAoB,SAAUC,EAASC,GACxD,IAAK,GAAIvN,GAAK,EAAGC,EAAKhL,OAAOiL,KAAKoN,GAAUtN,EAAKC,EAAG9J,OAAQ6J,IAAM,CAE9D,OADWC,EAAGD,IAEV,IAAK,QACDxK,KAAKoiB,uBAAwB,EAC7BpiB,KAAKuf,cAAe,EACpBvf,KAAKgiB,mBAAqB,KAC1BhiB,KAAKujB,kBAAkBzL,EAAQ3R,OAC/B2R,EAAQ3R,MAAQnG,KAAKmG,MACrBnG,KAAK+jB,qBAAuB/jB,KAAKsP,aAAanJ,MAC1CjD,oBAAkBlD,KAAKmG,SACnBnG,KAAKwjB,WACLxjB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAG3BliB,KAAK8jB,iBAAiB,IAE1B9jB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAE7DxD,KAAKkjB,aAAY,IACZljB,KAAKye,eAAkBze,KAAKmG,OAC7BnG,KAAK0pB,cAAc,MAEvB1pB,KAAKuf,cAAe,EACpBvf,KAAKoC,cAAgBpC,KAAKqP,WAAarP,KAAKoC,eAAiBpC,KAAKoC,cAAgBpC,KAAKoC,cACnFpC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,SACD1jB,KAAKqvB,cACLrvB,KAAKwmB,iBACLxmB,KAAKkjB,cACDljB,KAAKwjB,aACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,mBAEP1jB,KAAKmG,OACNnG,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAGnC,MACJ,KAAK,YACDliB,KAAKmjB,cACL,MACJ,KAAK,cACDP,QAAMqN,eAAejwB,KAAK6jB,YAAa7jB,KAAKsP,aAC5C,MACJ,KAAK,WACDsT,QAAMsN,YAAYlwB,KAAKqjB,SAAUrjB,KAAKsP,aACtC,MACJ,KAAK,UACDsT,QAAMuN,WAAWnwB,KAAKyE,QAASzE,KAAKsP,cACpCtP,KAAK0sB,iBACL,MACJ,KAAK,iBACD1sB,KAAKgpB,+BACLhpB,KAAK4jB,+BACL5jB,KAAK4uB,qBAAoB,EACzB,MACJ,KAAK,SACD5uB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKwkB,KAAKrM,UAAUnY,KAAKiD,QACrBjD,KAAKwiB,mBAA2D,MAAtCxiB,KAAKwiB,kBAAkBqB,cACjD7jB,KAAKoD,eAAgBygB,YAAa7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAC1E0W,QAAMqN,eAAejwB,KAAK6jB,YAAa7jB,KAAKsP,eAEhDtP,KAAKkjB,cACDljB,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,YACDd,QAAMwN,aAAapwB,KAAK4D,WAAY5D,KAAK8iB,aAAaC,WACtD,MACJ,KAAK,QACL,IAAK,QACD/iB,KAAKkY,YACDlY,KAAKqE,iBACL1C,EAAOzB,UAAU2X,kBAAkB9V,KAAK/B,KAAM8X,EAASC,EAE3D,MACJ,KAAK,SACD/X,KAAKoD,eAAgB0D,OAAQgR,EAAQhR,SAAU,EAC/C,MACJ,KAAK,WACD9G,KAAKipB,eAAenR,EAAQqF,SAAUpF,EAAQoF,SAC9C,MACJ,KAAK,kBACDyF,QAAMyN,eAAerwB,KAAK8kB,gBAAiB9kB,KAAKsP,aAActP,KAAK8iB,cACnE9iB,KAAK6nB,iBACL7nB,KAAK2G,MAAQ3G,KAAK8kB,gBAAkB,EAAI,CACxC,MACJ,KAAK,aACD9kB,KAAKgiB,mBAAqB,KAC1BhiB,KAAKkjB,aACL,MACJ,KAAK,QACDljB,KAAKglB,SAASlN,EAAQmN,OACtBrC,QAAMC,eAAe7iB,KAAKsP,aAActP,KAAK8iB,aAAaC,WACrD7f,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,iBACD3D,KAAK2iB,eAAiB7K,EAAQ6K,eAC9BC,QAAM0N,eAAetwB,KAAK8iB,cAC1BF,QAAM2N,YAAYvwB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK6jB,aAC1D3gB,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,aACG3D,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,mBAEZ1jB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKwmB,kBAGDxmB,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,iBACjCliB,KAAK8jB,iBAAiB,GAG9B,MACJ,SACQ9jB,KAAKqE,iBAAmBrE,KAAKolB,cAC7BzjB,EAAOzB,UAAU2X,kBAAkB9V,KAAK/B,KAAM8X,EAASC,GAI9D/X,KAAKoiB,uBACNpiB,KAAKuP,KAAK,MAEdvP,KAAKoiB,uBAAwB,IAGrChiB,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,YAAS,IAClCE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,YAAS,IAClCE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,eAAY,IACrCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,iBAAc,IACvCE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,aAAU,IACnCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,cAAW,IACpCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,qBAAkB,IAC3CE,GACIkc,gBACDuF,EAAW3hB,UAAW,qBAAkB,IAC3CE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,aAAU,IACnCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,uBAAoB,IAC7CE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,sBAAmB,IAC5CE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,gBAAa,IACtCE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,iBAAc,IACvCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,wBAAqB,IAC9CE,GACIkc,WAAS,MACVuF,EAAW3hB,UAAW,aAAU,IACnCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,eAAY,IACrCE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,kBAAe,IACxCE,GACIkc,WAAS,UACVuF,EAAW3hB,UAAW,qBAAkB,IAC3CE,GACIkc,WAAS,OACVuF,EAAW3hB,UAAW,2BAAwB,IACjDE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,kBAAe,IACxCE,GACIkc,YAAS,IACVuF,EAAW3hB,UAAW,iBAAc,IACvCE,GACIkc,YAAW5K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQgb,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtH9O,EAAW3hB,UAAW,sBAAmB,IAC5CE,GACImc,WACDsF,EAAW3hB,UAAW,WAAQ,IACjCE,GACImc,WACDsF,EAAW3hB,UAAW,cAAW,IACpCE,GACImc,WACDsF,EAAW3hB,UAAW,YAAS,IAClCE,GACImc,WACDsF,EAAW3hB,UAAW,WAAQ,IACjCE,GACImc,WACDsF,EAAW3hB,UAAW,YAAS,IAClCE,GACImc,WACDsF,EAAW3hB,UAAW,cAAW,IACpCE,GACImc,WACDsF,EAAW3hB,UAAW,gBAAa,IACtC2hB,EAAazhB,GACToc,yBACDqF,IAELnF,GCzjEErd,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAiB5DgwB,EAAe,kBACfC,EAAgB,mBAGhB1vB,EAAO,oBAIP2vB,EAAS,WAETC,EAAY,eACZC,EAAU,aAIVC,EAAa,gBAIb5vB,EAAW,aAEX6vB,EAAW,aAYXC,EAAY,iBAEZC,EAAU,aAEVC,EAAe,kBACfC,EAAe,kBAMfhwB,EAAU,YAEViwB,EAAY,cAEZC,EAAQ,UAURC,GAAe,QAAS,QAAS,SACjCC,EAAyB,SAAU/vB,GAEnC,QAAS+vB,KACL,MAAkB,QAAX/vB,GAAmBA,EAAOgwB,MAAM3xB,KAAMU,YAAcV,KAW/D,MAbAX,GAAUqyB,EAAS/vB,GAInBvB,GACIkc,cACDoV,EAAQxxB,UAAW,YAAS,IAC/BE,GACIkc,cACDoV,EAAQxxB,UAAW,YAAS,IAC/BE,GACIkc,cACDoV,EAAQxxB,UAAW,UAAO,IACtBwxB,GACTE,iBAeEC,EAAiC,SAAUlwB,GAS3C,QAASkwB,GAAgBjwB,EAASC,GAC9B,GAAIC,GAAQH,EAAOI,KAAK/B,KAAM4B,EAASC,IAAY7B,IAgBnD,OAfA8B,GAAMgwB,eAAgB,EACtBhwB,EAAMiwB,gBAAiB,EACvBjwB,EAAMkwB,eACNlwB,EAAMmwB,iBACNnwB,EAAMowB,iBAAmB,GACzBpwB,EAAMqwB,YAAa,EACnBrwB,EAAMswB,cAAe,EACrBtwB,EAAMuwB,oBAAqB,EAC3BvwB,EAAMwwB,kBAAmB,EACzBxwB,EAAMywB,gBACNzwB,EAAM0wB,aAAc,EACpB1wB,EAAM2wB,cAAe,EACrB3wB,EAAMkgB,mBAAqB,KAC3BlgB,EAAMM,eAAgB,EACtBN,EAAM4wB,iBAAmB9wB,EAClBE,EAm4IX,MA55IAzC,GAAUwyB,EAAiBlwB,GAiC3BkwB,EAAgB3xB,UAAUoC,OAAS,WAC/BtC,KAAKyiB,aACLziB,KAAKoD,eAAgBmY,UAAWvb,KAAK2yB,aAAc,GACnD3yB,KAAKoD,eAAgBoY,QAASxb,KAAK4yB,WAAY,GAC/C5yB,KAAK6yB,gBACL7yB,KAAK8yB,kBAAiB,GAClB9yB,KAAK6B,QAAQqC,aAAa,aAC1BlE,KAAK6B,QAAQuC,aAAa,WAAY,SAEd,UAAxBpE,KAAK2iB,gBACLC,QAAMC,eAAe7iB,KAAKsP,aAActP,KAAK8iB,aAAaC,WAEzD7f,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQvE,KAAK6B,QAAS,cAAgB0C,UAAQvE,KAAK6B,QAAS,YAAY2C,WAC3FxE,KAAKyE,SAAU,GAEnBzE,KAAKwd,kBAQTqU,EAAgB3xB,UAAU2P,UAAY,WAgDlC,GA/CA7P,KAAK+yB,iBACDlE,aAAc,gBACdC,OAAQ,SACRC,MAAO,QACPE,IAAK,MACLjpB,cAAe,iBACfC,aAAc,gBACdf,OAAQ,UACRD,SAAU,YACVc,SAAU,SAEd/F,KAAKgzB,iBACDnP,YAAa7jB,KAAK6jB,YAClBoP,WAAY,aACZC,SAAU,WACVC,YAAa,eACbC,UAAW,QACXC,WAAY,SACZC,aAAc,gBACd9nB,KAAM,QAKVxL,KAAKuzB,WAAY1vB,oBAA2B8nB,OAAO6H,WAAW,qBAAqBC,QACnFzzB,KAAKsP,aAAetP,KAAK6B,QACzB7B,KAAK0zB,WAAa,KACW,wBAAzB1zB,KAAK6B,QAAQ6lB,UACb1nB,KAAK0zB,WAAa1zB,KAAK6B,QAAQ6lB,QAC/B1nB,KAAKsP,aAAetP,KAAKsE,cAAc,SACvCtE,KAAK6B,QAAQ2G,YAAYxI,KAAKsP,eAElCtP,KAAK2zB,aAAe3zB,KAAK6B,QAAQc,WAAU,GAC3CsE,eAAajH,KAAK2zB,eAAgBxyB,EAjL5B,YADA,UAmLNnB,KAAKgpB,+BACDhpB,KAAK6B,QAAQsC,aAAa,MACF,OAApBnE,KAAK0zB,aACL1zB,KAAKsP,aAAatG,GAAKhJ,KAAK6B,QAAQsC,aAAa,MAAQ,WAI7DnE,KAAK6B,QAAQmH,GAAK0M,cAAY,sBACN,OAApB1V,KAAK0zB,YACL3vB,aAAW/D,KAAKsP,cAAgBtG,GAAMhJ,KAAK6B,QAAQmH,GAAK,YAGhEhJ,KAAK4zB,kBAAkB5zB,KAAKmG,QACvBnG,KAAKgiB,oBAA+C,gBAAhBhiB,YAA2B,CAChE,GAAI6zB,GAAa7zB,KAAKmG,MAAMgI,MAAM,IAAMnO,KAAK8zB,UAAY,IACzD9zB,MAAKmG,OAAS,GAAIrD,MAAK+wB,EAAW,IAAK,GAAI/wB,MAAK+wB,EAAW,KAE/D7zB,KAAK+zB,eACL/zB,KAAKiE,SAAWjE,KAAK6B,QAAQqC,aAAa,YAAclE,KAAK6B,QAAQsC,aAAa,YAAc,IAChGnE,KAAK6B,QAAQ0X,gBAAgB,YAC7B5X,EAAOzB,UAAU2P,UAAU9N,KAAK/B,MAChCA,KAAKg0B,gBAAkBh0B,KAAKi0B,aAAa3mB,KAAKtN,MAC9CA,KAAKk0B,gBAAkBl0B,KAAKm0B,aAAa7mB,KAAKtN,MAC9CA,KAAKo0B,sBAAwBp0B,KAAKq0B,cAAc/mB,KAAKtN,MACrDA,KAAKs0B,sBAAwBt0B,KAAKu0B,kBAAkBjnB,KAAKtN,MACzDA,KAAKw0B,cAAgBx0B,KAAKoG,eAAepG,KAAK2yB,YAC9C3yB,KAAKy0B,YAAcz0B,KAAKoG,eAAepG,KAAK4yB,UAC5C5yB,KAAKmnB,YAAc5iB,UAAQvE,KAAK6B,QAAS,SAE7CgwB,EAAgB3xB,UAAUw0B,YAAc,WAChC10B,KAAKmG,OAASnG,KAAKmG,MAAMxF,OAAS,GAC9BX,KAAKmG,MAAM,YAAcrD,QAASqT,OAAOnW,KAAKmG,MAAM,KACpDnG,KAAKoD,eAAgBmY,UAAWvb,KAAKmG,MAAM,KAAM,GACjDnG,KAAK2yB,WAAa3yB,KAAKmG,MAAM,IAEC,gBAAlBnG,MAAKmG,MAAM,GACA,IAAlBnG,KAAKmG,MAAM,IAAYgQ,UAAYrT,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,OACpEnG,KAAK2yB,WAAa,KAClB3yB,KAAKyoB,aAGLzoB,KAAKoD,eAAgBmY,UAAW,GAAIzY,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,OAAQ,GAC5EnG,KAAK2yB,WAAa,GAAI7vB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,OAI1DnG,KAAK2yB,WAAa,KAClB3yB,KAAKyoB,YAELzoB,KAAKmG,MAAM,YAAcrD,QAASqT,OAAOnW,KAAKmG,MAAM,KACpDnG,KAAKoD,eAAgBoY,QAASxb,KAAKmG,MAAM,KAAM,GAC/CnG,KAAK4yB,SAAW5yB,KAAKmG,MAAM,IAEG,gBAAlBnG,MAAKmG,MAAM,GACA,IAAlBnG,KAAKmG,MAAM,IAAYgQ,UAAYrT,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,OACpEnG,KAAKoD,eAAgBoY,QAAS,OAAQ,GACtCxb,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,aAGLzoB,KAAKoD,eAAgBoY,QAAS,GAAI1Y,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,OAAQ,GAC1EnG,KAAK4yB,SAAW,GAAI9vB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAM,KACpDnG,KAAKyoB,aAITzoB,KAAKoD,eAAgBoY,QAAS,OAAQ,GACtCxb,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,aAGJzoB,KAAKmG,OAASnG,KAAKmG,MAAMuF,OAC1B1L,KAAKmG,MAAMuF,gBAAiB5I,QAASqT,OAAOnW,KAAKmG,MAAMuF,QACvD1L,KAAKoD,eAAgBmY,UAAWvb,KAAKmG,MAAMuF,QAAS,GACpD1L,KAAK2yB,WAAa3yB,KAAKmG,MAAMuF,OAEI,gBAArB1L,MAAKmG,MAAMuF,OACvB1L,KAAKoD,eAAgBmY,UAAW,GAAIzY,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAMuF,UAAW,GAC/E1L,KAAK2yB,WAAa,GAAI7vB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAMuF,UAGtD1L,KAAK2yB,WAAa,KAClB3yB,KAAKyoB,YAELzoB,KAAKmG,MAAMZ,cAAezC,QAASqT,OAAOnW,KAAKmG,MAAMZ,MACrDvF,KAAKoD,eAAgBoY,QAASxb,KAAKmG,MAAMZ,MAAO,GAChDvF,KAAK4yB,SAAW5yB,KAAKmG,MAAMZ,KAEI,gBAAnBvF,MAAKmG,MAAMZ,KACvBvF,KAAKoD,eAAgBoY,QAAS,GAAI1Y,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAMZ,QAAS,GAC3EvF,KAAK4yB,SAAW,GAAI9vB,MAAK9C,KAAKqG,WAAWrG,KAAKmG,MAAMZ,MACpDvF,KAAKyoB,aAGLzoB,KAAKoD,eAAgBoY,QAAS,OAAQ,GACtCxb,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,aAGJvlB,oBAAkBlD,KAAKmG,SAC5BnG,KAAK4yB,SAAW5yB,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKwb,WAClExb,KAAK2yB,WAAa3yB,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKub,aACpEvb,KAAKyoB,aAGboJ,EAAgB3xB,UAAU6zB,aAAe,WACrC/zB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKqvB,cACLrvB,KAAKkY,aACDhV,oBAAkBlD,KAAKmD,iBAAmBnD,KAAKmD,eAAiB,GAAKnD,KAAKmD,eAAiB,IAC3FnD,KAAKoD,eAAgBD,eAAgBnD,KAAK+C,UAAUM,sBAAuB,GAE/ErD,KAAK00B,eAET7C,EAAgB3xB,UAAUmvB,YAAc,WACpC,GAAIrvB,KAAKwS,OACL,GAA2B,gBAAhBxS,MAAKwS,OACZxS,KAAK0lB,aAAe1lB,KAAKwS,WAExB,IAA6B,KAAzBxS,KAAKwS,OAAON,UAAoBhP,oBAAkBlD,KAAKwS,OAAON,UAKnElS,KAAK0lB,aAAe,SAL0D,CAC9E,GAAI4J,GAAiBtvB,KAAKwS,OAAON,QACjClS,MAAK0lB,aAAe1lB,KAAK+C,UAAUmjB,gBAAiBhU,SAAUod,EAAgBrnB,KAAM,aAOxFjI,MAAK0lB,aAAe,MAG5BmM,EAAgB3xB,UAAUuiB,WAAa,WACX,OAApBziB,KAAK0zB,YACL1zB,KAAK2uB,oBAAoB3uB,KAAK6B,QAAS7B,KAAKsP,cAEhDtP,KAAK4uB,qBAAoB,GACzB+F,QAAM30B,KAAK8E,mBAAqBkqB,SAAU,YAAaC,IAAK,OAC5D,IAAIvjB,GAAQ1L,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAK2yB,aAC9D3yB,MAAKoD,eAAgBmY,UAAW7P,IAAS,GACzC1L,KAAKoD,eAAgBwvB,SAAU5yB,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAK4yB,cAAe,GAChG5yB,KAAKyoB,WACLzoB,KAAKoD,eAAgBZ,IAAKxC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,SAAU,GACtFxC,KAAKoD,eAAgBX,IAAKzC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWrG,KAAKyC,SAAU,GACtFzC,KAAKwkB,KAAO,GAAIjY,QAAK,kBAAmBvM,KAAKgzB,gBAAiBhzB,KAAKiD,QACnEjD,KAAKwkB,KAAKrM,UAAUnY,KAAKiD,QACzBjD,KAAKoD,eAAgBygB,YAAa7jB,KAAK6jB,aAAe7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAC9FlM,KAAK40B,iBACL50B,KAAK2jB,cACL3jB,KAAK4jB,+BACL5jB,KAAK60B,oBACL70B,KAAK0iB,cAETmP,EAAgB3xB,UAAU4yB,iBAAmB,SAAU3N,GACnD,GAAIphB,KACJ,IAAKohB,EAODphB,EAAa/D,KAAK4oB,mBANlB,KAAK,GAAI5nB,GAAI,EAAGA,EAAIhB,KAAK6B,QAAQkC,WAAWpD,OAAQK,IAChD+C,EAAW/D,KAAK6B,QAAQkC,WAAW/C,GAAGyW,MAClCzX,KAAK6B,QAAQsC,aAAanE,KAAK6B,QAAQkC,WAAW/C,GAAGyW,KAMjE,KAAK,GAAIjN,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK3G,GAAayG,EAAKC,EAAG9J,OAAQ6J,IAAM,CACjE,GAAIsqB,GAAMrqB,EAAGD,EACe,KAAxBsqB,EAAIlhB,QAAQ,UACZ5T,KAAK+0B,iBAAiB3wB,aAAa0wB,EAAK/wB,EAAW,GAAK+wB,IACxD90B,KAAKg1B,kBAAkB5wB,aAAa0wB,EAAK/wB,EAAW,GAAK+wB,OAIrEjD,EAAgB3xB,UAAU20B,kBAAoB,WACtC70B,KAAKojB,UACApjB,KAAKqjB,UACNrjB,KAAKsP,aAAaiK,gBAAgB,YAItCxV,aAAW/D,KAAKsP,cAAgB+T,SAAY,KAEhDrjB,KAAKi1B,wBAETpD,EAAgB3xB,UAAU+0B,qBAAuB,WACxCj1B,KAAKojB,YAAapjB,KAAK8iB,cAAiB9iB,KAAKqjB,SAQzCrjB,KAAK8iB,cACV7b,eAAajH,KAAK8iB,aAAaC,YAjUzB,eAyT0B,KAA5B/iB,KAAKsP,aAAanJ,MAClBc,eAAajH,KAAK8iB,aAAaC,YA1T7B,eA6TF7b,YAAUlH,KAAK8iB,aAAaC,YA7T1B,gBAoUd8O,EAAgB3xB,UAAUyuB,oBAAsB,SAAU9sB,EAASqzB,GAC/D,GAAIzd,GAAO5V,EAAQsC,aAAa,QAAUtC,EAAQsC,aAAa,QAAUtC,EAAQsC,aAAa,KAC9F+wB,GAAM9wB,aAAa,OAAQqT,GAC3B5V,EAAQ0X,gBAAgB,OAExB,KAAK,GADDxV,IAAc,WAAY,gBAAiB,QACtC/C,EAAI,EAAGA,EAAI+C,EAAWpD,OAAQK,IACnC,IAAIkC,oBAAkBrB,EAAQsC,aAAaJ,EAAW/C,KAAtD,CAGA,GAAIouB,GAAOvtB,EAAQsC,aAAaJ,EAAW/C,GAC3Ck0B,GAAM9wB,aAAaL,EAAW/C,GAAIouB,GAClCvtB,EAAQ0X,gBAAgBxV,EAAW/C,MAG3C6wB,EAAgB3xB,UAAU0jB,6BAA+B,WACrD,IAAK1gB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACb,IAAIinB,EAAY7d,QAAQrT,IAAQ,EAC5B,GAAY,UAARA,EAAiB,CACjB,GAAI40B,GAAqBn1B,KAAK4oB,eAAe,GAAKroB,GAAKqd,QAAQ,OAAQ,KAAMC,MACnD,MAAtBsX,GACAjuB,YAAUlH,KAAK8iB,aAAaC,WAAYoS,EAAkBhnB,MAAM,UAGnE,IAAY,UAAR5N,EAAiB,CACtB,GAAI60B,GAAiBp1B,KAAK8iB,aAAaC,UAAU5e,aAAa5D,EAC9D60B,GAAkBlyB,oBAAkBkyB,GAChCp1B,KAAK4oB,eAAe,GAAKroB,GAD0B60B,EAAiBp1B,KAAK4oB,eAAe,GAAKroB,GAEjGP,KAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAK60B,OAG9Cp1B,MAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAM3FsxB,EAAgB3xB,UAAU8oB,6BAA+B,WACrD,IAAK9lB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACTinB,GAAY7d,QAAQrT,GAAO,GAC3BP,KAAKsP,aAAalL,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAK7EsxB,EAAgB3xB,UAAU+oB,eAAiB,SAAUoM,EAAaC,GACzDpyB,oBAAkBoyB,KACnBA,EAAeA,EAAY1X,QAAQ,OAAQ,KAAMC,QAEhD3a,oBAAkBmyB,KACnBA,EAAeA,EAAYzX,QAAQ,OAAQ,KAAMC,QAErD+E,QAAMsG,YAAYmM,GAAcr1B,KAAK8iB,aAAaC,WAAYuS,GAC1Dt1B,KAAKwG,cACLoc,QAAMsG,YAAYmM,GAAcr1B,KAAKwG,cAAe8uB,IAG5DzD,EAAgB3xB,UAAU00B,eAAiB,WACvC50B,KAAKgyB,cACL,IAAIhxB,GAAI,CACR,KAAKu0B,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,OAAQ,CACrF,IAAK,GAAIjrB,GAAK,EAAGC,EAAKzK,KAAKw1B,QAAShrB,EAAKC,EAAG9J,OAAQ6J,IAAM,CACtD,GAAIkrB,GAAQjrB,EAAGD,GACXxB,EAAK0sB,EAAMD,MAAM7X,QAAQ,OAAQ,IAAM,OAAS5c,CAC3B,iBAAd00B,GAAMnwB,IACbvF,KAAKgyB,YAAYpnB,MACb5B,GAAIA,EAAI8B,KAAM4qB,EAAMD,MAAOlwB,IAAK,GAAIzC,MAAK9C,KAAKqG,WAAWqvB,EAAMnwB,MAAOmG,MAAO,GAAI5I,MAAK9C,KAAKqG,WAAWqvB,EAAMhqB,UAIhH1L,KAAKgyB,YAAYpnB,MAAO5B,GAAIA,EAAI8B,KAAM4qB,EAAMD,MAAO/pB,MAAOgqB,EAAMhqB,MAAOnG,IAAKmwB,EAAMnwB,MAG1F,GAAIgW,GAAYrY,oBAAkBlD,KAAK2yB,YAAc,KAAO,GAAI7vB,OAAM9C,KAAK2yB,YACvEnX,EAAUtY,oBAAkBlD,KAAK4yB,UAAY,KAAO,GAAI9vB,OAAM9C,KAAK4yB,SACvE5yB,MAAKgyB,YAAYpnB,MAAO5B,GAAI,eAAgB8B,KAAM9K,KAAKwkB,KAAKtY,YAAY,eAAgBR,MAAO6P,EAAWhW,IAAKiW,IAC1GtY,oBAAkBlD,KAAK2yB,aAAgBzvB,oBAAkBlD,KAAK4yB,YAC/D5yB,KAAK8xB,eAAgB,EACrB9xB,KAAK21B,YAAc31B,KAAKgyB,YAAYrxB,OAAS,KAIzDkxB,EAAgB3xB,UAAUwiB,WAAa,WACnCrZ,eAAa1F,IAAI3D,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAK41B,iBAAkB51B,MACnFqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAK4mB,kBAAmB5mB,MACrEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,OAAQtP,KAAK6mB,iBAAkB7mB,MACnEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,SAAUtP,KAAKgnB,mBAAoBhnB,MACnEA,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,YAAajnB,KAAKknB,aAAclnB,MAE/EA,KAAKuzB,WACNvzB,KAAK+yB,gBAAkBhmB,SAAO/M,KAAK+yB,gBAAiB/yB,KAAKgN,YACzDhN,KAAK61B,oBAAsB,GAAI3oB,kBAAelN,KAAKsP,cAC/CnC,UAAW,UACXC,UAAWpN,KAAKymB,aAAanZ,KAAKtN,MAClCgN,WAAYhN,KAAK+yB,mBAGrB/yB,KAAKmnB,aACL9d,eAAa1F,IAAI3D,KAAKmnB,YAAa,QAASnnB,KAAKqd,iBAAkBrd,MAEnEA,KAAKyE,QACLzE,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,UAGhDjE,KAAKsP,aAAarL,UAAY,GAGtC4tB,EAAgB3xB,UAAUunB,aAAe,WACrCpe,eAAaQ,OAAO7J,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAK41B,kBACpEvsB,eAAaQ,OAAO7J,KAAKsP,aAAc,OAAQtP,KAAK6mB,kBACpDxd,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK4mB,mBACrDvd,eAAaQ,OAAO7J,KAAKsP,aAAc,SAAUtP,KAAKgnB,oBAClDhnB,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAaQ,OAAO7J,KAAK8iB,aAAamE,YAAa,uBAAwBjnB,KAAKknB,cAE/ElnB,KAAKuzB,UACDrwB,oBAAkBlD,KAAK61B,sBACxB71B,KAAK61B,oBAAoBvc,UAG7BtZ,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKqd,kBAExDrd,KAAKsP,aAAarL,UAAY,GAElC4tB,EAAgB3xB,UAAU41B,kBAAoB,WAC1C,GAAI91B,KAAK+0B,kBAAoB/0B,KAAKg1B,kBAAmB,CACjD,GAAIxiB,IAAWA,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MACxC,iBAAnBlS,MAAKub,YACZvb,KAAKub,UAAYvb,KAAK+C,UAAUoP,UAAUnS,KAAKub,UAAW/I,IAElC,gBAAjBxS,MAAKwb,UACZxb,KAAKwb,QAAUxb,KAAK+C,UAAUoP,UAAUnS,KAAKwb,QAAShJ,IAE1DxS,KAAK+0B,iBAAiB5uB,MAASnG,KAAKub,WAAavb,KAAK+C,UAAUqP,WAAWpS,KAAKub,UAAW/I,IACnFxS,KAAKsP,aAAmB,MAChCtP,KAAKg1B,kBAAkB7uB,MAASnG,KAAKwb,SAAWxb,KAAK+C,UAAUqP,WAAWpS,KAAKwb,QAAShJ,IACnFxS,KAAKsP,aAAmB,MAC7BtP,KAAKqoB,cAAcroB,KAAK+0B,iBAAkB,YAC1C/0B,KAAKqoB,cAAcroB,KAAK+0B,iBAAkB,YAGlDlD,EAAgB3xB,UAAU8mB,mBAAqB,SAAUvZ,GAChDzN,KAAKyE,UAGVgJ,EAAEma,kBACF5nB,KAAK81B,sBAETjE,EAAgB3xB,UAAU2nB,eAAiB,WACnC7nB,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,YAAajnB,KAAKknB,aAAclnB,OAGxF6xB,EAAgB3xB,UAAUgnB,aAAe,SAAUzZ,GAC/C,GAAKzN,KAAKyE,QAAV,CAGAzE,KAAK+1B,UAAY/1B,KAAKmG,MACtBsH,EAAEe,iBACFxO,KAAK8nB,OACL,IAAIC,IACA1M,MAAO5N,EAQX,IANAzN,KAAKoD,eAAgBoY,QAASxb,KAAKoG,eAAepG,KAAK4yB,YAAa,GACpE5yB,KAAKoD,eAAgBmY,UAAWvb,KAAKoG,eAAepG,KAAK2yB,cAAe,GACxE3yB,KAAKkb,QAAQ,UAAW6M,GACxB/nB,KAAK0pB,cAAcjc,GACnBzN,KAAKg2B,aACLh2B,KAAKuP,KAAK9B,GACNlJ,UAAQvE,KAAK6B,QAAS,QAAS,CAC/B,GAAIA,GAAU7B,KAAK+0B,iBACf9M,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrCvmB,EAAQwmB,cAAcJ,MAG9B4J,EAAgB3xB,UAAUynB,aAAe,WACrC3nB,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAKi2B,mBAAqBj2B,KAAK2yB,WAC/B3yB,KAAKk2B,iBAAmBl2B,KAAK4yB,SAC7B5yB,KAAK+1B,UAAY,KACjB/1B,KAAKw0B,cAAgBx0B,KAAKoG,eAAepG,KAAK2yB,YAC9C3yB,KAAKy0B,YAAcz0B,KAAKoG,eAAepG,KAAK4yB,UAC5C5yB,KAAKyoB,WACLzoB,KAAK6yB,iBAEThB,EAAgB3xB,UAAUmd,iBAAmB,SAAU5P,GACnD,GAAKzN,KAAKyE,SAGNzE,KAAKmnB,aAAgB1Z,EAAEnN,SAAWN,KAAKmnB,cAAiBnnB,KAAKsP,aAAa9K,SAAU,CACpF,GAAIshB,GAAM9lB,KAAKsP,aAAanL,aAAa,QACpCjB,qBAAkBlD,KAAKm2B,YAcxBn2B,KAAKoD,eAAgB+C,MAAO,KAAMoV,UAAW,KAAMC,QAAS,OAAQ,GACpExb,KAAK2yB,WAAa3yB,KAAK4yB,SAAW,OAd7B1vB,oBAAkBlD,KAAKmG,QAAWjD,oBAAkBlD,KAAKmG,MAAMuF,QAMhE1L,KAAKoD,eAAgB+C,OAAQnG,KAAKm2B,UAAWn2B,KAAKo2B,WAAY,GAC9Dp2B,KAAK2yB,WAAa3yB,KAAKmG,MAAM,GAC7BnG,KAAK4yB,SAAW5yB,KAAKmG,MAAM,KAP3BnG,KAAKoD,eAAgB+C,OAASuF,MAAO1L,KAAKm2B,UAAW5wB,IAAKvF,KAAKo2B,WAAa,GAC5Ep2B,KAAK2yB,WAAa3yB,KAAKmG,MAAMuF,MAC7B1L,KAAK4yB,SAAW5yB,KAAKmG,MAAMZ,KAO/BvF,KAAKoD,eAAgBmY,UAAWvb,KAAK2yB,WAAYnX,QAASxb,KAAK4yB,WAAY,IAMlD,wBAAzB5yB,KAAK6B,QAAQ6lB,UACb1nB,KAAKoD,eAAgB+C,MAAO,KAAMoV,UAAW,KAAMC,QAAS,OAAQ,GACpEsK,EAAM,GACN9lB,KAAK2yB,WAAa3yB,KAAK4yB,SAAW,KAClC5yB,KAAKsP,aAAalL,aAAa,QAAS,KAE5CpE,KAAK2nB,eACD3nB,KAAKsP,eACLsT,QAAM6F,SAAS3C,EAAK9lB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBACjE9kB,KAAK4lB,gBAIjBiM,EAAgB3xB,UAAU4nB,MAAQ,WACN,OAApB9nB,KAAK2yB,aACL3yB,KAAK2yB,WAAa,MAEA,OAAlB3yB,KAAK4yB,WACL5yB,KAAK4yB,SAAW,MAEhB5yB,KAAKmG,OAASnG,KAAKmG,MAAMuF,OACzB1L,KAAKoD,eAAgB+C,OAASuF,MAAO,KAAMnG,IAAK,QAAU,GAE3C,OAAfvF,KAAKmG,OAAkBnG,KAAKmG,MAAMxF,OAAS,GAC3CX,KAAKoD,eAAgB+C,MAAO,OAAQ,GAExCyc,QAAM6F,SAAS,GAAIzoB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBAC1D5hB,oBAAkBlD,KAAKq2B,eACzBr2B,KAAKq2B,YAAY7xB,SAAWxE,KAAKq2B,YAAYx0B,QAAQ2C,UAAW,GAEpExE,KAAKs2B,mBAETzE,EAAgB3xB,UAAU01B,iBAAmB,SAAUnoB,GAC9CzN,KAAKyE,UAGNzE,KAAKuzB,UACLvzB,KAAKsP,aAAalL,aAAa,WAAY,IAE/CqJ,EAAEe,iBACFxO,KAAKu2B,cAAgB,KACjBv2B,KAAKw2B,eAAiBtO,SAAS4C,KAAKre,SAASzM,KAAKwnB,SAAS3lB,SAC3D7B,KAAKy2B,cAAchpB,IAGnBzN,KAAKqyB,oBAAqB,EAC1BryB,KAAK8iB,aAAaC,UAAUtM,SAAS,GAAG9H,QACxC3O,KAAK2oB,KAAK,KAAMlb,GACXzN,KAAKuzB,UACDrwB,oBAAkBlD,KAAK02B,gBACxB12B,KAAKqyB,oBAAqB,EAC1BryB,KAAK22B,gBACL32B,KAAKqyB,oBAAqB,GAGlCnrB,YAAUlH,KAAK8iB,aAAaC,YA3nBvB,qBA8nBb8O,EAAgB3xB,UAAU0uB,oBAAsB,SAAUzJ,GACtDnlB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,OAK/C,KAAK,GAJDc,GAAaohB,EAAYjiB,oBAAkBlD,KAAK4oB,mBAAuBnpB,OAAOiL,KAAK1K,KAAK4oB,iBACvF,YAAa,UAAW,UAAW,UAAW,MAAO,MAAO,WAAY,WAAY,QAAS,OAAQ,cAClG,OAAQ,SACZpW,GAAWA,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OACzD1H,EAAK,EAAGglB,EAAezrB,EAAYyG,EAAKglB,EAAa7uB,OAAQ6J,IAAM,CACxE,GAAIwN,GAAOwX,EAAahlB,EACxB,KAAKtH,oBAAkBlD,KAAKsP,aAAanL,aAAa6T,IAClD,OAAQA,GACJ,IAAK,WACD,GAAK9U,oBAAkBlD,KAAK0yB,uBAA2Dta,KAArCpY,KAAK0yB,iBAA0B,SAAqBvN,EAAW,CAC7G,GAAI3gB,GAAoD,aAAzCxE,KAAKsP,aAAanL,aAAa6T,IACD,KAAzChY,KAAKsP,aAAanL,aAAa6T,IAAyD,SAAzChY,KAAKsP,aAAanL,aAAa6T,EAClFhY,MAAKoD,eAAgBqB,SAAUD,IAAa2gB,GAEhD,KACJ,KAAK,WACD,GAAKjiB,oBAAkBlD,KAAK0yB,uBAA4Dta,KAAtCpY,KAAK0yB,iBAA2B,UAAqBvN,EAAW,CAC9G,GAAI9B,GAAoD,aAAzCrjB,KAAKsP,aAAanL,aAAa6T,IACD,SAAzChY,KAAKsP,aAAanL,aAAa6T,IAA6D,KAAzChY,KAAKsP,aAAanL,aAAa6T,EACtFhY,MAAKoD,eAAgBigB,SAAUA,IAAa8B,GAEhD,KACJ,KAAK,eACIjiB,oBAAkBlD,KAAK0yB,uBAA+Dta,KAAzCpY,KAAK0yB,iBAA8B,aAAqBvN,IACtGnlB,KAAKoD,eAAgBygB,YAAa7jB,KAAKsP,aAAanL,aAAa6T,KAAUmN,EAE/E,MACJ,KAAK,QACD,GAAKjiB,oBAAkBlD,KAAK0yB,uBAAyDta,KAAnCpY,KAAK0yB,iBAAwB,OAAqBvN,EAAW,CAC3G,GAAIhf,GAAQnG,KAAKsP,aAAanL,aAAa6T,EAC3ChY,MAAKoD,cAAcqlB,WAASzQ,EAAM7R,OAAagf,GAEnD,KACJ,KAAK,QACDnlB,KAAKsP,aAAalL,aAAa,QAAS,GAAKpE,KAAKsP,aAAanL,aAAa6T,GAC5E,MACJ,KAAK,MACD,GAAK9U,oBAAkBlD,KAAKwC,OAASxC,KAAKwC,MAAS,GAAIM,MAAK,KAAM,EAAG,IAAOqiB,EAAW,CAC/EK,EAAYxlB,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanL,aAAa6T,GAAOxF,EAC/ExS,MAAKoD,cAAcqlB,WAASzQ,EAAMwN,OAAiBL,GAEvD,KACJ,KAAK,OACDnlB,KAAKsP,aAAalL,aAAa,OAAQ,GAAKpE,KAAKsP,aAAanL,aAAa6T,GAC3E,MACJ,KAAK,MACD,GAAK9U,oBAAkBlD,KAAKyC,OAASzC,KAAKyC,MAAS,GAAIK,MAAK,KAAM,GAAI,KAAQqiB,EAAW,CACjFK,EAAYxlB,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanL,aAAa6T,GAAOxF,EAC/ExS,MAAKoD,cAAcqlB,WAASzQ,EAAMwN,OAAiBL,GAEvD,KACJ,KAAK,YACD,GAAIjiB,oBAAkBlD,KAAKub,WAAY,CAC/BiK,EAAYxlB,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanL,aAAa6T,GAAOxF,EAC/ExS,MAAK2yB,WAAanN,EAClBxlB,KAAKyoB,WAET,KACJ,KAAK,UACD,GAAIvlB,oBAAkBlD,KAAKwb,SAAU,CACjC,GAAIgK,GAAYxlB,KAAK+C,UAAUoP,UAAUnS,KAAKsP,aAAanL,aAAa6T,GAAOxF,EAC/ExS,MAAK4yB,SAAWpN,EAChBxlB,KAAKyoB,WAET,KACJ,KAAK,UACGvlB,oBAAkBlD,KAAK42B,UACvB52B,KAAKoD,cAAcqlB,WAASzQ,EAAMpR,SAAS5G,KAAKsP,aAAanL,aAAa6T,GAAO,SAAU,EAE/F,MACJ,KAAK,UACG9U,oBAAkBlD,KAAK62B,UACvB72B,KAAKoD,cAAcqlB,WAASzQ,EAAMpR,SAAS5G,KAAKsP,aAAanL,aAAa6T,GAAO,SAAU,EAE/F,MACJ,KAAK,OAC4C,SAAzChY,KAAKsP,aAAanL,aAAa6T,IAC/BhY,KAAKsP,aAAalL,aAAa,OAAQ,WAO/DytB,EAAgB3xB,UAAU42B,YAAc,WACpC,IAAS91B,EAAI,EAAGA,EAAIhB,KAAKgyB,YAAYrxB,OAAQK,IACpCA,IAAOhB,KAAKgyB,YAAYrxB,OAAS,GAAkC,iBAA3BX,KAAKgyB,YAAYhxB,GAAGgI,IAC7DhJ,KAAKgyB,YAAYhf,OAAOhS,EAAG,EAGnChB,MAAK21B,YAAc31B,KAAKgyB,YAAYrxB,OAAS,EAC7CX,KAAK8xB,eAAgB,CACrB,KAAK,GAAI9wB,GAAI,EAAGA,GAAKhB,KAAKgyB,YAAYrxB,OAAS,EAAGK,IAAK,CACnD,GAAIua,GAAYvb,KAAKgyB,YAAYhxB,GAAG0K,MAChC8P,EAAUxb,KAAKgyB,YAAYhxB,GAAGuE,GAC9BvF,MAAK2yB,YAAc3yB,KAAK4yB,UACpBrX,EAAUxK,YAAc/Q,KAAK2yB,WAAW5hB,WAAawK,EAAUrK,aAAelR,KAAK2yB,WAAWzhB,YAC9FqK,EAAUnM,gBAAkBpP,KAAK2yB,WAAWvjB,eAAiBoM,EAAQzK,YAAc/Q,KAAK4yB,SAAS7hB,WACjGyK,EAAQtK,aAAelR,KAAK4yB,SAAS1hB,YAAcsK,EAAQpM,gBAAkBpP,KAAK4yB,SAASxjB,gBAC3FpP,KAAK21B,YAAc30B,EACnBhB,KAAK8xB,eAAgB,GAIjC9xB,KAAKwG,aAAelC,gBAAc,OAAS0E,GAAIhJ,KAAK6B,QAAQmH,GAAK,SAAUnB,UAAW1G,EAAO,aAC7FnB,KAAKwG,aAAapC,aAAa,aAAcpE,KAAK6B,QAAQmH,IAC1DhJ,KAAKwG,aAAapC,aAAa,OAAQ,UACvCpE,KAAK+2B,uBACL,IAAIC,IAAah3B,KAAK8xB,eAAiB9xB,KAAKuzB,UACvCgC,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,QAAUuB,GACvFh3B,KAAK+xB,gBAAiB,EACtB/xB,KAAKi3B,gBACLj3B,KAAKk3B,mBACLl3B,KAAKm3B,gBAGLn3B,KAAK+xB,gBAAiB,EACtB/xB,KAAKo3B,kBAGbvF,EAAgB3xB,UAAUk3B,cAAgB,WACtCp3B,KAAKq3B,gBACLr3B,KAAKs3B,qBACLt3B,KAAKu3B,YAAav3B,KAAKuzB,UAAYvzB,KAAKqE,kBAAoBrE,KAAK02B,aAAc12B,KAAKw3B,gBAC/Et0B,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAC5DzvB,oBAAkBlD,KAAKgO,qBAAsBhO,KAAKgO,kBAAkByE,YACrEzS,KAAKy3B,qBAETz3B,KAAK03B,gBAET7F,EAAgB3xB,UAAUy3B,oBAAsB,WACxC33B,KAAK43B,iBAAmB53B,KAAK63B,iBAAmB73B,KAAK83B,kBAAoB93B,KAAK+3B,mBAC9E1uB,eAAa2uB,YAAYh4B,KAAK43B,iBAC9BvuB,eAAa2uB,YAAYh4B,KAAK63B,iBAC9BxuB,eAAa2uB,YAAYh4B,KAAK83B,kBAC9BzuB,eAAa2uB,YAAYh4B,KAAK+3B,oBAGtClG,EAAgB3xB,UAAU+3B,eAAiB,WACvCt2B,EAAOzB,UAAUyW,YAAY5U,KAAK/B,OAEtC6xB,EAAgB3xB,UAAUg4B,kBAAoB,WAC1Cl4B,KAAK23B,sBACD33B,KAAK43B,kBAAoB53B,KAAK43B,gBAAgBl0B,UAAU+I,SAASpL,IACjEgI,eAAa1F,IAAI3D,KAAK43B,gBAAiB,YAAa53B,KAAKk0B,iBAEzDl0B,KAAK63B,kBAAoB73B,KAAK63B,gBAAgBn0B,UAAU+I,SAASpL,IACjEgI,eAAa1F,IAAI3D,KAAK63B,gBAAiB,YAAa73B,KAAKg0B,iBAEzDh0B,KAAK83B,mBAAqB93B,KAAK83B,iBAAiBp0B,UAAU+I,SAASpL,IACnEgI,eAAa1F,IAAI3D,KAAK83B,iBAAkB,YAAa93B,KAAKk0B,iBAE1Dl0B,KAAK+3B,mBAAqB/3B,KAAK+3B,iBAAiBr0B,UAAU+I,SAASpL,IACnEgI,eAAa1F,IAAI3D,KAAK+3B,iBAAkB,YAAa/3B,KAAKg0B,kBAGlEnC,EAAgB3xB,UAAUo3B,mBAAqB,WACtCt3B,KAAKuzB,UAmBNvzB,KAAKm4B,sBACL9uB,eAAa1F,IAAI3D,KAAKo4B,YAAYv2B,QAAS,QAAS7B,KAAKq4B,kBAAmBr4B,MAC5EqJ,eAAa1F,IAAI3D,KAAKs4B,UAAUz2B,QAAS,QAAS7B,KAAKq4B,kBAAmBr4B,QApB1EA,KAAKi4B,iBACLj4B,KAAKk4B,oBACLl4B,KAAKu4B,qBACLv4B,KAAKuI,mBAAqBvI,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,wCAC9D3J,KAAKuI,mBAAqBvI,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,uCAC9D3J,KAAK8E,kBAAoBiI,SAAO/M,KAAK8E,kBAAmB9E,KAAKgN,YAC7DhN,KAAKw4B,mBAAqB,GAAItrB,kBAAelN,KAAK02B,cAC9CvpB,UAAW,UACXC,UAAWpN,KAAKy4B,gBAAgBnrB,KAAKtN,MACrCgN,WAAYhN,KAAK8E,oBAErB9E,KAAK04B,oBAAsB,GAAIxrB,kBAAelN,KAAKw3B,eAC/CrqB,UAAW,UACXC,UAAWpN,KAAKy4B,gBAAgBnrB,KAAKtN,MACrCgN,WAAYhN,KAAK8E,qBAQrB9E,KAAK0L,QAAU1L,KAAK4N,OACpB5N,KAAK24B,yBAET34B,KAAK44B,qBAET/G,EAAgB3xB,UAAUq4B,mBAAqB,WAC3CrwB,eAAalI,KAAK43B,iBAAmBxvB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IACzFH,eAAalI,KAAK63B,iBAAmBzvB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IACzFH,eAAalI,KAAK83B,kBAAoB1vB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAC1FH,eAAalI,KAAK+3B,kBAAoB3vB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,KAE9FwpB,EAAgB3xB,UAAUi4B,oBAAsB,WAC5C9uB,eAAa2uB,YAAYh4B,KAAKsI,UAC9Be,eAAa2uB,YAAYh4B,KAAK+H,cAC9BG,eAAalI,KAAKsI,UAAYF,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAClFH,eAAalI,KAAK+H,cAAgBK,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAClFrI,KAAKsI,WAAatI,KAAKsI,SAAS5E,UAAU+I,SAASpL,IACnDgI,eAAa1F,IAAI3D,KAAKsI,SAAU,YAAatI,KAAKo0B,uBAElDp0B,KAAK+H,eAAiB/H,KAAK+H,aAAarE,UAAU+I,SAASpL,IAC3DgI,eAAa1F,IAAI3D,KAAK+H,aAAc,YAAa/H,KAAKs0B,wBAG9DzC,EAAgB3xB,UAAUm0B,cAAgB,SAAU5mB,GAChD,GAAI+F,GAAWjP,UAAQkJ,EAAEnN,OAAQ,IAAM4wB,EACvClxB,MAAK64B,qBAAqBrlB,GAC1BxT,KAAK6O,aAAapB,GAClBzN,KAAK84B,oBAETjH,EAAgB3xB,UAAUq0B,kBAAoB,SAAU9mB,GACpD,GAAI+F,GAAWjP,UAAQkJ,EAAEnN,OAAQ,IAAM4wB,EACvClxB,MAAK64B,qBAAqBrlB,GAC1BxT,KAAK8O,iBAAiBrB,GACtBzN,KAAK84B,oBAETjH,EAAgB3xB,UAAU24B,qBAAuB,SAAUrlB,GACnDA,IACAxT,KAAK+H,aAAeyL,EAAS7J,cAAc,WAC3C3J,KAAKsI,SAAWkL,EAAS7J,cAAc,WACvC3J,KAAKqE,gBAAkBmP,EACvBxT,KAAK+4B,eAAiBvlB,EACtBxT,KAAK0I,eAAiB8K,EAAS7J,cAAc,cAC7C3J,KAAK0J,iBAAmBrE,SAAO,mBAA0BmO,GACzDxT,KAAK2I,MAAQ6K,EAAS7J,cAAc,cAAeqvB,qBAAqB,SAAS,GACjFh5B,KAAKuI,mBAAqBiL,EAAS7J,cAAc,sBACjD3J,KAAK4H,cAAgB4L,EAAS7J,cAAc,eAGpDkoB,EAAgB3xB,UAAUm4B,kBAAoB,SAAUhd,GAEpD,GADcA,EAAMjI,cACR1P,UAAU+I,SAv2BZ,iBAu2BsCvJ,oBAAkBlD,KAAK2yB,YAAa,CAChF3yB,KAAKs4B,UAAUz2B,QAAQ6B,UAAUmG,OAAOinB,GACxC9wB,KAAKo4B,YAAYv2B,QAAQ6B,UAAUC,IAAImtB,EACnCtd,GAAWxT,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,EACzDlxB,MAAK64B,qBAAqBrlB,GACtBtQ,oBAAkBlD,KAAKqE,gBAAgBsF,cAAc,wCACrD3J,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK2yB,YAClC9oB,SAAO7J,KAAK0J,kBACZ1J,KAAKkJ,oBACLlJ,KAAK84B,oBAET94B,KAAKi5B,0BAEJ,KAAK/1B,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,UAAW,CAC/E5yB,KAAKo4B,YAAYv2B,QAAQ6B,UAAUmG,OAAOinB,GAC1C9wB,KAAKs4B,UAAUz2B,QAAQ6B,UAAUC,IAAImtB,EACrC,IAAItd,GAAWxT,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,EACzDlxB,MAAK64B,qBAAqBrlB,GACtBtQ,oBAAkBlD,KAAKqE,gBAAgBsF,cAAc,sCACrD3J,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK4yB,UAClC/oB,SAAO7J,KAAK0J,kBACZ1J,KAAKkJ,oBACLlJ,KAAK84B,oBAET94B,KAAKk5B,iBAAiBl5B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,IAChElxB,KAAKm5B,oBAGbtH,EAAgB3xB,UAAU0mB,kBAAoB,WAC1C,GAAK5mB,KAAKyE,QAAV,CAGAzE,KAAKwyB,aAAc,CACnB,IAAIlJ,IACAC,MAAOvpB,KAENA,MAAKyyB,cACNzyB,KAAKkb,QAAQ,QAASoO,GAE1BtpB,KAAKi1B,uBACDj1B,KAAKwpB,cAAgBxpB,KAAKyyB,cAC1BzyB,KAAKyyB,cAAe,EACpBzyB,KAAK2oB,QAGL3oB,KAAKyyB,cAAe,IAG5BZ,EAAgB3xB,UAAU2mB,iBAAmB,SAAUpZ,GACnD,GAAKzN,KAAKyE,QAAV,CAGA,IAAKzE,KAAKwyB,YAAa,CACnB,GAAIrsB,GAAQnG,KAAKsP,aAAanJ,KAO9B,IANKjD,oBAAkBlD,KAAKgyB,cACpBhyB,KAAKgyB,YAAYrxB,OAAS,GAAKX,KAAKkyB,mBAAqBlyB,KAAKsP,aAAanJ,QAC3EnG,KAAK21B,YAAc31B,KAAKgyB,YAAYrxB,OAAS,EAC7CX,KAAK8xB,eAAgB,IAGxB5uB,oBAAkBiD,IAA2B,KAAjBA,EAAM0X,OAAe,CAClD,GAAI6X,GAAQvvB,EAAMgI,MAAM,IAAMnO,KAAK8zB,UAAY,IAC/C,IAAI4B,EAAM/0B,OAAS,EAAG,CAClBX,KAAKgiB,mBAAqB,IAC1B,IAAIwI,IAAgBhY,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OACnExG,EAAQ1L,KAAK+C,UAAUoP,UAAUujB,EAAM,GAAIlL,GAC3CjlB,EAAMvF,KAAK+C,UAAUoP,UAAUujB,EAAM,GAAIlL,GACzCjP,EAAYvb,KAAKo5B,gBAAgB1tB,GAAO,EAAOgqB,EAAOlL,GACtDhP,EAAUxb,KAAKo5B,gBAAgB7zB,GAAK,EAAMmwB,EAAOlL,EACrD,MAAKtnB,oBAAkBqY,IAAepF,OAAOoF,IAAerY,oBAAkBsY,IAAarF,OAAOqF,IAAU,CACxG,GAAI6d,GAAer5B,KAAK2yB,UACxB3yB,MAAK2yB,WAAapX,CAClB,IAAI+d,GAAat5B,KAAK4yB,QAOtB,IANA5yB,KAAK4yB,SAAWpX,EAChBxb,KAAKyoB,WACLzoB,KAAKu5B,iBACDpzB,IAAUnG,KAAKkyB,kBACflyB,KAAK0pB,cAAcjc,IAElBzN,KAAKwyB,aAAetK,SAASyB,gBAAkB3pB,KAAKsP,aAAc,CACnEtP,KAAKyyB,cAAe,CAChB7I,IACAL,MAAOvpB,KAEXA,MAAKkb,QAAQ,OAAQ0O,GASzB,MAPA5pB,MAAK81B,yBAGD91B,KAAKuzB,UAAYvzB,KAAKw2B,gBACtBx2B,KAAK2yB,WAAa0G,EAClBr5B,KAAK4yB,SAAW0G,IAKft5B,KAAKslB,aACNtlB,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,gBAKRzoB,MAAKslB,aACNtlB,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,YAuBjB,GAnBKzoB,KAAKslB,YAUDpiB,oBAAkBiD,IAA2B,KAAjBA,EAAM0X,SACnC7d,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,MAEpBhQ,QAAM6F,SAAS,GAAIzoB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBAChE9kB,KAAKkjB,gBAdDhgB,oBAAkBlD,KAAKwnB,YACvBxnB,KAAKsG,YAAc,MAEvBtG,KAAKi2B,mBAAqBj2B,KAAKk2B,iBAAmB,KAClDl2B,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,YAUTzoB,KAAK4lB,aACL5lB,KAAK0pB,cAAcjc,IACdzN,KAAKwyB,aAAetK,SAASyB,gBAAkB3pB,KAAKsP,aAAc,CACnEtP,KAAKyyB,cAAe,CACpB,IAAI7I,IACAL,MAAOvpB,KAEXA,MAAKkb,QAAQ,OAAQ0O,IAG7B5pB,KAAK81B,sBAETjE,EAAgB3xB,UAAUk5B,gBAAkB,SAAU3pB,EAAM+pB,EAAO9D,EAAOlL,GACtE,MAAmB,UAAfxqB,KAAK4N,MACE5N,KAAK+C,UAAUoP,UAAUujB,EAAM8D,EAAQ,EAAI,GAAG3b,OAAQ2M,GAEzC,SAAfxqB,KAAK4N,MACH,GAAI9K,MAAK2M,EAAKL,cAAeK,EAAKyB,YAAcsoB,EAAQ,EAAI,GAAIA,EAAQ,EAAI,GAG5E,GAAI12B,MAAK2M,EAAKL,cAAeoqB,EAAQ,GAAK,EAAGA,EAAQ,GAAK,IAGzE3H,EAAgB3xB,UAAU81B,WAAa,WACnCh2B,KAAKi2B,mBAAqBj2B,KAAKk2B,iBAAmB,KAClDl2B,KAAKsG,YAAc,MAEvBurB,EAAgB3xB,UAAU0lB,WAAa,WACnC,GAAI6T,GAAWz5B,KAAKsP,aAAanJ,MAAM0X,QACjC3a,oBAAkBlD,KAAK4yB,WAAa1vB,oBAAkBlD,KAAK2yB,aAA4B,KAAb8G,IACzEv2B,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,MACxDU,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAAe5yB,KAAK2yB,YAAc3yB,KAAK4yB,WACtG1vB,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,KAC/DzC,KAAK2yB,YAAc3yB,KAAK05B,eAAe15B,KAAK2yB,aACzC3yB,KAAK4yB,UAAY5yB,KAAK05B,eAAe15B,KAAK4yB,YAA6B,KAAb6G,GAClEvyB,YAAUlH,KAAK8iB,aAAaC,WA/gC5B,WAghCAhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,UAG5CvkB,KAAK8iB,eACL7b,eAAajH,KAAK8iB,aAAaC,WAphCnC,WAqhCIhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,YAI5DsN,EAAgB3xB,UAAUy5B,kBAAoB,SAAUC,EAAgBC,EAAKC,GAezE,WAdsB,KAAlBA,IAA4BA,GAAgB,GAC5CA,GACA95B,KAAK44B,oBAELgB,GACA55B,KAAK+5B,mBAAqB,GAAIj3B,OAAM9C,KAAKsG,aACzCuzB,EAAM75B,KAAK02B,eAGX12B,KAAKg6B,oBAAsB,GAAIl3B,OAAM9C,KAAKsG,aAC1CuzB,EAAM75B,KAAKw3B,eAEfx3B,KAAKi6B,sBAAsBJ,GAC3B75B,KAAK2I,MAAMgG,QACJkrB,GAEXhI,EAAgB3xB,UAAUg6B,cAAgB,SAAUzsB,EAAGmsB,EAAgBO,EAAWC,EAAYP,GAC1F,GACIpqB,GAEAhN,EAHA2L,EAAOpO,KAAK6N,cAAc7N,KAAK2N,eAE/BnL,EAAMxC,KAAKwC,GAQf,QAFIC,EAJCS,oBAAkBlD,KAAK62B,WAAY72B,KAAKsyB,kBAAqBpvB,oBAAkBlD,KAAK2yB,YAI/E3yB,KAAKyC,IAHL,GAAIK,MAAK,GAAIA,OAAM9C,KAAK2yB,YAAYhe,QAAQ3U,KAAK2yB,WAAW5hB,WAAa/Q,KAAK62B,QAAU,KAK1FppB,EAAES,QACN,IAAK,YACDuB,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAK2P,OAAOF,EAAM,EAAGhC,EAAGhL,EAAKD,GACzBo3B,IAAmBnqB,IAAU2qB,IAC7BP,EAAM75B,KAAK25B,mBAAkB,EAAOE,IAExC75B,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGhL,EAAKD,GACvCxC,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,WACDgC,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAK2P,OAAOF,GAAO,EAAGhC,EAAGhL,EAAKD,GACzBo3B,IACInqB,IAAU0qB,IACXN,EAAM75B,KAAK25B,mBAAkB,EAAME,IAG3C75B,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGhL,EAAKD,GACxCxC,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,SACY,IAATW,GACAqB,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAK2P,OAAOF,GAAO,EAAGhC,EAAGhL,EAAKD,IACzBiN,IAAS0qB,IAAcP,IACxBC,EAAM75B,KAAK25B,mBAAkB,EAAME,IAEvC75B,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGhL,EAAKD,IAGxCxC,KAAKuO,kBAAkB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAEtDxC,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,WACY,IAATW,GACAqB,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAK2P,OAAOF,EAAM,EAAGhC,EAAGhL,EAAKD,GACzBo3B,IAAmBnqB,IAAS2qB,IAC5BP,EAAM75B,KAAK25B,mBAAkB,EAAOE,IAExC75B,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGhL,EAAKD,IAGvCxC,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGzN,KAAKyC,IAAKzC,KAAKwC,KAErDxC,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,OACDzN,KAAKsG,YAActG,KAAKgP,SAAShP,KAAKsG,aACtCuD,SAAO7J,KAAK0J,kBACC,IAAT0E,EACApO,KAAK6L,aAAa4B,GAEJ,IAATW,EACLpO,KAAK2L,YAAY8B,GAGjBzN,KAAK4L,cAAc6B,GAEvBzN,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,MACDzN,KAAKsG,YAActG,KAAKiP,QAAQjP,KAAKsG,YAAa8H,GAClDvE,SAAO7J,KAAK0J,kBACC,IAAT0E,EACApO,KAAK6L,aAAa4B,GAEJ,IAATW,EACLpO,KAAK2L,YAAY8B,GAGjBzN,KAAK4L,cAAc6B,GAEvBzN,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,MACGzN,KAAKs6B,iBAAiBT,EAAKjJ,KAC3BiJ,EAAM75B,KAAK25B,mBAAkB,EAAOE,GAAK,GACzC75B,KAAKsG,YAActG,KAAKu6B,iBAAiBv6B,KAAKw3B,eAC9CppB,EAAOpO,KAAK6N,cAAc7N,KAAK2N,eAC/B3N,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGhL,EAAKD,GACvCxC,KAAKq6B,cAAcR,EAAKpsB,GAE5B,MACJ,KAAK,WACGzN,KAAKs6B,iBAAiBT,EAAKhJ,KAC3BgJ,EAAM75B,KAAK25B,mBAAkB,EAAME,GAAK,GACxC75B,KAAKsG,YAActG,KAAKu6B,iBAAiBv6B,KAAK02B,cAC9C12B,KAAKuO,iBAAiB,EAAGH,EAAMX,EAAGhL,EAAKD,GACvCxC,KAAKq6B,cAAcR,EAAKpsB,MAKxCokB,EAAgB3xB,UAAUq6B,iBAAmB,SAAU/mB,GACnD,GAAIgnB,GAA0D,IAA3Cx6B,KAAK6N,cAAc7N,KAAK2N,eAAuB6F,EAASiD,SAAS,GAAGqT,kBAAkBngB,cAAc,qEAAuE6J,EAASiD,SAAS,GAAGqT,kBAAkBngB,cAAc,sEAC/O8wB,EAAaD,GAAgBA,EAAaxxB,GAAKwxB,EAAaxxB,GAAGmF,MAAM,KAAK,GAAK,KAC/EusB,EAAkB,GAAI53B,MAAK9C,KAAKsG,YAAY8I,cAAepP,KAAKsG,YAAY4K,WAAY,EAE5F,OADgBupB,GAAa,GAAI33B,OAAM23B,GAAcC,GAGzD7I,EAAgB3xB,UAAUu4B,gBAAkB,SAAUhrB,EAAGtH,GACrD,GAAIsJ,GACArB,EAAOpO,KAAK6N,cAAc7N,KAAK2N,eAC/BgtB,EAAiB,GAAI73B,MAAK9C,KAAKg6B,oBAAoB5qB,cAAepP,KAAKg6B,oBAAoB9oB,WAAY,GACvG0pB,EAAgB,GAAI93B,MAAK9C,KAAK+5B,mBAAmB3qB,cAAepP,KAAK+5B,mBAAmB7oB,WAAa,EAAG,GACxG2oB,EAAMt1B,UAAQkJ,EAAEnN,OAAQ,IAAMuwB,GAE9B+I,GADJC,EAAM32B,oBAAkB22B,GAAO75B,KAAK02B,aAAemD,GAC1Bn2B,UAAU+I,SAASmkB,EAC5C5wB,MAAKi6B,sBAAsBJ,EAC3B,IAAIjwB,GAAe5J,KAAK0J,iBAAiBC,cAAc,oBACnDF,EAAcowB,EAAIlwB,cAAc,SAAWwnB,GAC3C5V,EAAYse,EAAIlwB,cAAc,SAAWonB,GACzCvV,EAAUqe,EAAIlwB,cAAc,SAAWqnB,GACvC3iB,EAAarO,KAAK6N,cAAc7N,KAAK4N,OACrCU,EAAiBF,IAASC,GAAcrO,KAAK6N,cAAc7N,KAAK0L,QAAU2C,EAC1EqoB,EAAenyB,UAAQkJ,EAAEnN,OAAQ,IAAMswB,GACvC4G,EAAgBjzB,UAAQkJ,EAAEnN,OAAQ,IAAMuwB,GACxCgK,EAAgBt2B,UAAQkJ,EAAEnN,OAAQ,aAetC,QAdK4C,oBAAkBuG,GAIbvG,oBAAkBsY,IAAaxb,KAAKoyB,aAGpClvB,oBAAkBqY,IAAevb,KAAKoyB,aAGtCpyB,KAAKoyB,cACXpyB,KAAKsG,YAAYqO,QAAQ,GAHzB3U,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK2yB,YAHlC3yB,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK4yB,UAHlC5yB,KAAKsG,YAActG,KAAKsG,YAW5BtG,KAAKgC,OAAS,GACNyL,EAAES,QACN,IAAK,aACGlO,KAAKw2B,gBACLx2B,KAAKuP,KAAK9B,GACVzN,KAAKyyB,cAAe,EACpBzyB,KAAKsP,aAAaX,QAClBzH,YAAUlH,KAAK8iB,aAAaC,YA5rC/B,kBA8rCD,MACJ,KAAK,SACD,GAAIzU,EAAe,CACf,GAAIzM,GAAWqB,oBAAkBuG,GAA6B8R,EAAd9R,CAC3CvG,qBAAkBrB,IAAaA,EAAQ6B,UAAU+I,SAASpL,IAC3DrB,KAAK86B,YAAY,aAIhB53B,oBAAkB0G,IAAkB0E,IAAkBpL,oBAAkBuG,KACpEvG,oBAAkBlD,KAAKmG,SAEpBA,EADAnG,KAAKqE,gBAAgBX,UAAU+I,SAASmkB,GAChC5wB,KAAKub,UAGLvb,KAAKwb,SAGrBxb,KAAKgF,YAAcyI,EACnBzN,KAAK4O,aAAa,OAAQR,EAAO3E,GAAeG,EAAezD,GAGvEsH,GAAEe,gBACF,MACJ,KAAK,cAEOusB,EAAW,GAAIj4B,MAAK9C,KAAKsG,YAAY8I,cAAe,EAAG,IACtDwqB,IAAmBmB,GAAYH,IAChCf,EAAM75B,KAAK25B,mBAAkB,EAAME,IAEvCl4B,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAAS,GAAI8C,MAAK9C,KAAKsG,YAAY8I,cAAe,EAAG,IAC5FpP,KAAKq6B,cAAcR,EAAKpsB,EAE5B,MACJ,KAAK,gBACIvK,oBAAkBwzB,GAGbxzB,oBAAkBs0B,GAUnBt0B,oBAAkB23B,IACnB76B,KAAKg7B,aAAan5B,QAAQ8M,QAVzBzL,oBAAkBlD,KAAK66B,eAKxB76B,KAAKg7B,aAAan5B,QAAQ8M,SAJ1B3O,KAAK66B,cAAclsB,QACnB3O,KAAK44B,qBALT54B,KAAKw3B,cAAc/gB,SAAS,GAAGqT,kBAAkBnb,QAgBrDlB,EAAEe,gBACF,MACJ,KAAK,eACItL,oBAAkBwzB,GASdxzB,oBAAkBs0B,IACnBx3B,KAAK02B,aAAajgB,SAAS,GAAGqT,kBAAkBnb,SATV,IAAtC3O,KAAKq2B,YAAYx0B,QAAQ2C,SACzBxE,KAAKq2B,YAAYx0B,QAAQ8M,QAGzB3O,KAAKg7B,aAAan5B,QAAQ8M,QAQlClB,EAAEe,gBACF,MACJ,KAAK,YACGxO,KAAKqE,gBAAgBX,UAAU+I,SAASmkB,GACxC5wB,KAAKi7B,mBAAmBxtB,EAAGzN,KAAKqE,iBAKpCoJ,EAAEe,gBACF,MACJ,KAAK,cACKtL,oBAAkB0G,IAAkB1G,oBAAkBuG,IAAkB6E,IACrEpL,oBAAkBlD,KAAKmG,SAEpBA,EADAnG,KAAKqE,gBAAgBX,UAAU+I,SAASmkB,GAChC5wB,KAAKub,UAGLvb,KAAKwb,SAGrBxb,KAAKgF,YAAcyI,EACnBzN,KAAK4O,aAAa,OAAQR,EAAOxE,GAAgBH,EAActD,IAEnEsH,EAAEe,gBACF,MACJ,KAAK,aAEG,GAAIusB,GAAW,GAAIj4B,MAAK9C,KAAKsG,YAAY8I,cAAe,GAAI,GACxDwqB,KAAmBmB,GAAYJ,IAC/Bd,EAAM75B,KAAK25B,mBAAkB,EAAOE,IAExCl4B,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAAS,GAAI8C,MAAK9C,KAAKsG,YAAY8I,cAAe,GAAI,KAC7FpP,KAAKq6B,cAAcR,EAAKpsB,EAE5B,MACJ,KAAK,SACDgC,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAKkP,UAAUO,GAAO,IACjBmqB,IAAmBnqB,IAASmrB,IAC7Bf,EAAM75B,KAAK25B,mBAAkB,EAAME,IAEvC75B,KAAKkP,UAAUlP,KAAKsG,aAAc,GAClC3E,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAASA,KAAKsG,aACrDtG,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,WACDgC,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAKkP,UAAUO,EAAM,GACjBmqB,IAAmBnqB,IAASkrB,IAC5Bd,EAAM75B,KAAK25B,mBAAkB,EAAOE,IAExC75B,KAAKkP,UAAUlP,KAAKsG,YAAa,GACjC3E,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAASA,KAAKsG,aACrDtG,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,cACDgC,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAKmP,SAASM,GAAO,IAChBmqB,IAAmBnqB,IAASmrB,IAC7Bf,EAAM75B,KAAK25B,mBAAkB,EAAME,IAEvC75B,KAAKmP,SAASnP,KAAKsG,aAAc,GACjC3E,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAASA,KAAKsG,aACrDtG,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,gBACDgC,EAAO,GAAI3M,OAAM9C,KAAKsG,aACtBtG,KAAKmP,SAASM,EAAM,GAChBmqB,IAAmBnqB,IAASkrB,IAC5Bd,EAAM75B,KAAK25B,mBAAkB,EAAOE,IAExC75B,KAAKmP,SAASnP,KAAKsG,YAAa,GAChC3E,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAM,QAASA,KAAKsG,aACrDtG,KAAKq6B,cAAcR,EAAKpsB,EACxB,MACJ,KAAK,WACIvK,oBAAkBlD,KAAK66B,iBACxB76B,KAAK66B,cAAcz2B,aAAa,WAAY,KAC5CpE,KAAK66B,cAAclsB,QACnB3O,KAAK44B,qBAELgB,GACAnsB,EAAEe,iBAEFxO,KAAKs6B,iBAAiBT,EAAKhJ,KAC3B7wB,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK+5B,oBAClC/5B,KAAKk6B,cAAczsB,EAAGmsB,EAAgBgB,EAAeD,EAAgBd,GAEzE,MACJ,KAAK,WACG75B,KAAKq2B,cAAgBr2B,KAAKq2B,YAAY7xB,UACtCxE,KAAKy2B,cAAchpB,EAEvB,MACJ,KAAK,MACGzN,KAAKs6B,iBAAiBT,EAAKjJ,KAC3B5wB,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAKg6B,qBAClCh6B,KAAKk6B,cAAczsB,EAAGmsB,EAAgBgB,EAAeD,EAAgBd,GAEzE,MACJ,SACI75B,KAAKk6B,cAAczsB,EAAGmsB,EAAgBgB,EAAeD,EAAgBd,GACrE75B,KAAKk7B,kBAEbl7B,KAAKm7B,gBAETtJ,EAAgB3xB,UAAUo6B,iBAAmB,SAAUT,EAAKuB,GACxD,GAAIxB,GAAiBC,EAAIn2B,UAAU+I,SAAS2uB,GACxCC,EAAcr7B,KAAKw3B,cAAc7tB,cAAc,aAC/C2xB,EAAat7B,KAAK02B,aAAa/sB,cAAc,aAC7C4xB,IAAeF,GAAcA,EAAY33B,UAAU+I,SAAS,WAC5D+uB,IAAcF,GAAaA,EAAW53B,UAAU+I,SAAS,WACzDgvB,IAAcJ,GAAcA,EAAY33B,UAAU+I,SAAS,UAC3DivB,IAAaJ,GAAaA,EAAW53B,UAAU+I,SAAS,UACxDkvB,IAAgBN,GAAcA,EAAY33B,UAAU+I,SAAS,YAC7DmvB,IAAeN,GAAaA,EAAW53B,UAAU+I,SAAS,WAC9D,OAAOmtB,KAAmB4B,GAAeE,GAAcE,KAClDL,GAAgBE,GAAeE,KAAmB37B,KAAKuzB,UAEhE1B,EAAgB3xB,UAAUm6B,cAAgB,SAAU7mB,EAAU/F,GAC1DzN,KAAK24B,uBAAuBnlB,GACxBA,EAAS9P,UAAU+I,SAASmkB,GAC5B5wB,KAAK+5B,mBAAqB,GAAIj3B,OAAM9C,KAAKsG,aAGzCtG,KAAKg6B,oBAAsB,GAAIl3B,OAAM9C,KAAKsG,aAE9CtG,KAAKi4B,iBACLj4B,KAAKk4B,oBACLl4B,KAAKu3B,aAAa/jB,IAClBxT,KAAKoyB,aAAepyB,KAAK05B,eAAe15B,KAAKsG,aAC7CmH,EAAEe,kBAENqjB,EAAgB3xB,UAAUumB,aAAe,SAAUhZ,GAC/C,OAAQA,EAAES,QACN,IAAK,eACIlO,KAAKw2B,gBAC0B,KAA5Bx2B,KAAKsP,aAAanJ,QAClBnG,KAAK8nB,QACL9nB,KAAK0pB,cAAcjc,GACnBzN,KAAKg2B,cAETh2B,KAAK2oB,KAAK,KAAMlb,GAChBzN,KAAKqyB,oBAAqB,EACrBryB,KAAKuzB,UACDrwB,oBAAkBlD,KAAK02B,eACxB12B,KAAK22B,gBAGb32B,KAAKmyB,YAAa,EAEtB,MACJ,KAAK,SACGnyB,KAAKw2B,eACLx2B,KAAKuP,KAAK9B,EAEd,MACJ,KAAK,QACGya,SAASyB,gBAAkB3pB,KAAKsP,eAChCtP,KAAK6mB,iBAAiBpZ,GACtBzN,KAAKuP,KAAK9B,GAEd,MACJ,KAAK,MACGya,SAASyB,gBAAkB3pB,KAAKsP,cAAgBtP,KAAKw2B,gBACrDx2B,KAAKuP,KAAK9B,GACVA,EAAEe,oBAKlBqjB,EAAgB3xB,UAAUy4B,uBAAyB,SAAUnlB,GAQzD,IAAK,GAPDqoB,GAOKrxB,EAAK,EAAGsxB,EALbD,EADAroB,EACUA,EAASvI,iBAAiB,kBAG1BjL,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,kBAEfT,EAAKsxB,EAAUn7B,OAAQ6J,IAAM,CAC/D,GAAIuxB,GAAOD,EAAUtxB,EACrBnB,gBAAa2uB,YAAY+D,GACNA,EAAKr4B,UAAU+I,SAASpL,IAAa06B,EAAKr4B,UAAU+I,SAAS4kB,IAC1D0K,EAAKr4B,UAAU+I,SAn6ChC,mBAo6CIzM,KAAKuzB,UACNlqB,eAAa1F,IAAIo4B,EAAM,YAAa/7B,KAAKg8B,eAAgBh8B,MAE7DqJ,eAAa1F,IAAIo4B,EAAM,YAAa/7B,KAAK86B,YAAa96B,SAIlE6xB,EAAgB3xB,UAAU04B,kBAAoB,WAG1C,IAAK,GAFDqD,IAAU/4B,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,UAEnEpoB,EAAK,EAAG0xB,EADCl8B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,gBAAwBkmB,GACnC3mB,EAAK0xB,EAAcv7B,OAAQ6J,IAAM,CAC3E,GAAIqvB,GAAMqC,EAAc1xB,GACpB8B,EAAQ,GAAIxJ,MACZq5B,EAAUn8B,KAAKgX,WAAW,KAAM6iB,IAChB,UAAf75B,KAAK4N,OAA4C,UAAvB5N,KAAK2N,iBAC9BksB,EAAIn2B,UAAU+I,SAv7CpB,YAu7CwCotB,EAAIn2B,UAAU+I,SAv7CtD,YAu7CyEwvB,IAClD,SAAfj8B,KAAK4N,OAA2C,SAAvB5N,KAAK2N,iBAC3B3N,KAAKo8B,YAAY9vB,EAAO6vB,KAAan8B,KAAKq8B,WAAW/vB,EAAO6vB,IAAaF,IAC7D,WAAfj8B,KAAK4N,OAA6C,WAAvB5N,KAAK2N,iBAC9B3N,KAAKq8B,WAAW/vB,EAAO6vB,IAAYF,MACzCpC,EAAIn2B,UAAUmG,OAAOsnB,GAChB0I,EAAIn2B,UAAU+I,SAASskB,IAAe8I,EAAIn2B,UAAU+I,SAASukB,IAC9D6I,EAAItgB,gBAAgB,iBAKpCsY,EAAgB3xB,UAAU87B,eAAiB,SAAU3gB,EAAOxZ,GACxD,GAAIy6B,GAAiBz6B,GAAWwZ,EAAMjI,cAClC9M,EAActG,KAAKgX,WAAW,KAAMslB,EACxC,KAAKp5B,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,aAAe3yB,KAAKwC,MAAQxC,KAAK2yB,aAAe3yB,KAAKyC,OAC5FzC,KAAK05B,eAAe15B,KAAK4yB,YAAc5yB,KAAK05B,eAAe15B,KAAK2yB,aAC/DzvB,oBAAkBlD,KAAK4yB,WAAa1vB,oBAAkBlD,KAAK2yB,cACzDzvB,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,WAElE,IAAK,GAAIpoB,GAAK,EAAG+xB,EADHv8B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,kBACfT,EAAK+xB,EAAU57B,OAAQ6J,IAAM,CAC/D,GAAIqvB,GAAM0C,EAAU/xB,GAChBgyB,GAAmB3C,EAAIn2B,UAAU+I,SAASpL,IAAaw4B,EAAIn2B,UAAU+I,SAAS4kB,EAClF,KAAKwI,EAAIn2B,UAAU+I,SA18CtB,kBA08C8C+vB,EAAgB,CACvD,GAAIL,GAAUn8B,KAAKgX,WAAW,KAAM6iB,GAChC4C,EAAiB,GAAI35B,OAAM9C,KAAK2yB,WACjB,IAAI7vB,OAAMq5B,GACZ34B,SAAS,EAAG,EAAG,EAAG,IAAMi5B,EAAej5B,SAAS,EAAG,EAAG,EAAG,KAAO24B,IAAY71B,EACzFY,YAAU2yB,GAAM5I,GAGhBhqB,eAAa4yB,IAAO5I,OAO5CY,EAAgB3xB,UAAUw8B,eAAiB,SAAUC,EAAUC,GAC3D,GAAIC,IAAS,CAiBb,OAhBmB,UAAf78B,KAAK4N,MACD,EAAWpK,SAAS,EAAG,EAAG,EAAG,KAAO,EAASA,SAAS,EAAG,EAAG,EAAG,KAC/Dq5B,GAAS,GAGO,SAAf78B,KAAK4N,MACL+uB,EAASvtB,gBAAkBwtB,EAAOxtB,eAClCutB,EAASzrB,aAAe0rB,EAAO1rB,aAChC2rB,GAAS,GAGO,WAAf78B,KAAK4N,OACN+uB,EAASvtB,gBAAkBwtB,EAAOxtB,gBAClCytB,GAAS,GAGVA,GAEXhL,EAAgB3xB,UAAUq3B,YAAc,SAAUuF,GAC9C,IAAK55B,oBAAkBlD,KAAK2yB,YACxB,IAAK,GAAInoB,GAAK,EAAGuyB,EAAsBD,EAAmBtyB,EAAKuyB,EAAoBp8B,OAAQ6J,IAGvF,IAAK,GAAIC,GAAK,EAAGuyB,EAFFD,EAAoBvyB,GACZS,iBAAiB,kBACFR,EAAKuyB,EAAUr8B,OAAQ8J,IAAM,CAC/D,GAAIovB,GAAMmD,EAAUvyB,EACpB,KAAKovB,EAAIn2B,UAAU+I,SAp/CtB,mBAo/C+CotB,EAAIn2B,UAAU+I,SAASpL,GAAW,CAC1E,GAAI86B,GAAUn8B,KAAKgX,WAAW,KAAM6iB,GAChCoD,EAAej9B,KAAKgX,WAAW,KAAM6iB,EAuBzC,IAtBK32B,oBAAkBlD,KAAK4yB,UAYxB3rB,eAAa4yB,IAAO5I,IAXhBjxB,KAAK2N,gBAAkB3N,KAAK4N,QAC3BqvB,EAAaz5B,SAAS,EAAG,EAAG,EAAG,KAAO,GAAIV,OAAM9C,KAAK2yB,YAAYnvB,SAAS,EAAG,EAAG,EAAG,KAChFy5B,EAAaz5B,SAAS,EAAG,EAAG,EAAG,KAAO,GAAIV,OAAM9C,KAAK4yB,UAAUpvB,SAAS,EAAG,EAAG,EAAG,KACpFxD,KAAK08B,eAAe,GAAI55B,OAAM9C,KAAK2yB,YAAa,GAAI7vB,OAAM9C,KAAK4yB,aAC/D,GAAI9vB,OAAM9C,KAAK2yB,YAAYnvB,SAAS,EAAG,EAAG,EAAG,KAAOxD,KAAKwC,MACtD,GAAIM,OAAM9C,KAAK4yB,UAAUpvB,SAAS,EAAG,EAAG,EAAG,KAAOxD,KAAKyC,MACtDzC,KAAK05B,eAAe15B,KAAK2yB,cAAe3yB,KAAK05B,eAAe15B,KAAK4yB,WACtE1rB,YAAU2yB,GAAM5I,GAMpB4I,EAAIn2B,UAAU+I,SArhD3B,eAqhDiDotB,EAAIn2B,UAAU+I,SAASukB,KACzDiM,IAAkBj9B,KAAK4yB,WACzB3rB,eAAa4yB,IAvhD1B,eAwhDa5yB,eAAa4yB,IAAO7I,KAEpB6I,EAAIn2B,UAAU+I,SAASwkB,KAAiBgM,GAAgBj9B,KAAK4yB,UAC7D3rB,eAAa4yB,IAAO5I,KAEnB4I,EAAIn2B,UAAU+I,SAjiD1B,iBAiiDgD,CACrC,GAAIgwB,GAAiB,GAAI35B,OAAM9C,KAAK2yB,YAChCuK,EAAiB,GAAIp6B,OAAMq5B,EAC3Bn8B,MAAK2N,gBAAkB3N,KAAK4N,QAC3BsvB,EAAe15B,SAAS,EAAG,EAAG,EAAG,KAAQi5B,EAAej5B,SAAS,EAAG,EAAG,EAAG,KACvE05B,EAAe15B,SAAS,EAAG,EAAG,EAAG,KAAOi5B,EAAej5B,SAAS,EAAG,EAAG,EAAG,KAC5ExD,KAAK2yB,aAAe3yB,KAAKwC,MACtBxC,KAAK8iB,aAAaC,UAAUrf,UAAU+I,SAAS,aAC9CzM,KAAK05B,eAAe15B,KAAK2yB,cAAe3yB,KAAK05B,eAAe15B,KAAK4yB,YACtE1rB,YAAU2yB,IAAO9I,EAtiDlC,eAuiDiB/wB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK2yB,YAAY,GAErD,IAAIyK,GAAe,GAAIt6B,OAAM9C,KAAK4yB,SACP,UAAvB5yB,KAAK2N,cACLuvB,EAAiB,GAAIp6B,MAAKo6B,EAAe9tB,cAAe8tB,EAAehsB,WAAa,EAAG,GAE3D,WAAvBlR,KAAK2N,gBACVuvB,EAAiB,GAAIp6B,MAAKo6B,EAAe9tB,cAAe,GAAI,KAE5DpP,KAAK2N,gBAAkB3N,KAAK4N,QAC3B1K,oBAAkBlD,KAAK4yB,YACvBsK,EAAe15B,SAAS,EAAG,EAAG,EAAG,KAAQ45B,EAAa55B,SAAS,EAAG,EAAG,EAAG,KACrE05B,EAAe15B,SAAS,EAAG,EAAG,EAAG,KAAO45B,EAAa55B,SAAS,EAAG,EAAG,EAAG,KAC1ExD,KAAK2yB,aAAe3yB,KAAKwC,MACtBxC,KAAK8iB,aAAaC,UAAUrf,UAAU+I,SAAS,aAC9CzM,KAAK05B,eAAe15B,KAAK2yB,cAAe3yB,KAAK05B,eAAe15B,KAAK4yB,YACtE1rB,YAAU2yB,IAAO7I,EAvjDlC,eAwjDiBhxB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK2yB,YAAY,KAEhDwJ,IAAan8B,KAAK2yB,YAAezvB,oBAAkBlD,KAAK4yB,YAAcuJ,IAAan8B,KAAK4yB,UACzF5yB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK4yB,UAAU,GAAO,OAQlFf,EAAgB3xB,UAAUg7B,gBAAkB,aAClCh4B,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,IAAQ1zB,oBAAkBlD,KAAK62B,UAAY72B,KAAK62B,QAAU,KACzG72B,KAAKuzB,SAKNvzB,KAAKk5B,iBAAiBl5B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,KAJhElxB,KAAKk5B,iBAAiBl5B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMinB,IAChE5wB,KAAKk5B,iBAAiBl5B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMknB,OAO5EgB,EAAgB3xB,UAAUm9B,UAAY,SAAU5vB,GAC5C,GAAI6vB,GACA5H,EACAna,EAAarY,oBAAkBlD,KAAK2yB,YAG/B,KAFL3yB,KAAK+C,UAAUqP,WAAWpS,KAAK2yB,YAC3BngB,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,QAEvDsJ,EAAWtY,oBAAkBlD,KAAK4yB,UAG7B,KAFL5yB,KAAK+C,UAAUqP,WAAWpS,KAAK4yB,UAC3BpgB,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OAqB3D,OAnBKhP,qBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAM7D2K,EAAa,GACb5H,EAAQ,IANR4H,EAAa/hB,EAAY,IAAMvb,KAAK8zB,UAAY,IAAMtY,EACtDka,EAAS3f,KAAKsL,MAAMtL,KAAKC,KAAKhW,KAAKu9B,wBAAwBv9B,KAAK2yB,YAAYvY,UACxEpa,KAAKu9B,wBAAwBv9B,KAAK4yB,UAAUxY,mBAAuC,IAOvFjU,MAAOnG,KAAKmG,MACZoV,UAAWvb,KAAK2yB,WAChBnX,QAASxb,KAAK4yB,SACd/F,QAAS6I,EACTra,MAAO5N,GAAK,KACZ5L,QAAS7B,KAAK6B,QACd0d,cAAerc,oBAAkBuK,GACjC3C,KAAMwyB,IAIdzL,EAAgB3xB,UAAUs9B,iBAAmB,SAAU3D,EAAK4D,EAAaC,GACrE,GAAIv3B,IAASnG,KAAKgX,WAAW,KAAM6iB,GAC/BjK,EAAe,mCAAmChS,QAAQ,MAAO,GAAKzX,GACtEw3B,EAAS39B,KAAKwnB,UAAYxnB,KAAKwnB,SAAS3lB,QAAQ8H,cAAcimB,EAC7D1sB,qBAAkBy6B,KACfF,GACAv2B,YAAUy2B,IAAU5M,EApnDrB,eAqnDC/wB,KAAKm9B,sBAAsBQ,EAAQ39B,KAAK2yB,YAAY,KAGpDzrB,YAAUy2B,IAAU3M,EAxnDrB,eAynDChxB,KAAKm9B,sBAAsBQ,EAAQ39B,KAAK4yB,UAAU,IAElD8K,GACA19B,KAAKm9B,sBAAsBtD,EAAK75B,KAAK4yB,UAAU,GAAO,KAIlEf,EAAgB3xB,UAAU46B,YAAc,SAAUzf,EAAOxZ,GACrD,GAAI60B,GACAc,CACAnc,IACAA,EAAM7M,gBAEV,IAAIiB,GAAOvM,oBAAkBmY,GAASrb,KAAKgX,WAAW,KAAMnV,GACtD7B,KAAKgX,WAAWqE,EAAO,MACzBuiB,EAAInuB,EAAKL,cACTyuB,EAAIpuB,EAAKyB,WACTlC,EAAW,GAAIlM,MAAK86B,EAAGC,EAAG,GAC1B5uB,EAAU,GAAInM,MAAK86B,EAAGC,EAAI,EAAG,GAC7BC,EAAa,GAAIh7B,MAAK86B,EAAG,EAAG,GAC5BG,EAAY,GAAIj7B,MAAK86B,EAAG,GAAI,GAC3B16B,qBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,YAKxD3yB,KAAKuzB,UAAYvzB,KAAKo4B,YAAYv2B,QAAQ6B,UAAU+I,SAASqkB,IAClE9wB,KAAKs2B,oBALAt2B,KAAKuzB,UAAYvzB,KAAKuzB,WAAavzB,KAAKs4B,UAAUz2B,QAAQ6B,UAAU+I,SAASqkB,KAC9E9wB,KAAKs2B,iBAMb,IAAIuD,GAAMh4B,GAAWwZ,EAAMjI,aAC3B,IAAIlQ,oBAAkBlD,KAAK2yB,YAClBzvB,oBAAkBlD,KAAKi2B,sBACxBxmB,EAAKjM,SAASxD,KAAKi2B,mBAAmB7kB,YACtC3B,EAAK4O,WAAWre,KAAKi2B,mBAAmB5kB,cACxC5B,EAAK5M,WAAW7C,KAAKi2B,mBAAmB3kB,eAE5CtR,KAAK2yB,WAA6B,UAAf3yB,KAAK4N,MAAqB,GAAI9K,MAAK9C,KAAKqG,WAAWoJ,IAClD,SAAfzP,KAAK4N,MAAoBoB,EAAW8uB,EACzC99B,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,WACLvhB,YAAU2yB,GAAM9I,GAChB/wB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK2yB,YAAY,GAC7CkH,EAAIn2B,UAAU+I,SAvqDb,kBAwqDDzM,KAAKw9B,iBAAiB3D,GAAK,GAE/B75B,KAAKk7B,kBACLl7B,KAAKq2B,YAAY7xB,UAAW,EAC5BxE,KAAKq2B,YAAYx0B,QAAQ2C,UAAW,EAChCxE,KAAKuzB,WACLvzB,KAAKs4B,UAAUz2B,QAAQ6B,UAAUC,IAAImtB,GACrC9wB,KAAKo4B,YAAYv2B,QAAQ6B,UAAUmG,OAAOinB,GAC1C9wB,KAAKs4B,UAAUz2B,QAAQ0X,gBAAgB,YACvCvZ,KAAKm5B,mBAETn5B,KAAKkb,QAAQ,SAAUlb,KAAKq9B,UAAUhiB,QAGtC,KAAK5L,IAAUzP,KAAK2yB,aAAeljB,GAAQzP,KAAK2yB,WAAY,CACxD,IAAKljB,IAAUzP,KAAK2yB,aAAezvB,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,EACjF,MAEJ52B,MAAK4yB,SAAW,KAChB5yB,KAAKyoB,YACDzoB,KAAKuzB,UAAY1xB,IACjB7B,KAAKg8B,eAAe3gB,EAAOxZ,GAE1BqB,oBAAkBlD,KAAKk2B,oBACxBzmB,EAAKjM,SAASxD,KAAKk2B,iBAAiB9kB,YACpC3B,EAAK4O,WAAWre,KAAKk2B,iBAAiB7kB,cACtC5B,EAAK5M,WAAW7C,KAAKk2B,iBAAiB5kB,eAE1CtR,KAAK4yB,SAA2B,UAAf5yB,KAAK4N,MAAqB,GAAI9K,MAAK9C,KAAKqG,WAAWoJ,IAChD,SAAfzP,KAAK4N,MAAoBqB,EAAU8uB,EACxC/9B,KAAKyoB,UACL,IAAIuV,GAASh+B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAM+lB,EAC1D,IAAIhxB,KAAKuzB,SAAU,CACfvzB,KAAKo4B,YAAYv2B,QAAQ6B,UAAUmG,OAAOinB,GAC1C9wB,KAAKs4B,UAAUz2B,QAAQ6B,UAAUC,IAAImtB,EACrC,KAAK,GAAItmB,GAAK,EAAGyzB,EAAWD,EAAQxzB,EAAKyzB,EAASt9B,OAAQ6J,IAAM,CAC5D,GAAI0zB,GAAQD,EAASzzB,EACrB0zB,GAAM3kB,gBAAgB,cACjB2kB,EAAMx6B,UAAU+I,SAASskB,IAK1B/wB,KAAKm9B,sBAAsBe,EAAOl+B,KAAK2yB,YAAY,GACnD1rB,eAAai3B,IAASlN,MALtBkN,EAAM95B,aAAa,gBAAiB,SACpC6C,eAAai3B,IAASlN,EA5sDnC,iBAotDC9pB,YAAU2yB,GAAM7I,IACXhxB,KAAK4yB,WAAc5yB,KAAK2yB,WACzB3yB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK4yB,UAAU,GAAO,GAGtD5yB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK4yB,UAAU,GAE/CiH,EAAIn2B,UAAU+I,SA/tDjB,oBAguDQzM,KAAK4yB,WAAc5yB,KAAK2yB,WACzB3yB,KAAKw9B,iBAAiB3D,GAAK,GAAO,GAGlC75B,KAAKw9B,iBAAiB3D,GAAK,GAInC,KAAK,GAAIpvB,GAAK,EAAG0zB,EADjBH,EAASh+B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAM+lB,GAClBvmB,EAAK0zB,EAASx9B,OAAQ8J,IAAM,CAC5D,GAAI2zB,GAAQD,EAAS1zB,EACjB2zB,GAAM16B,UAAU+I,SAASskB,IACzB9pB,eAAam3B,IAASnN,IAG9BjxB,KAAKq2B,YAAY7xB,UAAW,EAC5BxE,KAAKq2B,YAAYx0B,QAAQ2C,UAAW,EAC/BxE,KAAKuzB,UACNvzB,KAAKi5B,uBAEJ/1B,oBAAkBlD,KAAKgO,oBAAsBhO,KAAKgO,kBAAkByE,YACrEzS,KAAKy3B,qBAETz3B,KAAKkb,QAAQ,SAAUlb,KAAKq9B,UAAUhiB,SAEhC5L,GAAQzP,KAAK2yB,aACnB3yB,KAAKi5B,sBACLj5B,KAAK2yB,WAA6B,UAAf3yB,KAAK4N,MAAqB,GAAI9K,MAAK9C,KAAKqG,WAAWoJ,IAClD,SAAfzP,KAAK4N,MAAoBoB,EAAW8uB,EACzC99B,KAAKyoB,WACLzoB,KAAKq+B,2BACLp3B,cAAYjH,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAM8lB,IAAaA,EA1vDvE,eA2vDC7pB,YAAU2yB,GAAM9I,GAChB/wB,KAAKm9B,sBAAsBtD,EAAK75B,KAAK2yB,YAAY,GAC7CkH,EAAIn2B,UAAU+I,SAjwDjB,kBAkwDGzM,KAAKw9B,iBAAiB3D,GAAK,GAE/B75B,KAAKk7B,kBAGT7f,KACAqb,EAAenyB,UAAQ8W,EAAM/a,OAAQ,IAAMswB,IAE1C1tB,oBAAkBwzB,IAIfrb,IACAmc,EAAgBnc,GAAS9W,UAAQ8W,EAAM/a,OAAQ,IAAMuwB,IAEpD3tB,oBAAkBs0B,IACnBx3B,KAAKw3B,cAAc/gB,SAAS,GAAGqT,kBAAkBnb,SAPrD3O,KAAK02B,aAAajgB,SAAS,GAAGqT,kBAAkBnb,QAUpDzH,YAAU2yB,GAjxDH,cAkxDP75B,KAAKk4B,oBACLl4B,KAAK03B,eACL13B,KAAK44B,qBAET/G,EAAgB3xB,UAAUi5B,gBAAkB,WACxC,IAAKj2B,oBAAkBlD,KAAK2yB,YAAa,CACrC,GAAIkJ,GAAU77B,KAAKqE,gBAAgB4G,iBAAiB,kBAChDwyB,GAAc,CAClB,IAAIz9B,KAAK2N,gBAAkB3N,KAAK4N,MAAO,CACnC,IAAK,GAAIpD,GAAK,EAAG8zB,EAAYzC,EAASrxB,EAAK8zB,EAAU39B,OAAQ6J,IAAM,CAE/D,KADIqvB,EAAMyE,EAAU9zB,IACX9G,UAAU+I,SAASskB,KAAe8I,EAAIn2B,UAAU+I,SA7wD5D,mBA8wDYotB,EAAIn2B,UAAU+I,SAASpL,GAAW,CAEnC,IADcrB,KAAKgX,WAAW,KAAM6iB,IACpB75B,KAAK2yB,WAAY,CAC7BzrB,YAAU2yB,IAAOxI,EAAchwB,EAAUC,IACzC+H,eAAa2uB,YAAY6B,EACzB,UAGA,MAIZ,GAAIA,EAAIn2B,UAAU+I,SAASskB,KAAe8I,EAAIn2B,UAAU+I,SA9yD3D,iBA8yDiF,CAC1EgxB,GAAc,CACd,QAGJA,IACKz9B,KAAK+H,aAAarE,UAAU+I,SAASpL,IACtC6F,YAAUlH,KAAK+H,eAAgBupB,EAAcjwB,EAAUC,SAI9D,CACD,IAAK,GAAImJ,GAAK,EAAG8zB,EAAY1C,EAASpxB,EAAK8zB,EAAU59B,OAAQ8J,IAAM,CAC/D,GAAIovB,GAAM0E,EAAU9zB,GAChB+zB,EAAax+B,KAAK2yB,WAAWzhB,WAC7BoE,EAAYtV,KAAK2yB,WAAWvjB,cAC5BvN,EAAU7B,KAAKgX,WAAW,KAAM6iB,EACpC,IAAK75B,KAAKo4B,YAAYv2B,QAAQ6B,UAAU+I,SAASqkB,MAAoC,SAAvB9wB,KAAK2N,eAC9D9L,EAAQqP,WAAastB,GAAgB38B,EAAQuN,eAAiBkG,GACpC,WAAvBtV,KAAK2N,eAA+B9L,EAAQqP,YAAcstB,GACzD38B,EAAQuN,cAAgBkG,GAI7B,KAHApO,aAAU2yB,IAAOx4B,IAMrBw6B,EAAQ,GAAGn4B,UAAU+I,SAASpL,GAC9BrB,KAAKiZ,qBAAoB,GAEpB4iB,EAAQA,EAAQl7B,OAAS,GAAG+C,UAAU+I,SAASpL,IACpDrB,KAAKmZ,iBAAgB,MAKrC0Y,EAAgB3xB,UAAUg5B,iBAAmB,SAAU1lB,GACnD,IAAMtQ,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,WAC9D5yB,KAAKuzB,UAAYvzB,KAAKs4B,UAAUz2B,QAAQ6B,UAAU+I,SAASqkB,IAC5D,IAAM5tB,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,IAAQ1zB,oBAAkBlD,KAAK62B,UAAY72B,KAAK62B,QAAU,EAAI,CAClH,GAAI4H,GAAqBz+B,KAAKu9B,wBAAwBv9B,KAAK2yB,YACvDviB,EAAU,GAAItN,MAAK,GAAIA,OAAM27B,GAAoB9pB,QAAQ8pB,EAAmB1tB,WAAa/Q,KAAK42B,QAAU,KACxGvmB,EAAU,GAAIvN,MAAK,GAAIA,OAAM27B,GAAoB9pB,QAAQ8pB,EAAmB1tB,WAAa/Q,KAAK62B,QAAU,IAC5GzmB,IAAYlN,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,EAAKxmB,EAAU,KAC7EC,GAAYnN,oBAAkBlD,KAAK62B,UAAY72B,KAAK62B,QAAU,EAAKxmB,EAAU,KAClD,SAAvBrQ,KAAK2N,eACLyC,EAAUlN,oBAAkBkN,GAAW,KAAO,GAAItN,MAAKsN,EAAQhB,cAAegB,EAAQc,WAAY,GAClGb,EAAUnN,oBAAkBmN,GAAW,KAAO,GAAIvN,MAAKuN,EAAQjB,cAAeiB,EAAQa,WAAY,IAEtE,WAAvBlR,KAAK2N,gBACVyC,EAAUlN,oBAAkBkN,GAAW,KAAO,GAAItN,MAAKsN,EAAQhB,cAAgB,EAAG,GAAI,GACtFiB,EAAUnN,oBAAkBmN,GAAW,KAAO,GAAIvN,MAAKuN,EAAQjB,cAAe,EAAG,GAIrF,KAAK,GADDsvB,OAAS,GACJl0B,EAAK,EAAGm0B,EAFHnrB,EAASvI,iBAAiB,kBAEFT,EAAKm0B,EAAUh+B,OAAQ6J,IAAM,CAC/D,GAAIqvB,GAAM8E,EAAUn0B,EACpB,KAAKqvB,EAAIn2B,UAAU+I,SAASskB,KAAe8I,EAAIn2B,UAAU+I,SAn1D5D,iBAm1DkF,CAC3E,GAAI0vB,GAAUn8B,KAAKgX,WAAW,KAAM6iB,EAKpC,IAJAsC,EAAUn8B,KAAKu9B,wBAAwBpB,IAClCj5B,oBAAkBkN,KAAa+rB,IAAa/rB,GAAWypB,EAAIn2B,UAAU+I,SAASpL,IAC/E+O,EAAQuE,QAAQvE,EAAQW,UAAY,IAEnC8oB,EAAIn2B,UAAU+I,SAASpL,GAAW,CACnC,IAAK86B,IAAYsC,EACb,UAECv7B,oBAAkBkN,KAAa+rB,GAAW/rB,IAC3ClJ,YAAU2yB,IAAOxI,EAAchwB,EAAUC,IACzC+H,eAAa2uB,YAAY6B,KAExB32B,oBAAkBmN,KAAa8rB,GAAW9rB,IAC3CnJ,YAAU2yB,IAAOxI,EAAchwB,EAAUC,IACzCtB,KAAKsyB,kBAAmB,EACxBjpB,eAAa2uB,YAAY6B,GACrB32B,oBAAkBw7B,KAAY7E,EAAIn2B,UAAU+I,SAz3D/D,mBA03DmBiyB,EAAS7E,MAM7B,IAAK32B,oBAAkBw7B,GACnB,GAAI1+B,KAAKuzB,SACAvzB,KAAKsI,SAAS5E,UAAU+I,SAASpL,IAClC6F,YAAUlH,KAAKsI,WAAYgpB,EAAcjwB,EAAUC,QAGtD,CACD,GAAIs9B,GAAar6B,UAAQm6B,EAAQ,IAAM7N,IACvC+N,EAAa17B,oBAAkB07B,GAAc5+B,KAAK02B,aAAekI,GACjCl7B,UAAU+I,SAASmkB,IAO1C5wB,KAAK+3B,iBAAiBr0B,UAAU+I,SAASpL,IAC1C6F,YAAUlH,KAAK+3B,mBAAoBzG,EAAcjwB,EAAUC,IAE1DtB,KAAK63B,gBAAgBn0B,UAAU+I,SAASpL,IACzC6F,YAAUlH,KAAK63B,kBAAmBvG,EAAcjwB,EAAUC,IAEzDtB,KAAK83B,iBAAiBp0B,UAAU+I,SAASpL,IAC1C6F,YAAUlH,KAAK83B,mBAAoBxG,EAAcjwB,EAAUC,KAZ1DtB,KAAK+3B,iBAAiBr0B,UAAU+I,SAASpL,IAC1C6F,YAAUlH,KAAK+3B,mBAAoBzG,EAAcjwB,EAAUC,UAmB/EtB,MAAKsyB,kBAAmB,GAGhCT,EAAgB3xB,UAAUq9B,wBAA0B,SAAUp3B,GAE1D,MADgB,IAAIrD,MAAKqD,EAAMiJ,cAAejJ,EAAM+K,WAAY/K,EAAM4K,YAG1E8gB,EAAgB3xB,UAAU+4B,oBAAsB,WAE5C,IAAK,GAAIzuB,GAAK,EAAGq0B,EADH7+B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,kBAA+BomB,GAC9C7mB,EAAKq0B,EAAUl+B,OAAQ6J,IAAM,CAC/D,GAAIqvB,GAAMgF,EAAUr0B,EAChBqvB,GAAIn2B,UAAU+I,SAAS4kB,KACvBpqB,eAAa4yB,IAAOxI,EAAchwB,EAAUC,IAC5C+H,eAAa1F,IAAIk2B,EAAK,QAAS75B,KAAK86B,YAAa96B,MAC5CA,KAAKuzB,UACNlqB,eAAa1F,IAAIk2B,EAAK,YAAa75B,KAAKg8B,eAAgBh8B,OAIhEA,KAAKuzB,UACDvzB,KAAKsI,SAAS5E,UAAU+I,SAAS6kB,IACjCrqB,eAAajH,KAAKsI,WAAYgpB,EAAcjwB,EAAUC,IAEtDtB,KAAK+H,aAAarE,UAAU+I,SAAS6kB,IACrCrqB,eAAajH,KAAK+H,eAAgBupB,EAAcjwB,EAAUC,MAI1DtB,KAAK+3B,iBAAiBr0B,UAAU+I,SAAS6kB,IACzCrqB,eAAajH,KAAK+3B,mBAAoBzG,EAAcjwB,EAAUC,IAE9DtB,KAAK83B,iBAAiBp0B,UAAU+I,SAAS6kB,IACzCrqB,eAAajH,KAAK83B,mBAAoBxG,EAAcjwB,EAAUC,IAE9DtB,KAAK63B,gBAAgBn0B,UAAU+I,SAAS6kB,IACxCrqB,eAAajH,KAAK63B,kBAAmBvG,EAAcjwB,EAAUC,MAIzEuwB,EAAgB3xB,UAAUw3B,aAAe,WACrC,GAAIllB,IAAWvK,KAAM,OAAQiK,SAAU,QACvC,IAAKhP,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,YAU7D3yB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMynB,GAASplB,YAAchM,KAAKwkB,KAAKtY,YAAY,oBAVb,CAC1E,GAAIwpB,GAAS3f,KAAKsL,MAAMtL,KAAKC,KAAKhW,KAAKu9B,wBAAwBv9B,KAAK2yB,YAAYvY,UAC5Epa,KAAKu9B,wBAAwBv9B,KAAK4yB,UAAUxY,mBAAuC,CAClFlX,qBAAkBlD,KAAK8+B,kBACxBpJ,GAAgB11B,KAAK8+B,eACrB9+B,KAAK8+B,eAAiB,MAE1B9+B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMynB,GAASplB,YAAc0pB,EAAM3uB,WAAa,IAAM/G,KAAKwkB,KAAKtY,YAAY,QAK/GlM,KAAKuzB,UAeDrwB,oBAAkBlD,KAAK2yB,YAIxB3yB,KAAKo4B,YAAYv2B,QAAQmK,YAAchM,KAAKwkB,KAAKtY,YAAY,cAH7DlM,KAAKo4B,YAAYv2B,QAAQmK,YAAchM,KAAK+C,UAAUqP,WAAWpS,KAAK2yB,WAAYngB,GAKjFtP,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,YAI7D3yB,KAAKs4B,UAAUz2B,QAAQmK,YAAchM,KAAKwkB,KAAKtY,YAAY,YAH3DlM,KAAKs4B,UAAUz2B,QAAQmK,YAAchM,KAAK+C,UAAUqP,WAAWpS,KAAK4yB,SAAUpgB,KArB7EtP,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,YAI7D3yB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,gBAAgBqC,YAAchM,KAAKwkB,KAAKtY,YAAY,YAHxFlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,gBAAgBqC,YAAchM,KAAK+C,UAAUqP,WAAWpS,KAAK4yB,SAAUpgB,GAK1GtP,oBAAkBlD,KAAK2yB,YAIxB3yB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,kBAAkBqC,YAAchM,KAAKwkB,KAAKtY,YAAY,cAH1FlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,kBAAkBqC,YAAchM,KAAK+C,UAAUqP,WAAWpS,KAAK2yB,WAAYngB,KAoBlHxS,KAAK05B,eAAe15B,KAAK2yB,aAAe3yB,KAAK05B,eAAe15B,KAAK4yB,YAC/D1vB,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,MACzDU,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,MAC1DS,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAC5D5yB,KAAK2yB,YAAc3yB,KAAK4yB,YAC/B5yB,KAAKuzB,UAMNvzB,KAAKo4B,YAAYv2B,QAAQmK,YAAchM,KAAKwkB,KAAKtY,YAAY,cAC7DlM,KAAKs4B,UAAUz2B,QAAQmK,YAAchM,KAAKwkB,KAAKtY,YAAY,YAC3DlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMynB,GAASplB,YAAchM,KAAKwkB,KAAKtY,YAAY,kBAPvFlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMynB,GAASplB,YAAchM,KAAKwkB,KAAKtY,YAAY,gBACvFlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,kBAAkBqC,YAAchM,KAAKwkB,KAAKtY,YAAY,cAC1FlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,gBAAgBqC,YAAchM,KAAKwkB,KAAKtY,YAAY,cAQ5FlM,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,mBACpC3J,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,iBAAiBqC,YACR,KAAzChM,KAAKwkB,KAAKtY,YAAY,eAAwBlM,KAAKwkB,KAAKtY,YAAY,eAAiB,iBAGjG2lB,EAAgB3xB,UAAUo2B,gBAAkB,WACxCt2B,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,WACLzoB,KAAKq+B,2BACDr+B,KAAKwnB,WACDxnB,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,eAAgBtK,OAAS,GAChEsG,cAAYjH,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,gBAAkB8lB,EAAWC,EAxgEjF,eA0gEChxB,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAMkmB,GAAWxwB,OAAS,GACjEsG,cAAYjH,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAMkmB,GAAYA,GAErEnxB,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAMgmB,GAAYtwB,OAAS,GAClEsG,cAAYjH,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAMgmB,IAAcA,MAInFY,EAAgB3xB,UAAUi9B,sBAAwB,SAAUtD,EAAKpqB,EAAMguB,EAAaC,GAChF,GAAI7D,EAAK,CACL,GAAI9qB,GAAQ/O,KAAK+C,UAAUqP,WAAW3C,GAAQxH,KAAM,OAAQiK,SAAU,UACjEhP,oBAAkBw6B,IAAaA,EAChC7D,EAAIz1B,aAAa,aAAc,qCAA4C2K,GAG3E8qB,EAAIz1B,aAAa,aAAc,gBAAkBq5B,EAAc,QAAU,OAAS,YAAmB1uB,GAEzG8qB,EAAIz1B,aAAa,gBAAiB,UAG1CytB,EAAgB3xB,UAAUm+B,yBAA2B,WACjD,GAAIr+B,KAAKwnB,SAAU,CAEf,IAAK,GAAIhd,GAAK,EAAGu0B,EADL/+B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAM8lB,GACvBvmB,EAAKu0B,EAAQp+B,OAAQ6J,KAC/CqvB,EAAMkF,EAAQv0B,IACdpG,aAAa,gBAAiB,SAClCy1B,EAAItgB,gBAAgB,aAGxB,KAAK,GAAI9O,GAAK,EAAGu0B,EADPh/B,KAAKwnB,SAAS3lB,QAAQoJ,iBAAiB,IAAM+lB,GACzBvmB,EAAKu0B,EAAMr+B,OAAQ8J,IAAM,CACnD,GAAIovB,GAAMmF,EAAMv0B,EAChBovB,GAAIz1B,aAAa,gBAAiB,SAClCy1B,EAAItgB,gBAAgB,iBAIhCsY,EAAgB3xB,UAAU+5B,sBAAwB,SAAUzmB,GACpDA,EAAS9P,UAAU+I,SAASmkB,IAC5B5wB,KAAKqE,gBAAkBrE,KAAK02B,aAC5B12B,KAAKsG,YAActG,KAAK+5B,mBACxB/5B,KAAK+H,aAAe/H,KAAK43B,gBACzB53B,KAAKsI,SAAWtI,KAAK63B,kBAGrB73B,KAAKqE,gBAAkBrE,KAAKw3B,cAC5Bx3B,KAAKsG,YAActG,KAAKg6B,oBACxBh6B,KAAK+H,aAAe/H,KAAK83B,iBACzB93B,KAAKsI,SAAWtI,KAAK+3B,kBAEzB/3B,KAAK0I,eAAiB8K,EAAS7J,cAAc,cAC7C3J,KAAK0J,iBAAmBrE,SAAO,mBAA0BmO,GACzDxT,KAAK2I,MAAQ6K,EAAS7J,cAAc,cAAeqvB,qBAAqB,SAAS,GACjFh5B,KAAKuI,mBAAqBiL,EAAS7J,cAAc,sBACjD3J,KAAK4H,cAAgB4L,EAAS7J,cAAc,cAEhDkoB,EAAgB3xB,UAAUi0B,aAAe,SAAU1mB,GAC/CA,EAAEe,gBACF,IAAIqrB,GAAMt1B,UAAQkJ,EAAEnN,OAAQ,IAAMswB,EAClCiJ,GAAM32B,oBAAkB22B,GAAOt1B,UAAQkJ,EAAEnN,OAAQ,IAAMuwB,GAAiBgJ,EACxE75B,KAAKi6B,sBAAsBJ,GAC3B75B,KAAK8O,iBAAiBrB,IACjBvK,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,WAC9D5yB,KAAKk5B,iBAAiBW,GAE1B75B,KAAKi/B,cAAcpF,IAGvBhI,EAAgB3xB,UAAU44B,iBAAmB,SAAUe,GACnD75B,KAAKm4B,sBACLn4B,KAAKu3B,aAAav3B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,KACxDlxB,KAAKs4B,UAAUz2B,QAAQ6B,UAAU+I,SAASqkB,IAC1C9wB,KAAKk5B,iBAAiBl5B,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMunB,IAEhElxB,KAAKs4B,UAAUz2B,QAAQ6B,UAAU+I,SAASqkB,IAC1C9wB,KAAKm5B,kBAELn5B,KAAK2N,gBAAkB3N,KAAK4N,OAC5B5N,KAAK24B,yBAET34B,KAAK44B,qBAET/G,EAAgB3xB,UAAU++B,cAAgB,SAAUzrB,EAAU0rB,OACvC,KAAfA,IAAyBA,EAAa,MACtC1rB,EAAS9P,UAAU+I,SAASokB,GAC5B7wB,KAAKg6B,oBAAsB,GAAIl3B,QAAOo8B,GAA0Bl/B,KAAKsG,cAGrEtG,KAAK+5B,mBAAqB,GAAIj3B,OAAM9C,KAAKsG,aAE7CtG,KAAKk4B,qBACiB,UAAfl4B,KAAK4N,OACL5N,KAAK02B,aAAa/sB,cAAc,cAAcjG,UAAU+I,SAAS,YACjEzM,KAAKw3B,cAAc7tB,cAAc,cAAcjG,UAAU+I,SAAS,YACjD,SAAfzM,KAAK4N,OACH5N,KAAK02B,aAAa/sB,cAAc,cAAcjG,UAAU+I,SAAS,WACjEzM,KAAKw3B,cAAc7tB,cAAc,cAAcjG,UAAU+I,SAAS,WACrD,WAAfzM,KAAK4N,OACH5N,KAAK02B,aAAa/sB,cAAc,cAAcjG,UAAU+I,SAAS,aACjEzM,KAAKw3B,cAAc7tB,cAAc,cAAcjG,UAAU+I,SAAS,aACtEzM,KAAKuzB,WACRvzB,KAAK24B,yBAET34B,KAAK44B,oBACL54B,KAAKu3B,aAAa/jB,KAEtBqe,EAAgB3xB,UAAU+zB,aAAe,SAAU5Y,GAC/CA,EAAM7M,gBACN,IAAIqrB,GAAMt1B,UAAQ8W,EAAM/a,OAAQ,IAAMswB,EACtCiJ,GAAM32B,oBAAkB22B,GAAOt1B,UAAQ8W,EAAM/a,OAAQ,IAAMuwB,GAAiBgJ,EAC5E75B,KAAKi6B,sBAAsBJ,GAC3B75B,KAAK6O,aAAawM,IACbnY,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,WAC9D5yB,KAAKk5B,iBAAiBW,GAE1B75B,KAAKi/B,cAAcpF,IAEvBhI,EAAgB3xB,UAAUs2B,YAAc,WACpC,QAAKtzB,oBAAkBlD,KAAKwnB,YAAaxnB,KAAKwnB,SAAS3lB,QAAQ6B,UAAU+I,SAppErE,aAypERolB,EAAgB3xB,UAAUi/B,kBAAoB,WAC1C,GAAIC,GAAiBp/B,KAAKsE,cAAc,OAASuD,UAhpEjC,eAipEhB,IAAK7H,KAAKuzB,SAYL,CACD,GAAI8L,GAASr/B,KAAKsE,cAAc,UAAYuD,UAzpExC,cA0pEAy3B,EAAWt/B,KAAKsE,cAAc,UAAYuD,UA5pExC,eA6pEN7H,MAAKo4B,YAAc,GAAImH,WAAStU,QAASjrB,KAAKwkB,KAAKtY,YAAY,eAAiBozB,GAChFt/B,KAAKs4B,UAAY,GAAIiH,WAAStU,QAASjrB,KAAKwkB,KAAKtY,YAAY,aAAemzB,GAC5ED,EAAe52B,YAAY82B,GAC3BF,EAAe52B,YAAY62B,OAlBX,CAChB,GAAIpM,GAAajzB,KAAKsE,cAAc,KAAOuD,UA1oEtC,kBA2oEDqrB,EAAWlzB,KAAKsE,cAAc,KAAOuD,UA1oEtC,gBA2oEC23B,EAAax/B,KAAKsE,cAAc,QAAUuD,UAhnEzC,yBAinEL9D,cAAWkvB,GAAczrB,cAAe,OAAQC,YAAa,YAAaJ,aAAc,aAAcwB,KAAQ,WAC9G9E,aAAWmvB,GAAY1rB,cAAe,OAAQC,YAAa,YAAaJ,aAAc,WAAYwB,KAAQ,WAC1Gu2B,EAAe52B,YAAYyqB,GAC3BmM,EAAe52B,YAAYg3B,GAC3BJ,EAAe52B,YAAY0qB,GAC3BD,EAAWjnB,YAAchM,KAAKwkB,KAAKtY,YAAY,cAC/CgnB,EAASlnB,YAAchM,KAAKwkB,KAAKtY,YAAY,YAUjD,MAAOkzB,IAEXvN,EAAgB3xB,UAAUu/B,aAAe,WACjCz/B,KAAKslB,WACApiB,oBAAkBlD,KAAKi2B,qBAAwB/yB,oBAAkBlD,KAAKk2B,oBACvEl2B,KAAK2yB,WAAa3yB,KAAKi2B,mBACvBj2B,KAAK4yB,SAAW5yB,KAAKk2B,iBACrBl2B,KAAKyoB,WACLzoB,KAAKkjB,gBAITljB,KAAKkjB,cACLljB,KAAKg2B,aACLh2B,KAAKoD,eAAgBmY,UAAW,OAAQ,GACxCvb,KAAKoD,eAAgBoY,QAAS,OAAQ,GACtCxb,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,WACLzoB,KAAK4lB,cAET5lB,KAAKoD,eAAgBqB,SAAS,IAAS,GACvCme,QAAMuN,WAAWnwB,KAAKyE,QAASzE,KAAKsP,cACpCtP,KAAK0iB,cAETmP,EAAgB3xB,UAAUw/B,eAAiB,WAGvC,GAFA1/B,KAAKwC,IAAMU,oBAAkBlD,KAAKwC,QAAWxC,KAAKwC,IAAOxC,KAAKwC,IAAM,GAAIM,MAAK,KAAM,EAAG,GAAK9C,KAAKwC,IAChGxC,KAAKyC,IAAMS,oBAAkBlD,KAAKyC,QAAWzC,KAAKyC,IAAOzC,KAAKyC,IAAM,GAAIK,MAAK,KAAM,GAAI,IAAM9C,KAAKyC,MAC5FzC,KAAKwC,KAAOxC,KAAKyC,KAEnB,WADAzC,MAAKy/B,cAGJv8B,qBAAkBlD,KAAK42B,UAAa1zB,oBAAkBlD,KAAK62B,UACxD72B,KAAK62B,QAAU,GAAK72B,KAAK42B,QAAU,GAAM52B,KAAK42B,QAAU52B,KAAK62B,UAC7D72B,KAAK62B,QAAU,OAGlB3zB,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,IACnD52B,KAAK42B,QAAU,OAEd1zB,oBAAkBlD,KAAK62B,UAAY72B,KAAK62B,QAAU,IACnD72B,KAAK62B,QAAU,OAGvBhF,EAAgB3xB,UAAUy/B,oBAAsB,WACvCz8B,oBAAkBlD,KAAK2yB,eACnB3yB,KAAK2yB,aAAe3yB,KAAKwC,KAC1BxC,KAAK2yB,WAAa3yB,KAAKwC,IACvBxC,KAAKyoB,aAECzoB,KAAK2yB,aAAe3yB,KAAKwC,MAAQxC,KAAK2yB,aAAe3yB,KAAKyC,MAChEzC,KAAK2yB,WAAa3yB,KAAKyC,MAG1BS,oBAAkBlD,KAAK4yB,aACnB5yB,KAAK4yB,UAAY5yB,KAAKyC,KACvBzC,KAAK4yB,SAAW5yB,KAAKyC,IACrBzC,KAAKyoB,aAECzoB,KAAK4yB,UAAY5yB,KAAKwC,MAC5BxC,KAAK4yB,SAAW5yB,KAAKwC,IACrBxC,KAAKyoB,aAGbzoB,KAAK4/B,sBAET/N,EAAgB3xB,UAAU2/B,cAAgB,WACtC7/B,KAAK4/B,sBAET/N,EAAgB3xB,UAAU0/B,mBAAqB,WAC3C,IAAK18B,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,UAAW,CAC1E,GAAI8C,GAAS3f,KAAKsL,MAAMtL,KAAKC,KAAKhW,KAAKu9B,wBAAwBv9B,KAAK2yB,YAAYvY,UAC5Epa,KAAKu9B,wBAAwBv9B,KAAK4yB,UAAUxY,mBAAuC,CACvF,KAAMlX,oBAAkBlD,KAAK42B,UAAY52B,KAAK42B,QAAU,KAAQlB,GAAS11B,KAAK42B,SAC1E,GAAI52B,KAAKslB,WAAY,CACjB,GAAI7V,GAAO,GAAI3M,OAAM9C,KAAK2yB,WAC1BljB,GAAKkF,QAAQlF,EAAKsB,WAAa/Q,KAAK42B,QAAU,KACzCnnB,GAAQzP,KAAKyC,KACdzC,KAAK4yB,SAAW5yB,KAAKyC,IACrBzC,KAAKyoB,aAGLzoB,KAAK4yB,SAAWnjB,EAChBzP,KAAKyoB,gBAITzoB,MAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,UAGPvlB,qBAAkBlD,KAAK62B,YAAY72B,KAAK62B,QAAU,IAAQnB,GAAS11B,KAAK62B,UACtE72B,KAAKslB,YACLtlB,KAAK4yB,SAAW,GAAI9vB,OAAM9C,KAAK2yB,YAC/B3yB,KAAK4yB,SAASje,QAAQ3U,KAAK4yB,SAAS7hB,WAAa/Q,KAAK62B,QAAU,IAChE72B,KAAKyoB,aAGLzoB,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,eAKrBoJ,EAAgB3xB,UAAU4/B,eAAiB,WACvC9/B,KAAKqE,gBAAkBrE,KAAKsE,cAAc,OAC1CtE,KAAKqE,gBAAgBX,UAAUC,IAAIutB,GAC/BlxB,KAAK4D,WACL5D,KAAKqE,gBAAgBX,UAAUC,IA7uEjC,SA+uEFI,aAAW/D,KAAKqE,iBAAmBL,YAAa,aAChDrC,EAAOzB,UAAUwE,aAAa3C,KAAK/B,MACnC2B,EAAOzB,UAAUyE,cAAc5C,KAAK/B,OAExC6xB,EAAgB3xB,UAAUk8B,YAAc,SAAU1wB,EAAOnG,GACrD,MAAImG,GAAMwF,aAAe3L,EAAI2L,YAAcxF,EAAM0D,gBAAkB7J,EAAI6J,eAK3EyiB,EAAgB3xB,UAAUm8B,WAAa,SAAU3wB,EAAOnG,GACpD,MAAImG,GAAM0D,gBAAkB7J,EAAI6J,eAKpCyiB,EAAgB3xB,UAAU6/B,aAAe,SAAUr0B,EAAOnG,GACtD,GAAI+P,GAAY5J,EAAM0D,cAClB4wB,EAAUz6B,EAAI6J,aAClB,OAAKkG,GAAaA,EAAY,IAAU0qB,EAAWA,EAAU,IAKjEnO,EAAgB3xB,UAAU+/B,sBAAwB,WAC1CjgC,KAAKo8B,YAAYp8B,KAAKwC,IAAKxC,KAAKyC,OAASzC,KAAKsG,aAAetG,KAAKyC,KAAOzC,KAAKo8B,YAAYp8B,KAAKsG,YAAatG,KAAKyC,MACjHzC,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAKyC,KAClCzC,KAAKsG,YAAYqO,QAAQ,GACzB3U,KAAKsG,YAAYoO,SAAS1U,KAAKsG,YAAY4K,WAAa,IAEnDlR,KAAKsG,YAActG,KAAKwC,MAC7BxC,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAKwC,QAGzDqvB,EAAgB3xB,UAAUggC,gBAAkB,WACxC,GAAKh9B,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAAgB3yB,KAAKo8B,YAAYp8B,KAAK4yB,SAAU5yB,KAAKsG,cAC9GtG,KAAK05B,eAAe15B,KAAK4yB,WAAc5yB,KAAK05B,eAAe15B,KAAK2yB,YAMpE,MAFA3yB,MAAKsG,YAAYqO,QAAQ,OACzB3U,MAAKsG,YAAYoO,SAAS1U,KAAKsG,YAAY4K,WAAa,EAG5D,IAPIlR,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK4yB,WAOhC1vB,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,MAC5DU,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,MAC1DS,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAAe5yB,KAAK2yB,YAAc3yB,KAAK4yB,SAAW,CACtH5yB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDxD,KAAKsG,YAAYqO,QAAQ,EACzB,IAAIC,GAAQ5U,KAAKsG,YAAY4K,WAAa,CAC1ClR,MAAKsG,YAAYoO,SAASE,KAGlCid,EAAgB3xB,UAAUigC,eAAiB,WACvC,GAAKj9B,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAAgB3yB,KAAKq8B,WAAWr8B,KAAK4yB,SAAU5yB,KAAKsG,cAC7GtG,KAAK05B,eAAe15B,KAAK4yB,WAAc5yB,KAAK05B,eAAe15B,KAAK2yB,YAGnE,CACD3yB,KAAKsG,YAAYoO,SAAS,EAC1B,IAAIN,GAAKpU,KAAKsG,YAAY8I,cAAgB,CAE1C,YADApP,MAAKsG,YAAY0O,YAAYZ,GAL7BpU,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK4yB,YAQhC1vB,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,MACvDS,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAAe5yB,KAAK2yB,YAAc3yB,KAAK4yB,WACtG1vB,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,OACpExC,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDxD,KAAKsG,YAAYoO,SAAS,GAC1B1U,KAAKsG,YAAY0O,YAAYhV,KAAKsG,YAAY8I,cAAgB,KAGtEyiB,EAAgB3xB,UAAUkgC,iBAAmB,WACzC,GAAKl9B,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAAgB3yB,KAAK+/B,aAAa//B,KAAK4yB,SAAU5yB,KAAKsG,cAC/GtG,KAAK05B,eAAe15B,KAAK4yB,WAAc5yB,KAAK05B,eAAe15B,KAAK2yB,YAGnE,CACD,GAAI0N,GAAQrgC,KAAKsG,YAAY8I,cAAgB,EAE7C,YADApP,MAAKsG,YAAY0O,YAAYqrB,GAJ7BrgC,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK4yB,YAO/B1vB,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAAe5yB,KAAK2yB,YAAc3yB,KAAK4yB,WACnG1vB,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,MAC3DS,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,OACpExC,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDxD,KAAKsG,YAAY0O,YAAYhV,KAAKsG,YAAY8I,cAAgB,MAGtEyiB,EAAgB3xB,UAAUogC,iBAAmB,WACpCp9B,oBAAkBlD,KAAK2yB,aAexB3yB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDxD,KAAKigC,0BAfA/8B,oBAAkBlD,KAAKyC,MAAQzC,KAAKo8B,YAAYp8B,KAAK2yB,WAAY3yB,KAAKyC,MACvEzC,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAKyC,KAClCzC,KAAKsG,YAAYqO,QAAQ,GACzB3U,KAAKsG,YAAYoO,SAAS1U,KAAKsG,YAAY4K,WAAa,IAEjDlR,KAAK2yB,YAAc3yB,KAAKwC,KAAOxC,KAAK2yB,YAAc3yB,KAAKyC,MAC3DzC,KAAK05B,eAAe15B,KAAK2yB,YAI5B3yB,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK2yB,YAHlC3yB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,MAU3DN,oBAAkBlD,KAAK4yB,YAAc5yB,KAAK4yB,UAAY5yB,KAAKyC,MACxDS,oBAAkBlD,KAAK2yB,cAAgB3yB,KAAK2yB,YAAc3yB,KAAKwC,MAC9DU,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,YAAe5yB,KAAK2yB,YAAc3yB,KAAK4yB,YAC3G5yB,KAAKsG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAE7DxD,KAAKigC,yBAETpO,EAAgB3xB,UAAU0qB,eAAiB,WACvC,GAAI2V,GAAoBvgC,KAAKsE,cAAc,OAASuD,UA32EpC,wBA42EhB,IAAK7H,KAAKuzB,SAiDL,CACIrwB,oBAAkBlD,KAAK2yB,cACxB3yB,KAAKsG,YAAc,GAAIxD,OAAM9C,KAAK2yB,aAEtChxB,EAAOzB,UAAUgG,aAAanE,KAAK/B,MACnC2B,EAAOzB,UAAU8G,aAAajF,KAAK/B,MACnC2B,EAAOzB,UAAUoC,OAAOP,KAAK/B,KAC7B,IAAIwgC,GAAWxgC,KAAKqE,gBAAgBsF,cAAc,uBAC9CrB,EAAWtI,KAAKqE,gBAAgBsF,cAAc,sBAClDE,UAAO7J,KAAKqE,gBAAgBsF,cAAc,kCAC1C3J,KAAKqE,gBAAgBsF,cAAc,yBAAgCnB,YAAYF,GAC/EtI,KAAKqE,gBAAgBsF,cAAc,yBAAgCnB,YAAYg4B,GAC/EC,WAASD,GAAWxgC,KAAKqE,gBAAgBsF,cAAc,0BACvD3J,KAAK+4B,eAAiB/4B,KAAKqE,gBAC3Bk8B,EAAkB/3B,YAAYxI,KAAKqE,iBACnCrE,KAAKuI,mBAAqBvI,KAAKqE,gBAAgBsF,cAAc,sCAhE7C,CAChB3J,KAAKsgC,mBACLtgC,KAAK8/B,iBACL9/B,KAAK+5B,mBAAqB,GAAIj3B,OAAM9C,KAAKsG,aACzCtG,KAAKqE,gBAAgBX,UAAUC,IAAIitB,GACnC5wB,KAAK43B,gBAAkB53B,KAAKqE,gBAAgBsF,cAAc,4BAC1D3J,KAAK63B,gBAAkB73B,KAAKqE,gBAAgBsF,cAAc,4BAC1D3J,KAAK0gC,UAAY1gC,KAAKqE,gBAAgBsF,cAAc,6BACpDE,SAAO7J,KAAKqE,gBAAgBsF,cAAc,uCAC1C3J,KAAKqE,gBAAgBsF,cAAc,8BAAoCnB,YAAYxI,KAAK63B,iBACxF73B,KAAKqE,gBAAgBsF,cAAc,8BAAoCnB,YAAYxI,KAAK43B,iBACxF6I,WAASzgC,KAAK43B,iBAAkB53B,KAAKqE,gBAAgBsF,cAAc,+BACnE3J,KAAK02B,aAAe12B,KAAKqE,eACzB,IAAIs8B,GAAgB3gC,KAAKsE,cAAc,OAASuD,UA95ExC,qBA+5EJ+4B,EAAiB5gC,KAAKsE,cAAc,OAASuD,UA95ExC,qBA+5ET84B,GAAcn4B,YAAYxI,KAAK02B,cAC/B6J,EAAkB/3B,YAAYm4B,GACzB3gC,KAAKuzB,UACNlqB,eAAa1F,IAAI3D,KAAK0gC,UAAW,QAAS1gC,KAAK6gC,aAAc7gC,MAE9C,UAAfA,KAAK0L,OACL1L,KAAKkgC,kBAEU,SAAflgC,KAAK0L,OACL1L,KAAKmgC,iBAEU,WAAfngC,KAAK0L,OACL1L,KAAKogC,mBAETpgC,KAAK8/B,iBACL9/B,KAAKg6B,oBAAsB,GAAIl3B,OAAM9C,KAAKsG,aAC1CY,YAAUlH,KAAKqE,iBAAkBwsB,GACjC7wB,KAAKw3B,cAAgBx3B,KAAKqE,gBAC1B4C,eAAajH,KAAK02B,cAAgB12B,KAAK02B,aAAa/sB,cAAc,qBAAsB,YACxF1C,eAAajH,KAAKw3B,eAAiBx3B,KAAKw3B,cAAc7tB,cAAc,qBAAsB,YAC1F3J,KAAK83B,iBAAmB93B,KAAKqE,gBAAgBsF,cAAc,6BAC3D3J,KAAK+3B,iBAAmB/3B,KAAKqE,gBAAgBsF,cAAc,6BAC3D3J,KAAK8gC,WAAa9gC,KAAKqE,gBAAgBsF,cAAc,8BACrDE,SAAO7J,KAAKqE,gBAAgBsF,cAAc,wCAC1C3J,KAAKqE,gBAAgBsF,cAAc,SAASvF,aAAa,WAAY,KACrEpE,KAAKqE,gBAAgBsF,cAAc,+BAAqCnB,YAAYxI,KAAK+3B,kBACzF/3B,KAAKqE,gBAAgBsF,cAAc,+BAAqCnB,YAAYxI,KAAK83B,kBACzF2I,WAASzgC,KAAK83B,kBAAmB93B,KAAKqE,gBAAgBsF,cAAc,gCACpEi3B,EAAep4B,YAAYxI,KAAKw3B,eAChC+I,EAAkB/3B,YAAYo4B,GACzB5gC,KAAKuzB,UACNlqB,eAAa1F,IAAI3D,KAAK8gC,WAAY,QAAS9gC,KAAK+gC,cAAe/gC,MAoBvE,MAAOugC,IAEX1O,EAAgB3xB,UAAU2gC,aAAe,SAAUpzB,GAC3CzN,KAAKw2B,gBACLx2B,KAAKqE,gBAAkBrE,KAAK02B,aAC5B12B,KAAKi7B,mBAAmBxtB,EAAGzN,KAAKqE,mBAGxCwtB,EAAgB3xB,UAAU+6B,mBAAqB,SAAUxtB,EAAG5L,GACxD7B,KAAK2I,MAAQ9G,EAAQ8H,cAAc,SACnC3J,KAAKuI,mBAAqB1G,EAAQ8H,cAAc,YAChD3J,KAAK0J,iBAAmB7H,EAAQ8H,cAAc,SAC9C3J,KAAKoL,iBAAmBvJ,EAAQ8H,cAAc,SAC9C3J,KAAK0I,eAAiB7G,EAAQ8H,cAAc,cAC5C3J,KAAKi6B,sBAAsBp4B,GAC3BF,EAAOzB,UAAU4M,cAAc/K,KAAK/B,KAAMyN,GAC1CzN,KAAKi4B,kBAETpG,EAAgB3xB,UAAU6gC,cAAgB,SAAUtzB,GAC5CzN,KAAKw2B,gBACLx2B,KAAKqE,gBAAkBrE,KAAKw3B,cAC5Bx3B,KAAKi7B,mBAAmBxtB,EAAGzN,KAAKqE,mBAGxCwtB,EAAgB3xB,UAAU4W,kBAAoB,SAAUrJ,GAC/CzN,KAAKuzB,WACFhvB,UAAQkJ,EAAEnN,OAAQ,gCAClBN,KAAKqE,gBAAkBrE,KAAK02B,aAC5B12B,KAAKi6B,sBAAsBj6B,KAAK02B,gBAGhC12B,KAAKqE,gBAAkBrE,KAAKw3B,cAC5Bx3B,KAAKi6B,sBAAsBj6B,KAAKw3B,kBAY5C3F,EAAgB3xB,UAAUyN,YAAc,WACpC,MAAOhM,GAAOzB,UAAUyN,YAAY5L,KAAK/B,OAG7C6xB,EAAgB3xB,UAAU8gC,gBAAkB,SAAU5yB,GAClD,MAAa,SAATA,EACO,OAEO,WAATA,EACE,SAGA,SAGfyjB,EAAgB3xB,UAAUib,eAAiB,SAAU1N,GAEjD,GADAzN,KAAKkb,QAAQ,YAAalb,KAAKob,gBAC1BlY,oBAAkBlD,KAAKwnB,UAAW,CACnC,GACIpZ,GAAOpO,KAAKghC,gBAAgBhhC,KAAK2N,cACrC,IAAI3N,KAAKuzB,SACDnlB,IAASpO,KAAK4N,OACd5N,KAAK24B,yBACL34B,KAAK84B,mBACL94B,KAAK44B,oBACL54B,KAAKk7B,mBAGLl7B,KAAKm5B,sBAIT,IAAKn5B,KAAKuzB,UAAYnlB,IAASpO,KAAK4N,MAkDhC5N,KAAKi4B,iBACLj4B,KAAKk4B,wBAnDkC,CAEvC,IADUl4B,KAAKqE,gBAAgBX,UAAU+I,SAAS,mBAAqBzM,KAAK02B,aAAe12B,KAAKw3B,iBAChFx3B,KAAK02B,gBAAkBjpB,GAAMA,EAAE2F,cAAcqD,SAAS,GAAG/S,UAAU+I,SAAS,aACnFvJ,oBAAkBlD,KAAKgF,cAevByI,IAAMA,EAAE2F,cAAcqD,SAAS,GAAG/S,UAAU+I,SAAS,aACrDvJ,oBAAkBlD,KAAKgF,gBAC5BhF,KAAKg6B,oBAAsB,GAAIl3B,OAAM9C,KAAKsG,aAC1CtG,KAAKgC,OAAS,GACdhC,KAAKsG,YAActG,KAAKg6B,oBACxBh6B,KAAKi6B,sBAAsBj6B,KAAKw3B,eAChCx3B,KAAKi/B,cAAcj/B,KAAKw3B,eACxBx3B,KAAKi6B,sBAAsBj6B,KAAK02B,cAC5B12B,KAAK2yB,YAAczvB,oBAAkBlD,KAAK4yB,UAC7B,UAATxkB,GAAoBpO,KAAK2yB,WAAWzhB,WAAalR,KAAKg6B,oBAAoB9oB,YAC1ElR,KAAK2yB,WAAWvjB,eAAiBpP,KAAKg6B,oBAAoB5qB,cAC1DzN,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAM,GAAItL,OAAM9C,KAAK2yB,aAE9C,SAATvkB,GAAmBpO,KAAK2yB,WAAWvjB,cAAgBpP,KAAKg6B,oBAAoB5qB,cACjFzN,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAM,GAAItL,OAAM9C,KAAK2yB,aAG5DhxB,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMpO,KAAK+5B,oBAItDp4B,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMpO,KAAK+5B,oBAEtD/5B,KAAKi/B,cAAcj/B,KAAK02B,cACxB12B,KAAKi4B,iBACLj4B,KAAKk4B,oBACLl4B,KAAKu4B,qBACLv4B,KAAKgF,YAAc,UA1CyB,CAC5ChF,KAAK+5B,mBAAqB,GAAIj3B,OAAM9C,KAAKsG,aACzCtG,KAAKgC,OAAS,GACdhC,KAAKsG,YAActG,KAAK+5B,mBACxB/5B,KAAKi6B,sBAAsBj6B,KAAK02B,cAChC12B,KAAKi/B,cAAcj/B,KAAK02B,cACxB12B,KAAKi6B,sBAAsBj6B,KAAKw3B,eAChC71B,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMpO,KAAKg6B,oBAClD,IAAIkF,GAAal/B,KAAKg6B,oBAAsBh6B,KAAKg6B,oBAAsBh6B,KAAKsG,WAC5EtG,MAAKi/B,cAAcj/B,KAAKw3B,cAAe0H,GACvCl/B,KAAKi4B,iBACLj4B,KAAKk4B,oBACLl4B,KAAKu4B,qBACLv4B,KAAKgF,YAAc,KA+BvBhF,KAAKk7B,qBASrBrJ,EAAgB3xB,UAAUm3B,cAAgB,WACtC,GAAI4J,GAAmBjhC,KAAKsE,cAAc,OAASuD,UA/jFtC,2BAgkFTq5B,EAAkBlhC,KAAKsE,cAAc,OAASuD,UA/jFxC,kBAgkFV,IAAI7H,KAAKuzB,UAAYvzB,KAAKykB,eAAgB,CACtC,GAAI0c,GAAyBnhC,KAAKsE,cAAc,OAASuD,UAAW,2BAChEklB,EAAiB/sB,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7DwB,gBAAa1F,IAAIopB,EAAgB,uBAAwB/sB,KAAKohC,uBAAwBphC,KACtF,IAAIqhC,GAAmBrhC,KAAKsE,cAAc,QAAUuD,UAAW,WAC/DwB,gBAAa1F,IAAI09B,EAAkB,uBAAwBrhC,KAAKy2B,cAAez2B,MAC/EmhC,EAAuB34B,YAAYukB,GACnCoU,EAAuB34B,YAAY64B,GACnCH,EAAgB14B,YAAY24B,GAEhC,GAAI/B,GAAiBp/B,KAAKm/B,mBAC1B+B,GAAgB14B,YAAY42B,EAC5B,IAAIvS,GAAU7sB,KAAKsE,cAAc,OAASuD,UAAWupB,GACrDrtB,cAAW8oB,GAAWxlB,aAAc,kBACpCwlB,EAAQ7gB,YAAchM,KAAKwkB,KAAKtY,YAAY,gBAC5Cg1B,EAAgB14B,YAAYqkB,EAC5B,IAAIiH,GAAY9zB,KAAKsE,cAAc,OAASuD,UApkFpC,gBAqkFJ04B,EAAoBvgC,KAAK4qB,gBAC7BqW,GAAiBz4B,YAAY04B,GAC7BD,EAAiBz4B,YAAYsrB,GAC7BmN,EAAiBz4B,YAAY+3B,EAC7B,IAAIe,GAAgBthC,KAAKsE,cAAc,OAASuD,UAnlF3C,aAolFD05B,EAAYvhC,KAAKsE,cAAc,UAAYuD,UAAW25B,0BACtDC,EAAWzhC,KAAKsE,cAAc,SAClC4C,aAAUu6B,IA3kFN,UAWD,SADG,YAEJ,UAgkFFH,EAAc94B,YAAYi5B,GAC1BH,EAAc94B,YAAY+4B,EAC1B,IAAI9jB,IAAUva,oBAAkBlD,KAAK2yB,cAAgBzvB,oBAAkBlD,KAAK4yB,SAC5E5yB,MAAKg7B,aAAe,GAAIuE,WAAStU,QAASjrB,KAAKwkB,KAAKtY,YAAY,eAAiBq1B,GACjFvhC,KAAKq2B,YAAc,GAAIkJ,WAAStU,QAASjrB,KAAKwkB,KAAKtY,YAAY,aAAc1H,UAAWiZ,GAAUgkB,GAClGp4B,eAAa1F,IAAI89B,EAAU,QAASzhC,KAAKy2B,cAAez2B,MACxDqJ,eAAa1F,IAAI49B,EAAW,QAASvhC,KAAK0hC,eAAgB1hC,MAC1DA,KAAKwG,aAAagC,YAAYy4B,GACzBjhC,KAAKuzB,UACDgC,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,SAC7Ez1B,KAAKi3B,gBACLj3B,KAAKk3B,mBACLhwB,YAAU+5B,GAlmFR,kBAmmFF/5B,YAAUlH,KAAKwG,cAAe,oBAChBxG,KAAKwG,aAAamD,cAAc,cACtC9C,MAAM86B,OAAS3hC,KAAKwG,aAAamD,cAAc,2BAAsBi4B,wBAAwBD,OAAS,MAGtH3hC,KAAKwG,aAAagC,YAAY84B,GAC1BthC,KAAKuzB,UACLvzB,KAAK6hC,qBAET7hC,KAAKm3B,eAETtF,EAAgB3xB,UAAUkhC,uBAAyB,SAAU3zB,GACzDzN,KAAKuP,QAETsiB,EAAgB3xB,UAAUwhC,eAAiB,SAAU3qB,GAC7CmR,SAASyB,gBAAkB3pB,KAAKsP,eAChCtP,KAAKyyB,cAAe,EACpBzyB,KAAKsP,aAAaX,QAClBzH,YAAUlH,KAAK8iB,aAAaC,YAvoFvB,mBAyoFThM,EAAIvI,iBACAxO,KAAKmyB,aACLnyB,KAAKsP,aAAaX,QAClB3O,KAAKmyB,YAAa,GAEtBnyB,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKs2B,kBACLt2B,KAAKuP,KAAKwH,IAEd8a,EAAgB3xB,UAAU2hC,mBAAqB,WACvC3+B,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,WAC7D5yB,KAAKs4B,UAAUz2B,QAAQuC,aAAa,WAAY,IAChDpE,KAAKo4B,YAAYv2B,QAAQ6B,UAAUC,IAAImtB,IAEjC5tB,oBAAkBlD,KAAK2yB,aAC7B3yB,KAAKo4B,YAAYv2B,QAAQ6B,UAAUC,IAAImtB,IAG/Ce,EAAgB3xB,UAAUu2B,cAAgB,SAAU1f,GAChD,GAAI+qB,IAAiB,CACJ,gBAAb/qB,EAAI9O,MACJ8O,EAAIvI,iBAEJxO,KAAK+hC,gBAAkB/hC,KAAK+hC,eAAetU,SAC3CztB,KAAK2yB,WAAa3yB,KAAKwG,aAAamD,cAAc,kBAC9C3J,KAAKgX,WAAW,KAAMhX,KAAKwG,aAAamD,cAAc,kBAC1D3J,KAAK4yB,SAAW5yB,KAAKwG,aAAamD,cAAc,gBAC5C3J,KAAKgX,WAAW,KAAMhX,KAAKwG,aAAamD,cAAc,gBAC1D3J,KAAKyoB,YAELP,SAASyB,gBAAkB3pB,KAAKsP,eAChCtP,KAAKyyB,cAAe,EACpBzyB,KAAKsP,aAAaX,QAClBzH,YAAUlH,KAAK8iB,aAAaC,YA3qFvB,mBA6qFQ,eAAbhM,EAAI9O,MACJjI,KAAK+hC,iBAAmB/hC,KAAK+hC,eAAetU,QAC5C1W,EAAIvI,iBAEHtL,oBAAkBlD,KAAK2yB,aAAgBzvB,oBAAkBlD,KAAK4yB,UAsB/D5yB,KAAKuP,KAAKwH,GAAY,OArBhB/W,KAAKi2B,oBAAsBj2B,KAAKk2B,kBAClCl2B,KAAK2yB,WAAW5hB,YAAc/Q,KAAKi2B,mBAAmBllB,WACtD/Q,KAAK2yB,WAAWzhB,aAAelR,KAAKi2B,mBAAmB/kB,YACvDlR,KAAK2yB,WAAWvjB,gBAAkBpP,KAAKi2B,mBAAmB7mB,eACvDpP,KAAK4yB,SAAS7hB,YAAc/Q,KAAKk2B,iBAAiBnlB,WACrD/Q,KAAK4yB,SAAS1hB,aAAelR,KAAKk2B,iBAAiBhlB,YAChDlR,KAAK4yB,SAASxjB,gBAAkBpP,KAAKk2B,iBAAiB9mB,eACzDwT,QAAM6F,SAASzoB,KAAKq9B,UAAUtmB,GAAKjM,KAAM9K,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBAE1F9kB,KAAKi2B,mBAAqB,GAAInzB,OAAM9C,KAAK2yB,YACzC3yB,KAAKk2B,iBAAmB,GAAIpzB,OAAM9C,KAAK4yB,UACvC5yB,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,OACrCnG,KAAKw0B,gBAAmBx0B,KAAK2yB,aAAe3yB,KAAKy0B,cAAiBz0B,KAAK4yB,WACxEkP,GAAiB,GAErB9hC,KAAK0pB,cAAc3S,GACnB/W,KAAKuP,KAAKwH,GAAY,MACtB/W,KAAK4lB,aACLkc,GAAiB,GAKfv9B,UAAQwS,EAAIzW,OAAQ,mBACjBwhC,GACL9hC,KAAKiqB,WAEJjqB,KAAKuzB,WACNvzB,KAAKmyB,YAAa,EACdnyB,KAAKqyB,qBACLryB,KAAK8iB,aAAaC,UAAUtM,SAAS,GAAG9H,QACxC3O,KAAK+yB,gBAAkBhmB,SAAO/M,KAAK+yB,gBAAiB/yB,KAAKgN,YACzDhN,KAAKgiC,oBAAsB,GAAI90B,kBAAelN,KAAK8iB,aAAaC,UAAUtM,SAAS,IAC/EtJ,UAAW,UACXH,WAAYhN,KAAK+yB,gBACjB3lB,UAAWpN,KAAKiiC,qBAAqB30B,KAAKtN,WAK1D6xB,EAAgB3xB,UAAUgiC,aAAe,SAAU7mB,EAAO8mB,GACtD,GAAmB,eAAf9mB,EAAMpT,KAAV,CAGA,GAAI3H,GAAS6hC,GAAQ9mB,EAAM/a,OACvB8hC,EAAK79B,UAAQjE,EAAQ,IAAMixB,GAC3B8Q,EAAUD,GAAMA,EAAG1+B,UAAU+I,SAASqkB,EACtCsR,IAAMA,EAAG1+B,UAAU+I,SAAS8kB,IAC5BvxB,KAAKsiC,iBAAiBF,EAAI/mB,GAE9Brb,KAAKyyB,cAAe,EACpBzyB,KAAKsP,aAAaX,QACb3O,KAAKuzB,WACNvzB,KAAKyyB,cAAe,EAChB2P,GAAMA,EAAG1+B,UAAU+I,SAAS8kB,IAAwC,iBAA1B6Q,EAAGj+B,aAAa,MAC1DnE,KAAK02B,aAAajgB,SAAS,GAAGqT,kBAAkBnb,QAG3C0zB,GAA0B,YAAfhnB,EAAMpT,MAClBjI,KAAKsP,aAAaX,WAKlCkjB,EAAgB3xB,UAAUqiC,YAAc,SAAUlnB,GAC9C,GAAI+mB,GAAK79B,UAAQ8W,EAAM/a,OAAQ,IAAMixB,EACjC6Q,IAAMA,EAAG1+B,UAAU+I,SAAS8kB,KAAe6Q,EAAG1+B,UAAU+I,SAAS+kB,IACjEtqB,YAAUk7B,GAAK5Q,IAGvBK,EAAgB3xB,UAAUsiC,aAAe,SAAUnnB,GAC/C,GAAI8mB,GAAO59B,UAAQ8W,EAAM/a,OAAQ,IAAMkxB,EAClCtuB,qBAAkBi/B,IACnBl7B,eAAak7B,GAAO3Q,IAG5BK,EAAgB3xB,UAAUoiC,iBAAmB,SAAUF,EAAI/mB,GACvD,GAAI+mB,KAAQA,EAAG1+B,UAAU+I,SAASqkB,IAAY9wB,KAAKuzB,UAAY6O,EAAG1+B,UAAU+I,SAASqkB,IAAW,CAC5F,GAAI9wB,KAAKuzB,UAAY6O,EAAG1+B,UAAU+I,SAASqkB,GAAS,CAGhD,GAFA9wB,KAAK21B,YAAc/1B,MAAMM,UAAU8K,MAAMjJ,KAAK/B,KAAKiyB,eAAere,QAAQwuB,GAEtD,iBADLpiC,KAAKgyB,YAAYhyB,KAAK21B,aACxB3sB,GAET,WADAhJ,MAAKyiC,mBAGT,QAEJziC,KAAK0iC,sBACL1iC,KAAK21B,YAAc/1B,MAAMM,UAAU8K,MAAMjJ,KAAK/B,KAAKiyB,eAAere,QAAQwuB,GAC1El7B,YAAUk7B,GAAKtR,GACfsR,EAAGh+B,aAAa,gBAAiB,OACjC,IAAIyM,GAAS7Q,KAAKgyB,YAAYhyB,KAAK21B,YACjB,kBAAd9kB,EAAO7H,GACPhJ,KAAKyiC,oBAGLziC,KAAK2iC,iBAAiB9xB,EAAQwK,KAI1CwW,EAAgB3xB,UAAUwiC,oBAAsB,WAC5C,GAAIP,GAAOniC,KAAK66B,cAAclxB,cAAc,YACvCzG,qBAAkBi/B,KACnBl7B,eAAak7B,GAAOrR,GACpBqR,EAAK5oB,gBAAgB,mBAG7BsY,EAAgB3xB,UAAUuoB,SAAW,WACjCzoB,KAAK4iC,YAAc5iC,KAAK2yB,WAAY3yB,KAAK4yB,WAE7Cf,EAAgB3xB,UAAUyiC,iBAAmB,SAAU9xB,EAAQpD,GAC3DzN,KAAKuP,KAAK,MACVvP,KAAKgyB,YAAYhyB,KAAKgyB,YAAYrxB,OAAS,GAAG+K,MAAQ,KACtD1L,KAAKgyB,YAAYhyB,KAAKgyB,YAAYrxB,OAAS,GAAG4E,IAAM,KACpDvF,KAAK2yB,WAAa9hB,EAAOnF,MACzB1L,KAAK4yB,SAAW/hB,EAAOtL,IACvBvF,KAAKyoB,WACLzoB,KAAKu5B,iBACLv5B,KAAKkb,QAAQ,SAAUlb,KAAKq9B,UAAU5vB,IACtCzN,KAAK0pB,cAAcjc,GACnBzN,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAK8xB,eAAgB,EACrB9xB,KAAK02B,aAAe12B,KAAKw3B,cAAgB,KACrCx3B,KAAKmyB,aACLnyB,KAAKqyB,oBAAqB,EAC1BryB,KAAKsP,aAAaX,UAI1BkjB,EAAgB3xB,UAAU2iC,UAAY,SAAUhhC,EAASwZ,GACrDrb,KAAKm7B,eACe,MAAhBn7B,KAAK8G,OACL9G,KAAKwnB,SAASmB,KAAK,KAAM3oB,KAAK6B,SAG9B7B,KAAKwnB,SAASmB,KAAK,KAAM,MAEzB3oB,KAAKuzB,UACLvzB,KAAKwnB,SAASoG,mBAGtBiE,EAAgB3xB,UAAUuiC,kBAAoB,WAC1CziC,KAAK+xB,gBAAiB,EACtB/xB,KAAKwnB,SAASjY,OACdvP,KAAKwG,aAAexG,KAAKsE,cAAc,OAAS0E,GAAIhJ,KAAK6B,QAAQmH,GAAK,SAAUnB,UAAW1G,EAAO,aAClGnB,KAAKo3B,gBACLp3B,KAAK8iC,cAAcpV,SAASllB,YAAYxI,KAAKwG,cAC7CxG,KAAK6iC,YACL7iC,KAAK8xB,eAAgB,EAChB9xB,KAAKuzB,UACNvzB,KAAK22B,iBAGb9E,EAAgB3xB,UAAUg3B,iBAAmB,WACzC,IAAK,GAAI1sB,GAAK,EAAGC,EAAKzK,KAAKiyB,cAAeznB,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC5D,GAAI43B,GAAK33B,EAAGD,EACZtC,gBAAak6B,KAGrBvQ,EAAgB3xB,UAAU+2B,cAAgB,WACtC,IAAK1B,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,OAAQ,CACrFz1B,KAAK66B,cAAgB76B,KAAKsE,cAAc,OAASuD,UAn0F/C,YAm0FmEG,OAASL,SAAY,MAC1F,IAAIo7B,GAAUC,WAASC,WAAWjjC,KAAKsE,cAAetE,KAAKgyB,YAAa,MAAM,EAC9EjuB,cAAWg/B,GAAWl6B,KAAQ,UAAWq6B,cAAe,QAASl6B,GAAMhJ,KAAK6B,QAAQmH,GAAK,WAAYrB,SAAY,IAAKN,aAAc,2BACpIrH,KAAK66B,cAAcryB,YAAYu6B,GAC/B/iC,KAAKwG,aAAagC,YAAYxI,KAAK66B,cACnC,IAAIsI,GAAgBnjC,KAAK66B,cAAclxB,cAAc,gBAOrD,IANKzG,oBAAkBigC,KACnBA,EAAcn3B,YAAuD,KAAzChM,KAAKwkB,KAAKtY,YAAY,eAAwBlM,KAAKwkB,KAAKtY,YAAY,eAC1F,gBAEVlM,KAAKiyB,cAAgBjyB,KAAK66B,cAAc5vB,iBAAiB,IAAMsmB,GAC/DvxB,KAAKojC,iBACDpjC,KAAKuzB,SACL,GAAIvzB,KAAKykB,eAAgB,CACrB,GAAI4e,GAAe/+B,gBAAc,OAASuD,UAAW,2BACjDgjB,EAAc7qB,KAAKsE,cAAc,OAASuD,UAAW,mBACrDy7B,EAAiBtjC,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7Dy7B,GAAet3B,YAAc,eAC7B,IAAI+gB,GAAiB/sB,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7DwB,gBAAa1F,IAAIopB,EAAgB,uBAAwB/sB,KAAKohC,uBAAwBphC,KACtF,IAAIujC,GAAgBvjC,KAAK66B,aACzBhQ,GAAYriB,YAAYukB,GACxBlC,EAAYriB,YAAY86B,GACxBD,EAAa76B,YAAYqiB,GACzBwY,EAAa76B,YAAY+6B,GACzBvjC,KAAKwG,aAAa0mB,aAAamW,EAAcrjC,KAAKwG,aAAasjB,mBAC/D9pB,KAAK66B,cAAch0B,MAAMoe,MAAQ,WAGjCjlB,MAAK66B,cAAch0B,MAAMoe,MAAQjlB,KAAK8iB,aAAaC,UAAU6e,wBAAwB3c,MAAQ,MAGhG/hB,oBAAkBlD,KAAK21B,cAAgB31B,KAAK21B,aAAe,GAC5DzuB,YAAUlH,KAAKiyB,cAAcjyB,KAAK21B,cAAe7E,KAI7De,EAAgB3xB,UAAUkjC,eAAiB,WACvC/5B,eAAa1F,IAAI3D,KAAK66B,cAAe,QAAS76B,KAAKkiC,aAAcliC,MAC5DA,KAAKuzB,WACNlqB,eAAa1F,IAAI3D,KAAK66B,cAAe,YAAa76B,KAAKuiC,YAAaviC,MACpEqJ,eAAa1F,IAAI3D,KAAK66B,cAAe,WAAY76B,KAAKwiC,aAAcxiC,QAG5E6xB,EAAgB3xB,UAAUsjC,iBAAmB,WACpCtgC,oBAAkBlD,KAAK66B,iBACxBxxB,eAAaQ,OAAO7J,KAAK66B,cAAe,mBAAoB76B,KAAKkiC,cAC5DliC,KAAKuzB,WACNlqB,eAAaQ,OAAO7J,KAAK66B,cAAe,YAAa76B,KAAKuiC,aAC1Dl5B,eAAaQ,OAAO7J,KAAK66B,cAAe,WAAY76B,KAAKwiC,iBAIrE3Q,EAAgB3xB,UAAUi3B,YAAc,WACpC,GAAIr1B,GAAQ9B,IACZA,MAAKwG,aAAa9C,UAAUC,IAAI,YAChC,IAAI8/B,GAAazjC,KAAKwG,aAAao7B,wBAAwB3c,KACtD/hB,qBAAkBlD,KAAKmd,WAAsC,KAAzBnd,KAAKmd,SAASU,SACnD7d,KAAKwG,aAAaqB,WAAa,IAAM7H,KAAKmd,UAE1Cnd,KAAKuzB,UAAYvzB,KAAK+xB,iBACtB/xB,KAAK0G,MAAQ1G,KAAKsE,cAAc,OAChC4jB,SAAS4C,KAAKtiB,YAAYxI,KAAK0G,QAEnC1G,KAAKwnB,SAAW,GAAIwD,SAAMhrB,KAAKwG,cAC3B0kB,SAAUlrB,KAAKuzB,UAAYvzB,KAAK+xB,eAAiB7J,SAAS4C,KACpD5nB,oBAAkBlD,KAAKu2B,eAAsCv2B,KAAK8iB,aAAaC,UAAvC/iB,KAAKu2B,cACnDpL,SAAWnrB,KAAKuzB,SACVgC,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,QAAWz1B,KAAK+xB,gBAC3D3G,EAAG,SAAUC,EAAG,WAA7CD,EAAG,OAAQC,EAAG,UACpBrrB,KAAK4D,WAAcwnB,EAAG,OAAQC,EAAG,WAAeD,EAAG,QAASC,EAAG,UACnEqY,QAAS1jC,KAAKuzB,UAAYvzB,KAAK4D,UAAY,GAAK6/B,EAChDnY,QAt3FM,EAu3FNE,UAAWxrB,KAAKuzB,SACVgC,cAAYv1B,KAAKw1B,QAAQ,GAAG9pB,OAAS1L,KAAKw1B,QAAQ,GAAGjwB,KAAOvF,KAAKw1B,QAAQ,GAAGC,QAAWz1B,KAAK+xB,gBACzE3G,EAAG,MAAOC,EAAG,QAA5BD,EAAG,QAAsCA,EAAG,MAAOC,EAAG,QAChEE,WAAYvrB,KAAKuzB,UAAYvzB,KAAK+xB,eAAiB,YAAc,WACjEnuB,UAAW5D,KAAK4D,UAChBkD,OAAQ9G,KAAK8G,OACb2kB,KAAM,WACE3pB,EAAMyxB,UAAYzxB,EAAM2iB,iBACxB3iB,EAAM6hC,eAAiB7hC,EAAMuC,iBAAmBsnB,OAAOC,iBAAiB9pB,EAAMuC,gBAAgBsF,cAAc,8BAA8Bi6B,SACtI9hC,EAAM6hC,iBACN7hC,EAAM+hC,iBAAmB,GAAI9X,SAAMjqB,EAAMuC,gBAAgBsF,cAAc,uBACnEqiB,MAAOlqB,EAAMgiC,sBAAsBx2B,KAAKxL,KAE5CuH,eAAa1F,IAAI7B,EAAMuC,gBAAgBsF,cAAc,sBAAuB,aAAc7H,EAAMiiC,uBAAwBjiC,KAGhIiC,aAAWjC,EAAMwN,cAAgB4U,gBAAiB,OAAQ4L,YAAahuB,EAAMD,QAAQmH,GAAI+mB,gBAAiBjuB,EAAMwN,aAAatG,KACzHlH,EAAMqE,MACNpC,aAAWjC,EAAMwN,cAAgBxG,wBAAyBhH,EAAMwN,aAAatG,KAG7ElH,EAAMwN,aAAaiK,gBAAgB,yBAEvCrS,YAAUpF,EAAMghB,aAAaE,QAAQ,IAAK8N,GACrChvB,EAAMyxB,WACHzxB,EAAMk5B,eACNl5B,EAAMkiC,kBAAoB,GAAI92B,kBAAepL,EAAMk5B,aAAan5B,SAC5DsL,UAAW,UACXC,UAAWtL,EAAMmgC,qBAAqB30B,KAAKxL,GAC3CkL,YAAciiB,IAAK,MAAOjpB,cAAe,iBAAkBC,aAAc,mBAE7EnE,EAAMkiC,kBAAoB,GAAI92B,kBAAepL,EAAMu0B,YAAYx0B,SAC3DsL,UAAW,UACXC,UAAWtL,EAAMmgC,qBAAqB30B,KAAKxL,GAC3CkL,YAAchH,cAAe,iBAAkBC,aAAc,oBAGhE/C,oBAAkBpB,EAAM40B,eACpB50B,EAAMuwB,oBACPvwB,EAAM60B,gBAGTzzB,oBAAkBpB,EAAM+4B,iBACzB/4B,EAAMixB,gBAAkBhmB,SAAOjL,EAAMixB,gBAAiBjxB,EAAMkL,YAC5DlL,EAAMmiC,qBAAuB,GAAI/2B,kBAAepL,EAAM+4B,eAClD1tB,UAAW,UACXC,UAAWtL,EAAMoiC,uBAAuB52B,KAAKxL,GAC7CkL,WAAYlL,EAAMixB,kBAEtBjxB,EAAMmiC,qBAAuB,GAAI/2B,kBAAepL,EAAM+4B,eAClD1tB,UAAW,UACXC,UAAWtL,EAAMmgC,qBAAqB30B,KAAKxL,GAC3CkL,YAAchH,cAAe,iBAAkBC,aAAc,mBAE7D/C,oBAAkBpB,EAAM40B,eACxB50B,EAAM0wB,aAAc,EACpB1wB,EAAM+4B,cAAclsB,SAGpB7M,EAAM+4B,cAAcz2B,aAAa,WAAY,OAGrDtC,EAAMqiC,wBAENriC,EAAMyxB,WAAa1vB,UAAQC,UAC3BuF,eAAa1F,IAAIukB,SAAU,UAAWpmB,EAAMsiC,kBAAmBtiC,IAGvEqqB,MAAO,WACHpoB,aAAWjC,EAAMwN,cAAgB4U,gBAAiB,UAClDpiB,EAAMwN,aAAaiK,gBAAgB,aACnCzX,EAAMwN,aAAaiK,gBAAgB,iBACnCzX,EAAMwN,aAAaiK,gBAAgB,yBACnCtS,eAAanF,EAAMghB,aAAaE,QAAQ,IAAK8N,GACzChvB,EAAMuwB,oBACNvwB,EAAMghB,aAAaC,UAAUtM,SAAS,GAAG9H,QAExC4mB,cAAYzzB,EAAM0zB,QAAQ,GAAG9pB,OAAS5J,EAAM0zB,QAAQ,GAAGjwB,KAAOzD,EAAM0zB,QAAQ,GAAGC,QAChF3zB,EAAM0hC,mBAELtgC,oBAAkBpB,EAAM0lB,YACpBtkB,oBAAkBpB,EAAM0lB,SAAS3lB,QAAQmoB,gBAC1C9e,SAAOpJ,EAAM0lB,SAAS3lB,SAE1BC,EAAM0lB,SAASlO,UACfxX,EAAM0lB,SAAW,MAEjB1lB,EAAMyxB,WAAa1vB,UAAQC,UAC3BuF,eAAaQ,OAAOqe,SAAU,UAAWpmB,EAAMsiC,oBAEpD9X,mBAAoB,WACnB,GAAI+X,GAAWviC,EAAM0lB,UAAY1lB,EAAM0lB,SAAS3lB,SAC3CgC,UAAQC,UAAYugC,GAAYA,EAASzC,wBAAwBD,OAAShW,OAAO2Y,aAClFxiC,EAAMyN,UAIdvP,KAAKuzB,WACLvzB,KAAKwnB,SAAS3lB,QAAQ6B,UAAUC,IAh+F/B,YAi+FI3D,KAAKuzB,UACNvzB,KAAKwnB,SAAS3lB,QAAQ6B,UAAUC,IAAI,aAGxC3D,KAAKuzB,UAAYvzB,KAAK+xB,iBACtB7qB,YAAUlH,KAAK0G,QAt+Fd,WAs+F+BvF,EAAM,kBACtC+mB,SAAS4C,KAAKjjB,WAAa,oBAC3B7H,KAAK0G,MAAMG,MAAMkkB,QAAU,SAE/B1hB,eAAa1F,IAAIukB,SAAU,uBAAwBloB,KAAK+pB,gBAAiB/pB,OAE7E6xB,EAAgB3xB,UAAU4jC,sBAAwB,SAAUr2B,GACxD,GAAI8e,GAAY,CAChB,IAA4B,SAAxBvsB,KAAK2jC,eACL,OAAQl2B,EAAE+e,gBACN,IAAK,OACDD,EAAY,CACZ,MACJ,KAAK,QACDA,GAAa,MAOrB,QAAQ9e,EAAE+e,gBACN,IAAK,KACDD,EAAY,CACZ,MACJ,KAAK,OACDA,GAAa,EAMrBvsB,KAAKukC,kBACa,IAAdhY,EACAvsB,KAAK6O,aAAapB,IAEE,IAAf8e,GACLvsB,KAAK8O,iBAAiBrB,GAE1BzN,KAAKukC,iBAAkB,IAG/B1S,EAAgB3xB,UAAU6jC,uBAAyB,SAAUt2B,GACzDzN,KAAKukC,iBAAkB,GAE3B1S,EAAgB3xB,UAAUkkC,kBAAoB,SAAU32B,GACpD,OAAQA,EAAE+2B,SACN,IAAK,IACDxkC,KAAKuP,KAAK9B,KAItBokB,EAAgB3xB,UAAUy2B,cAAgB,WACtC,GAAIpb,GAAYvb,KAAKwnB,UAAYxnB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,IAAMonB,EAC3E,IAAIxV,EAAW,CACX,GAAIse,GAAMt1B,UAAQgX,EAAW,IAAMsV,EACnCgJ,GAAM32B,oBAAkB22B,GAAO75B,KAAK02B,aAAemD,EAC/C75B,KAAKqyB,mBACLryB,KAAK8iB,aAAaC,UAAUpU,SAG5B3O,KAAKwyB,aAAc,EACnBqH,EAAIpjB,SAAS,GAAGqT,kBAAkBnb,SAEtCzH,YAAUqU,GAAY4V,OAGlBnxB,MAAKqyB,mBACLryB,KAAK8iB,aAAaC,UAAUpU,SAG5B3O,KAAKwyB,aAAc,EACnBxyB,KAAK02B,aAAajgB,SAAS,GAAGqT,kBAAkBnb,UAI5DkjB,EAAgB3xB,UAAUi7B,aAAe,WACrC,GAAI3F,GAAUx1B,KAAKwnB,UAAYxnB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,cAC/D86B,EAAiBzkC,KAAKwnB,UAAYxnB,KAAKwnB,SAAS3lB,QAAQ8H,cAAc,0BACrEzG,qBAAkBsyB,IAAatyB,oBAAkBuhC,KAClDjP,EAAQ3uB,MAAM86B,OAAS8C,EAAe7C,wBAAwBD,OAAS,OAG/E9P,EAAgB3xB,UAAUgkC,uBAAyB,SAAUz2B,GACzD,OAAQA,EAAES,QACN,IAAK,WACDlO,KAAK0kC,aAAaj3B,GAClBzN,KAAK2kC,oBACLl3B,EAAEe,gBACF,MACJ,KAAK,SACDxO,KAAK4kC,WAAWn3B,GAChBzN,KAAK2kC,oBACLl3B,EAAEe,gBACF,MACJ,KAAK,QAEG,GAAIq2B,GAAU7kC,KAAK8kC,aACfC,EAAU/kC,KAAKglC,aACnB,KAAK9hC,oBAAkBlD,KAAK02B,gBAAkBxzB,oBAAkB6hC,KACxD7hC,oBAAkB2hC,KAAc3hC,oBAAkB6hC,IAAYA,IAAYF,KAC1E7kC,KAAK21B,YAAc/1B,MAAMM,UAAU8K,MAAMjJ,KAAK/B,KAAKiyB,eAAere,QAAQmxB,GAExD,iBADL/kC,KAAKgyB,YAAYhyB,KAAK21B,aACxB3sB,IAIP,MAHAhJ,MAAK22B,gBACLoO,EAAQrhC,UAAUmG,OAAO2nB,OACzB/jB,GAAEe,gBAKTtL,qBAAkB2hC,IAAa3hC,oBAAkB6hC,IAClD/kC,KAAKkiC,aAAaz0B,EAAGo3B,GAAWE,GAEpCt3B,EAAEe,gBAEN,MACJ,KAAK,MACD,GAAIxO,KAAK02B,aAAc,CACnB,GAAIyL,GAAOniC,KAAK8kC,YACX5hC,qBAAkBi/B,IACnBA,EAAKz+B,UAAUmG,OAAO2nB,OAI1BxxB,MAAKuP,KAAK9B,GACVA,EAAEe,mBAMlBqjB,EAAgB3xB,UAAUwkC,aAAe,SAAUj3B,GAC/C,GAAIo3B,GAAU7kC,KAAK8kC,aACfC,EAAU/kC,KAAKglC,aACnB,IAAK9hC,oBAAkB2hC,GAOlB,GAAK3hC,oBAAkB6hC,GAOxB79B,YAAUlH,KAAKiyB,cAAc,IAAKT,OAPA,CAC9B4Q,EAAK2C,EAAQE,oBACZ/hC,oBAAkBk/B,IAAOA,EAAG1+B,UAAU+I,SAAS8kB,IAChDrqB,YAAUk7B,GAAK5Q,OAVU,CAC7B,GAAI4Q,GAAKyC,EAAQI,oBACZ/hC,oBAAkBk/B,IAAOA,EAAG1+B,UAAU+I,SAAS8kB,KAChDtqB,eAAa49B,GAAUrT,GACvBtqB,YAAUk7B,GAAK5Q,MAc3BK,EAAgB3xB,UAAU0kC,WAAa,SAAUn3B,GAC7C,GAAIo3B,GAAU7kC,KAAK8kC,aACfC,EAAU/kC,KAAKglC,aACnB,IAAK9hC,oBAAkB2hC,IAOlB,IAAK3hC,oBAAkB6hC,GAAU,CAC9B3C,EAAK2C,EAAQG,wBACZhiC,oBAAkBk/B,IAAOA,EAAG1+B,UAAU+I,SAAS8kB,IAChDrqB,YAAUk7B,GAAK5Q,QAVU,CAC7B,GAAI4Q,GAAKyC,EAAQK,wBACZhiC,oBAAkBk/B,IAAOA,EAAG1+B,UAAU+I,SAAS8kB,KAChDtqB,eAAa49B,GAAUrT,GACvBtqB,YAAUk7B,GAAK5Q,MAU3BK,EAAgB3xB,UAAU4kC,WAAa,WAEnC,MADW9kC,MAAK66B,cAAclxB,cAAc,IAAM6nB,IAGtDK,EAAgB3xB,UAAU8kC,YAAc,WAEpC,MADWhlC,MAAK66B,cAAclxB,cAAc,cAGhDkoB,EAAgB3xB,UAAUikC,qBAAuB,WAC7CnkC,KAAKgiC,oBAAsB,GAAI90B,kBAAelN,KAAKwG,cAC/C2G,UAAW,UACXC,UAAWpN,KAAKiiC,qBAAqB30B,KAAKtN,MAC1CgN,YAAc8hB,OAAQ,YAE1B9uB,KAAK+yB,gBAAkBhmB,SAAO/M,KAAK+yB,gBAAiB/yB,KAAKgN,YACzDhN,KAAKgiC,oBAAsB,GAAI90B,kBAAelN,KAAK8iB,aAAaC,UAAUtM,SAAS,IAC/EtJ,UAAW,UACXC,UAAWpN,KAAKiiC,qBAAqB30B,KAAKtN,MAC1CgN,WAAYhN,KAAK+yB,mBAGzBlB,EAAgB3xB,UAAUykC,kBAAoB,WAC1C,GAAIQ,GAAanlC,KAAK66B,cAAc+G,wBAAwBD,OACxDyD,EAAQplC,KAAK66B,cAAclxB,cAAc,IAAM6nB,GAC/C6T,EAASrlC,KAAK66B,cAAclxB,cAAc,aAC1C9H,EAAWqB,oBAAkBkiC,GAAiBC,EAARD,CAC1C,KAAKliC,oBAAkBrB,GAAU,CAC7B,GAAIyjC,GAAUzjC,EAAQojC,mBAClBtD,EAAS2D,EAAUA,EAAQC,UAAY1jC,EAAQ0jC,UAC/CC,EAAW3jC,EAAQ+/B,wBAAwBD,MAC1CA,GAAS9/B,EAAQ0jC,UAAaJ,EAC/BnlC,KAAK66B,cAAc4K,UAAYH,EAAW3D,GAAUwD,EAAa,EAAIK,EAAW,GAAM7D,EAGtF3hC,KAAK66B,cAAc4K,UAAY,IAI3C5T,EAAgB3xB,UAAU+hC,qBAAuB,SAAUx0B,GACvD,GAAIotB,GAAgBt2B,UAAQkJ,EAAEnN,OAAQ,aACtC,QAAQmN,EAAES,QACN,IAAK,SACGlO,KAAKw2B,eACDx2B,KAAKmyB,aACLnyB,KAAKsP,aAAaX,QAClB3O,KAAKmyB,YAAa,GAEtBnyB,KAAKuP,KAAK9B,IAGVzN,KAAK8iB,aAAaC,UAAUtM,SAAS,GAAGiS,MAE5C,MACJ,KAAK,QACI1oB,KAAKw2B,cAINx2B,KAAK8iB,aAAaC,UAAUtM,SAAS,GAAG9H,QAHxC3O,KAAK2oB,KAAK,KAAMlb,EAKpB,MACJ,KAAK,MACDzN,KAAKuP,KAAK9B,EACV,MACJ,KAAK,gBACIvK,oBAAkB23B,GAIf3S,SAASyB,gBAAkB3pB,KAAKg7B,aAAan5B,UAAiD,IAAtC7B,KAAKq2B,YAAYx0B,QAAQ2C,SACjFxE,KAAKq2B,YAAYx0B,QAAQ8M,QAGzB3O,KAAK02B,aAAajgB,SAAS,GAAGqT,kBAAkBnb,QAPpD3O,KAAKg7B,aAAan5B,QAAQ8M,QAU9BlB,EAAEe,gBACF,MACJ,KAAK,eACItL,oBAAkB23B,GAIf3S,SAASyB,gBAAkB3pB,KAAKq2B,YAAYx0B,UAAiD,IAAtC7B,KAAKq2B,YAAYx0B,QAAQ2C,SAChFxE,KAAKg7B,aAAan5B,QAAQ8M,QAGrBzL,oBAAkBlD,KAAK66B,gBAAmB3S,SAASyB,gBAAkB3pB,KAAKg7B,aAAan5B,QAIxF7B,KAAKw3B,cAAc/gB,SAAS,GAAGqT,kBAAkBnb,QAHjD3O,KAAK66B,cAAclsB,QAR3B3O,KAAKw3B,cAAc/gB,SAAS,GAAGqT,kBAAkBnb,QAerDlB,EAAEe,mBAIdqjB,EAAgB3xB,UAAU6pB,gBAAkB,SAAUtc,GAClD,IAAIvK,oBAAkBlD,KAAKwnB,UAA3B,CAGA,GAAIlnB,GAASmN,EAAEnN,MACVN,MAAK8iB,aAAaC,UAAUtW,SAASnM,KACpC4C,oBAAkBlD,KAAKwnB,WAAcjjB,UAAQjE,EAAQ,QAAUN,KAAKwG,aAAawC,GAAK,OAAoB,cAAXyE,EAAExF,OACpF,eAAXwF,EAAExF,OAAsC,cAAXwF,EAAExF,MAC/BjI,KAAK+hC,iBAAmB/hC,KAAK+hC,eAAetU,SAC5ChgB,EAAEe,kBAGLtL,oBAAkBlD,KAAKu2B,iBACtBrzB,oBAAkBlD,KAAKu2B,gBAAoBj2B,IAAWN,KAAKu2B,gBAC3DhyB,UAAQjE,EAAQ,QAAUN,KAAKwG,aAAawC,GAAK,OAC9CzE,UAAQjE,EAAQ,oBAA0BN,KAAK8iB,aAAaC,WAC5Dxe,UAAQjE,EAAQ,gCAAmCA,EAAOoD,UAAU+I,SAAS,UAAgBnM,EAAOoD,UAAU+I,SAAS,mBAC5HzM,KAAKwyB,aAAc,EACfxyB,KAAKw2B,eAAiBtO,SAAS4C,KAAKre,SAASzM,KAAKwnB,SAAS3lB,WAC3D7B,KAAKy2B,cAAchpB,GACdzN,KAAKuzB,WACNvzB,KAAKqyB,oBAAqB,OAK1CR,EAAgB3xB,UAAUyjB,YAAc,WAChC3jB,KAAKykB,gBAAkBzkB,KAAKuzB,WAC5BvzB,KAAKmd,UAAY,kBAErB,IAAIuoB,GAAuB1lC,KAAKmd,QAC3Bja,qBAAkBlD,KAAKmd,WAA+B,KAAlBnd,KAAKmd,WAC1CuoB,EAAwB1lC,KAAKmd,SAASS,QAAQ,OAAQ,KAAMC,QAEhE7d,KAAK8iB,aAAeF,QAAMe,aACtBhB,eAAgB3iB,KAAK2iB,eACrB9gB,QAAS7B,KAAKsP,aACduV,YACIxB,SAAUrjB,KAAKqjB,SACfQ,YAAa7jB,KAAK6jB,YAClB1G,SAAUuoB,EACVjhC,QAASzE,KAAKyE,QACdb,UAAW5D,KAAK4D,UAChBkhB,gBAAiB9kB,KAAK8kB,iBAE1B9B,SA70GQ,4CA80GThjB,KAAKsE,eACRP,aAAW/D,KAAKsP,cACZ3H,SAAY,IAAKuc,gBAAiB,QAASrb,KAAQ,WACnDsb,aAAgB,MAAO/c,gBAAkBpH,KAAKyE,QAAmB,QAAT,OACxD2f,YAAe,MAAOC,eAAkB,MAAOC,WAAc,UAEjE1B,QAAMsC,eAAgB7d,aAAc,SAAUwB,KAAQ,UAAY7I,KAAK8iB,aAAaE,QAAQ,IAI5FhjB,KAAK2lC,YAAY3lC,KAAKilB,OACtB/d,YAAUlH,KAAK8iB,aAAaC,WA31Gb,wBA41GX7f,oBAAkBlD,KAAKsP,aAAanL,aAAa,UACjDJ,aAAW/D,KAAKsP,cAAgBmI,KAAQzX,KAAK6B,QAAQmH,KAE1B,WAA3BhJ,KAAKsP,aAAarH,OAClBjI,KAAK8iB,aAAaC,UAAUlc,MAAMkkB,QAAU,QAEhD/qB,KAAKu5B,iBACLv5B,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAKsP,aAAalL,aAAa,QAASpE,KAAKsP,aAAanJ,OAC1DnG,KAAKm2B,UAAYn2B,KAAKub,UACtBvb,KAAKo2B,QAAUp2B,KAAKwb,SAExBqW,EAAgB3xB,UAAUylC,YAAc,SAAU1gB,GAE1CjlB,KAAK8iB,aAAaC,UAAUlc,MAAMoe,MADjB,gBAAVA,GACoCjlB,KAAW,MAEhC,gBAAVilB,GAC8BmI,aAAWptB,KAAKilB,OAGhB,QAGlD4M,EAAgB3xB,UAAU62B,sBAAwB,WACjB,SAAzB/2B,KAAKkK,iBACLhD,YAAUlH,KAAKwG,cAzzGP,8BA4zGhBqrB,EAAgB3xB,UAAUq5B,eAAiB,WACvCv5B,KAAK0/B,iBACD1/B,KAAKslB,YACLtlB,KAAK2/B,qBAET,IAAIltB,GAAazS,KAAKqlB,eAClBrlB,MAAKslB,gBACLtlB,KAAK2yB,WAAa3yB,KAAKi2B,mBACvBj2B,KAAKoD,eAAgBmY,UAAWvb,KAAK2yB,aAAc,GACnD3yB,KAAK4yB,SAAW5yB,KAAKk2B,iBACrBl2B,KAAKoD,eAAgBoY,QAASxb,KAAK4yB,WAAY,GAC/C5yB,KAAKyoB,YAETzoB,KAAKkjB,cACAljB,KAAKslB,YACNtlB,KAAK6/B,iBAEJ7/B,KAAKslB,eACNtlB,KAAKg2B,aAEJ9yB,oBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,aAC5DlgB,GAAevP,oBAAkBlD,KAAKgO,qBAAsBhO,KAAKgO,kBAAkByE,YACpFzS,KAAKy3B,qBAETz3B,KAAK4lB,aACL5lB,KAAKi2B,mBAAqB/yB,oBAAkBlD,KAAK2yB,aAAexc,OAAOnW,KAAK2yB,YAAc,KAAO,GAAI7vB,OAAM9C,KAAK2yB,YAChH3yB,KAAKk2B,iBAAmBhzB,oBAAkBlD,KAAK4yB,WAAazc,OAAOnW,KAAK4yB,UAAY,KAAO,GAAI9vB,OAAM9C,KAAK4yB,WAE9Gf,EAAgB3xB,UAAUgjB,YAAc,WACpC,IAAKhgB,oBAAkBlD,KAAK4yB,YAAc1vB,oBAAkBlD,KAAK2yB,YAAa,CAC1E,GAAIiT,IAAiBpzB,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OACpEqJ,EAAYvb,KAAK+C,UAAUqP,WAAWpS,KAAK2yB,WAAYiT,GACvDpqB,EAAUxb,KAAK+C,UAAUqP,WAAWpS,KAAK4yB,SAAUgT,EACvDhjB,SAAM6F,SAASlN,EAAY,IAAMvb,KAAK8zB,UAAY,IAAMtY,EAASxb,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBAC9G9kB,KAAKi2B,mBAAqB,GAAInzB,OAAM9C,KAAK2yB,YACzC3yB,KAAKk2B,iBAAmB,GAAIpzB,OAAM9C,KAAK4yB,WAEtC5yB,KAAKslB,YAAcpiB,oBAAkBlD,KAAKmG,QAAUnG,KAAKgiB,oBAC1DY,QAAM6F,SAASzoB,KAAKgiB,mBAAoBhiB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,kBAG7F+M,EAAgB3xB,UAAU0zB,kBAAoB,SAAUztB,GACpD,IAAKjD,oBAAkBiD,GAAQ,CAC3B,GAAIkgB,IAAU,EACVwf,MAAe,GACfC,MAAa,GACbC,EAAc,KACdC,EAAY,KACZ5f,EAAc,KACd6f,GAAc,EACdC,GAAY,EACZC,GAAgB,CACpB,IAAuB,mBAAU,CAC7B,GAAIzQ,GAAQvvB,EAAMgI,MAAM,IAAMnO,KAAK8zB,UAAY,IAC1B,KAAjB4B,EAAM/0B,QACNolC,EAAcrQ,EAAM,GACpBsQ,EAAYtQ,EAAM,KAGlBrP,GAAU,EACVD,EAAcjgB,OAIdA,GAAMxF,OAAS,GACfklC,EAAe1/B,EAAM,GACrB2/B,EAAa3/B,EAAM,KAGnB0/B,EAAe1/B,EAAMuF,MACrBo6B,EAAa3/B,EAAMZ,KAEjBsgC,YAAwB/iC,OAAmC,mBAGxD+iC,YAAwB/iC,MAC7BmjC,GAAc,EAER/iC,oBAAkB2iC,KACxBM,GAAgB,GANhBJ,EAAc/lC,KAAKomC,eAAeP,GAQhCC,YAAsBhjC,OAAiC,mBAGpDgjC,YAAsBhjC,MAC3BojC,GAAY,EAENhjC,oBAAkB4iC,KACxBK,GAAgB,GANhBH,EAAYhmC,KAAKomC,eAAeN,IASnC5iC,oBAAkB6iC,KAAiBE,IAAgB/iC,oBAAkB8iC,KACpE9iC,oBAAkB6iC,KAAiBG,GAAahjC,oBAAkB8iC,MACpE3f,GAAU,GAEV8f,IACAJ,EAAcC,EAAY5f,EAAc,KACxCC,GAAU,GAEV0f,IACA1f,EAAUA,GAAWrmB,KAAKujB,kBAAkBwiB,IAE5CC,IACA3f,EAAUA,GAAWrmB,KAAKujB,kBAAkByiB,IAE5C3f,IACI4f,IAAgBE,IAChBJ,EAAcF,EAAaQ,sBAE3BH,IAAcC,IACdH,EAAYF,EAAWO,sBAEtBnjC,oBAAkB6iC,IAAiB7iC,oBAAkB8iC,GAGhD9iC,oBAAkB6iC,GAGlB7iC,oBAAkB8iC,KACxB5f,EAAc4f,GAHd5f,EAAc2f,EAHd3f,EAAc2f,EAAc,IAAM/lC,KAAK8zB,UAAY,IAAMkS,EAQ7DhmC,KAAKgiB,mBAAqBoE,EAC1BpmB,KAAKoD,eAAgB+C,MAAO,OAAQ,GACpCnG,KAAKoD,eAAgBuvB,WAAY,OAAQ,GACzC3yB,KAAKoD,eAAgBwvB,SAAU,OAAQ,GACvC5yB,KAAKub,UAAY,KACjBvb,KAAKwb,QAAU,QAI3BqW,EAAgB3xB,UAAUkmC,eAAiB,SAAUjgC,GACjD,GAAImgC,GAAc,IAOlB,OANKpjC,qBAAkBiD,IAA4B,gBAAVA,GAG/BjD,oBAAkBiD,IAA4B,gBAAVA,KAC1CmgC,EAAc,GAAKngC,GAHnBmgC,EAAc,EAAQv/B,WAKnBu/B,GAEXzU,EAAgB3xB,UAAUqjB,kBAAoB,SAAUpd,GACpD,GAAIigB,GAAcjgB,EACdkgB,GAAU,EACVkgB,EAAY,IAEhB,IADAA,GAAc/zB,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OACtC,gBAAhBkU,GACPC,GAAU,MAET,CACD,GAAItjB,GAAY,GAAIC,wBAAqBhD,KAAKiD,OAC9C,KAAKjD,KAAKoG,eAAerD,EAAUoP,UAAUiU,EAAamgB,IAAa,CACnE,GACIC,GAAe,IAInBA,GAAe,+IAFH,kJAGIjgB,KAAKH,KAAiBogB,EAAajgB,KAAKH,IACjD,mBAAqBG,KAAKH,IAAgBjQ,OAAO,GAAIrT,MAAK9C,KAAKqG,WAAW+f,QAC7EC,GAAU,IAItB,MAAOA,IAEXwL,EAAgB3xB,UAAUw5B,eAAiB,SAAUjqB,GACjD,GAAIvM,oBAAkBuM,GAClB,OAAO,CAEX,IAAItJ,GAAQ,GAAIrD,OAAM2M,EACtB,KAAKtJ,GAASnG,KAAKwC,MAAQ2D,GAASnG,KAAKyC,IACrC,OAAO,CAEXzC,MAAKymC,uBACDh3B,KAAMtJ,EACNsM,YAAY,EAEhB,IAAIjJ,GAAOxJ,KAAKymC,qBAEhB,OADAzmC,MAAK0mC,uBAAuBl9B,KACxBA,EAAKiJ,YAKbof,EAAgB3xB,UAAUu3B,mBAAqB,WAC3Cz3B,KAAKuyB,gBACLvyB,KAAK8+B,eAAiB,IAGtB,KAFA,GAAI3uB,GAAY,GAAIrN,OAAM9C,KAAK2yB,YAC3Btc,EAAQ,GACJlG,IAAcnQ,KAAK4yB,WAAa5yB,KAAK4yB,WAAa5yB,KAAKyC,KAAK,CAChEzC,KAAKymC,uBACDh3B,KAAMU,EACNsC,YAAY,EAEhB,IAAIjJ,GAAOxJ,KAAKymC,qBAChBzmC,MAAK0mC,uBAAuBl9B,GACxBA,EAAKiJ,aACLzS,KAAKuyB,aAAa3nB,KAAK,GAAI9H,OAAM0G,EAAKiG,QACjCU,GAAanQ,KAAK2yB,aAAexiB,GAAanQ,KAAK4yB,UACpDvc,KAGRrW,KAAK2P,OAAOQ,EAAW,EAAG,KAAMnQ,KAAKyC,IAAKzC,KAAKwC,KAEnDxC,KAAK8+B,eAAiBzoB,GAE1Bwb,EAAgB3xB,UAAUwmC,uBAAyB,SAAUl9B,GACzDuD,SAAO/M,KAAKymC,uBAAyBhvB,KAAM,kBAC3CzX,KAAKkb,QAAQ,gBAAiB1R,IAElCqoB,EAAgB3xB,UAAUmlB,cAAgB,WACtC,GAAIshB,IAAkB,EAClBC,GAAgB,CASpB,OARK1jC,qBAAkBlD,KAAK4yB,WAAc1vB,oBAAkBlD,KAAK2yB,cAC7DgU,EAAkB3mC,KAAK05B,eAAe15B,KAAK2yB,YAC3CiU,EAAgB5mC,KAAK05B,eAAe15B,KAAK4yB,UACpC5yB,KAAKw2B,gBACNx2B,KAAKsG,YAAc,MAEvBtG,KAAKyoB,YAEDke,GAAmBC,GAE/B/U,EAAgB3xB,UAAU2yB,cAAgB,WACjC7yB,KAAKmG,OAA4B,OAAnBnG,KAAKub,WAAuC,OAAjBvb,KAAKwb,QAG3B,OAAfxb,KAAKmG,OAAuC,OAArBnG,KAAKmG,MAAMuF,MACpB,OAAf1L,KAAKmG,MACLnG,KAAKoD,eAAgB+C,OAAQnG,KAAKub,UAAWvb,KAAKwb,WAAY,GAEpC,OAArBxb,KAAKmG,MAAMuF,OAChB1L,KAAKoD,eAAgB+C,OAASuF,MAAO1L,KAAKub,UAAWhW,IAAKvF,KAAKwb,WAAa,GAI3Exb,KAAKmG,OAASnG,KAAKmG,MAAMxF,OAAS,GACnCX,KAAK+1B,WAAa/1B,KAAK+1B,UAAUp1B,OAAS,IACrCX,KAAKub,YAAevb,KAAKmG,MAAM,KAAOnG,KAAKwb,UAAaxb,KAAKmG,MAAM,IACpEnG,KAAKoD,eAAgB+C,OAAQnG,KAAKub,UAAWvb,KAAKwb,WAAY,GAE9Dxb,KAAKmG,OAA0B,MAAjBnG,KAAKmG,MAAM,IAA+B,MAAjBnG,KAAKmG,MAAM,IAClDnG,KAAKoD,eAAgB+C,MAAO,OAAQ,IAInCnG,KAAKmG,OAASnG,KAAKmG,MAAMuF,OAC1B1L,KAAKoD,eAAgB+C,OAASuF,MAAO1L,KAAKub,UAAWhW,IAAKvF,KAAKwb,WAAa,GAtBpFxb,KAAKoD,eAAgB+C,MAAO,OAAQ,GA0BxCnG,KAAK6mC,qBASThV,EAAgB3xB,UAAUmoB,cAAgB,SAAUxmB,EAASoG,GACzD,GAAI6+B,GAAM5e,SAASC,YAAY,aAC/B2e,GAAI1e,UAAUngB,GAAM,GAAO,GAC3BpG,EAAQwmB,cAAcye,GACtB9mC,KAAK+0B,iBAAiB1M,cAAcye,IAExCjV,EAAgB3xB,UAAUwpB,cAAgB,SAAUjc,IAC3CzN,KAAKw0B,gBAAmBx0B,KAAK2yB,aAAe3yB,KAAKy0B,cAAiBz0B,KAAK4yB,WACxE5yB,KAAKoD,eAAgBoY,QAASxb,KAAKoG,eAAepG,KAAK4yB,YAAa,GACpE5yB,KAAKoD,eAAgBmY,UAAWvb,KAAKoG,eAAepG,KAAK2yB,cAAe,GACxE3yB,KAAK6yB,gBACD7yB,KAAKqP,WAAarP,KAAKoC,cACvBpC,KAAKoC,eAAgB,EAGrBpC,KAAKkb,QAAQ,SAAUlb,KAAKq9B,UAAU5vB,KAG9CzN,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAKw0B,cAAgBx0B,KAAKoG,eAAepG,KAAK2yB,YAC9C3yB,KAAKy0B,YAAcz0B,KAAKoG,eAAepG,KAAK4yB,WAUhDf,EAAgB3xB,UAAU4N,WAAa,SAAUM,EAAMqB,GACnD,GAAIzP,KAAKw2B,cAAe,CACpB,GAA2B,UAAvBpoB,EAAKjE,cACLiE,EAAO,YAEN,IAA2B,SAAvBA,EAAKjE,cACViE,EAAO,WAEN,CAAA,GAA2B,WAAvBA,EAAKjE,cAIV,MAHAiE,GAAO,SAKPpO,KAAK6N,cAAcO,GAAQpO,KAAK6N,cAAc7N,KAAK4N,SACnDQ,EAAOpO,KAAK4N,OAEZ5N,KAAKuzB,SACL5xB,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMqB,IAGzCA,EAAOzP,KAAKwC,IACZiN,EAAO,GAAI3M,OAAM9C,KAAKwC,KAEjBiN,GAAQzP,KAAKyC,MAClBgN,EAAO,GAAI3M,OAAM9C,KAAKyC,MAEb,UAAT2L,GAAoBpO,KAAKo8B,YAAY3sB,EAAMzP,KAAKyC,KAChDgN,EAAO,GAAI3M,MAAK9C,KAAKyC,IAAI2M,cAAepP,KAAKyC,IAAIyO,WAAa,EAAGlR,KAAKwC,IAAIuO,WAE5D,SAAT3C,GAAmBpO,KAAKq8B,WAAW5sB,EAAMzP,KAAKyC,KACnDgN,EAAO,GAAI3M,MAAM9C,KAAKyC,IAAI2M,cAAgB,EAAIpP,KAAKyC,IAAIyO,WAAYlR,KAAKyC,IAAIsO,WAE9D,WAAT3C,GAAqBpO,KAAK+/B,aAAatwB,EAAMzP,KAAKyC,OACvDgN,EAAO,GAAI3M,MAAM9C,KAAKyC,IAAI2M,cAAgB,GAAKpP,KAAKyC,IAAIyO,WAAYlR,KAAKyC,IAAIsO,YAEjF/Q,KAAK+5B,mBAAqBtqB,EAC1BzP,KAAK+mC,SAAS/mC,KAAK02B,aAAc12B,KAAK+5B,mBAAoB3rB,GAEtDqB,EADS,UAATrB,EACO,GAAItL,MAAK9C,KAAKsG,YAAYoO,SAAS1U,KAAKsG,YAAY4K,WAAa,IAE1D,SAAT9C,EACE,GAAItL,MAAK9C,KAAKsG,YAAY0O,YAAYhV,KAAKsG,YAAY8I,cAAgB,IAGvE,GAAItM,MAAK9C,KAAKsG,YAAY0O,YAAYhV,KAAKsG,YAAY8I,cAAgB,KAElFpP,KAAKg6B,oBAAsBvqB,EAC3BzP,KAAK+mC,SAAS/mC,KAAKw3B,cAAex3B,KAAKg6B,oBAAqB5rB,GAC5DpO,KAAKw4B,mBAAqBx4B,KAAK04B,oBAAsB,KACrD14B,KAAKi4B,kBAELj4B,KAAK2N,gBAAkB3N,KAAK4N,OAC5B5N,KAAK24B,yBAET34B,KAAK44B,oBACL54B,KAAKu3B,YAAav3B,KAAKuzB,UAAYvzB,KAAKqE,kBAAoBrE,KAAK02B,aAAc12B,KAAKw3B,kBAG5F3F,EAAgB3xB,UAAU6mC,SAAW,SAAUvzB,EAAU/D,EAAMrB,GAC3DpO,KAAKqE,gBAAkBmP,EACvBxT,KAAK2I,MAAQ6K,EAAS7J,cAAc,SACpC3J,KAAK0J,iBAAmB8J,EAAS7J,cAAc,SAC/C3J,KAAKuI,mBAAqBiL,EAAS7J,cAAc,YACjD3J,KAAKoL,iBAAmBoI,EAAS7J,cAAc,SAC/C3J,KAAK0I,eAAiB8K,EAAS7J,cAAc,cAC7C3J,KAAK+H,aAAeyL,EAAS7J,cAAc,WAC3C3J,KAAKsI,SAAWkL,EAAS7J,cAAc,WACvC3J,KAAKgC,OApqHA,WAqqHLL,EAAOzB,UAAU4N,WAAW/L,KAAK/B,KAAMoO,EAAMqB,IAOjDoiB,EAAgB3xB,UAAUkuB,QAAU,WAC5BlG,SAASyB,gBAAkB3pB,KAAKsP,cAAgBtP,KAAKyE,UACrDyC,YAAUlH,KAAK8iB,aAAaC,YAvtHvB,kBAwtHL/iB,KAAKsP,aAAaX,UAQ1BkjB,EAAgB3xB,UAAU+pB,SAAW,WACjC,GAAI3H,GAAStiB,KAAKwyB,WACdtK,UAASyB,gBAAkB3pB,KAAKsP,eAChCrI,eAAajH,KAAK8iB,aAAaC,YAnuH1B,kBAouHL/iB,KAAKwyB,aAAc,EACnBxyB,KAAKsP,aAAaoZ,OAClB1oB,KAAKwyB,YAAclQ,IAQ3BuP,EAAgB3xB,UAAUoZ,QAAU,WAChCtZ,KAAKynB,eACDznB,KAAK8kB,kBACL9kB,KAAKinB,YAAciB,SAASjF,uBAAuB,gBAAgB,IAEvEjjB,KAAKuP,KAAK,KACV,IAAI0U,IACAtc,SAAY,IAAKuc,gBAAiB,QAASrb,KAAQ,WACnDsb,aAAgB,MAAO/c,gBAAkBpH,KAAKyE,QAAmB,QAAT,OACxD2f,YAAe,MAAOC,eAAkB,MAAOE,eAAgB,QAASD,WAAc,QAEtFtkB,MAAKsP,eACLrI,eAAajH,KAAKsP,eAAgBnO,IAClCkI,eAAaQ,OAAO7J,KAAKsP,aAAc,OAAQtP,KAAK6mB,kBACpDjE,QAAM0L,iBAAiBrK,EAAWjkB,KAAKsP,cAClCpM,oBAAkBlD,KAAK2zB,aAAaxvB,aAAa,aAIlDnE,KAAKsP,aAAaiK,gBAAgB,YAHlCvZ,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,UAKpDjE,KAAKwuB,uBACLxuB,KAAKsP,aAAa5L,UAAUmG,OAAO,WAC9B3G,oBAAkBlD,KAAK8iB,gBACxBzZ,eAAaQ,OAAO7J,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAK41B,kBAC5C,OAApB51B,KAAK0zB,YACL1zB,KAAK8iB,aAAaC,UAAUiH,cAAcxhB,YAAYxI,KAAKsP,cAE/DpE,SAAOlL,KAAK8iB,aAAaC,aAG5B7f,oBAAkBlD,KAAK61B,sBAAyB71B,KAAKuzB,UACtDvzB,KAAK61B,oBAAoBvc,UAEzBtZ,KAAKwnB,WACAxnB,KAAKuzB,UACNvzB,KAAK23B,uBAGb/U,QAAMtJ,SACFzX,QAAS7B,KAAKsP,aACdqT,eAAgB3iB,KAAK2iB,eACrBkC,WAAY7kB,KAAK6kB,YAClB7kB,KAAKinB,aACRtlB,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,MAC9BA,KAAK8iB,aAAe9iB,KAAKwG,aAAexG,KAAKwnB,SAAWxnB,KAAK2zB,aAAe3zB,KAAK66B,cAAgB,KAC7F76B,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKqd,kBAElDna,oBAAkBlD,KAAK+0B,mBACpB7xB,oBAAkBlD,KAAKg1B,qBAC5B9pB,SAAOlL,KAAK+0B,kBACZ7pB,SAAOlL,KAAKg1B,mBACZh1B,KAAK+0B,iBAAmB/0B,KAAKg1B,kBAAoB,KACjDh1B,KAAKsP,aAAalL,aAAa,OAAQpE,KAAK6B,QAAQsC,aAAa,cACjEnE,KAAKsP,aAAaiK,gBAAgB,cAEtCvZ,KAAK+hC,eAAiB,KACtB/hC,KAAK02B,aAAe,KACpB12B,KAAK8gC,WAAa,KAClB9gC,KAAK0gC,UAAY,KACjB1gC,KAAK8iC,cAAgB,KACrB9iC,KAAK63B,gBAAkB,KACvB73B,KAAKw3B,cAAgB,KACrBx3B,KAAK+hC,eAAiB,KACtB/hC,KAAK83B,iBAAmB,KACxB93B,KAAK43B,gBAAkB,KACvB53B,KAAKgiC,oBAAsB,KAC3BhiC,KAAKg7B,aAAe,KACpBh7B,KAAKq2B,YAAc,KACnBr2B,KAAKqE,gBAAkB,KACvBrE,KAAKw4B,mBAAqB,KAC1Bx4B,KAAK+3B,iBAAmB,KACxB/3B,KAAK63B,gBAAkB,KACvB73B,KAAKgkC,kBAAoB,KACzBhkC,KAAK04B,oBAAsB,KAC3B14B,KAAKw4B,mBAAqB,KAC1Bx4B,KAAKikC,qBAAuB,KAC5BjkC,KAAKiyB,cAAgB,KACrBjyB,KAAKwnB,SAAW,KAChBxnB,KAAKwG,aAAe,MAExBqrB,EAAgB3xB,UAAUsuB,qBAAuB,WAE7C,IAAK,GADDY,MACKpuB,EAAI,EAAGA,EAAIhB,KAAKsP,aAAavL,WAAWpD,OAAQK,IACrDouB,EAAKpuB,GAAKhB,KAAKsP,aAAavL,WAAW/C,GAAGyW,IAE9C,KAASzW,EAAI,EAAGA,EAAIouB,EAAKzuB,OAAQK,IACzBkC,oBAAkBlD,KAAK2zB,aAAaxvB,aAAairB,EAAKpuB,MACxB,UAA1BouB,EAAKpuB,GAAGmJ,gBACRnK,KAAKsP,aAAanJ,MAAQ,IAE9BnG,KAAKsP,aAAaiK,gBAAgB6V,EAAKpuB,MAGT,UAA1BouB,EAAKpuB,GAAGmJ,gBACRnK,KAAKsP,aAAanJ,MAAQnG,KAAK2zB,aAAaxvB,aAAairB,EAAKpuB,KAElEhB,KAAKsP,aAAalL,aAAagrB,EAAKpuB,GAAIhB,KAAK2zB,aAAaxvB,aAAairB,EAAKpuB,OAUxF6wB,EAAgB3xB,UAAUuD,cAAgB,WACtC,MAAO,mBAQXouB,EAAgB3xB,UAAUwX,eAAiB,WACvC,GAAIC,IAAa,YAAa,UAAW,QACzC,OAAO3X,MAAK4X,aAAaD,IAO7Bka,EAAgB3xB,UAAU8mC,iBAAmB,WACzC,GAAItR,EAeJ,OAdKxyB,qBAAkBlD,KAAK2yB,aAAgBzvB,oBAAkBlD,KAAK4yB,UAY/D8C,EAAQ,GAXRA,EAAS3f,KAAKsL,MAAMtL,KAAKC,KAAKhW,KAAKu9B,wBAAwBv9B,KAAK2yB,YAAYvY,UACxEpa,KAAKu9B,wBAAwBv9B,KAAK4yB,UAAUxY,mBAAuC,GAClFlX,oBAAkBlD,KAAKgO,oBAAsBhO,KAAKgO,kBAAkByE,YACrEzS,KAAKy3B,qBAEJv0B,oBAAkBlD,KAAK8+B,kBACxBpJ,GAAgB11B,KAAK8+B,eACrB9+B,KAAK8+B,eAAiB,QAMrBvjB,UAAWvb,KAAK2yB,WAAYnX,QAASxb,KAAK4yB,SAAU/F,QAAS6I,IAU1E7D,EAAgB3xB,UAAUyoB,KAAO,SAAU9mB,EAASwZ,GAChD,GAAIvZ,GAAQ9B,IAIZ,IAHIA,KAAKuzB,UAAYvzB,KAAKwnB,UACtBxnB,KAAKwnB,SAASoG,oBAEb5tB,KAAKyE,SAAWzE,KAAKqjB,WAAcrjB,KAAKyE,SAAWzE,KAAKwnB,UAIpDxnB,KAAKw2B,eAAe,CACjB30B,IACA7B,KAAKu2B,cAAgB10B,GAEzB7B,KAAK82B,eACD92B,KAAKuzB,UAAY1vB,UAAQC,YACzB9D,KAAKinC,qBAAuBjnC,KAAKsE,cAAc,OAASuD,UAAW,mCACnEqgB,SAAS4C,KAAKtiB,YAAYxI,KAAKinC,uBAEnCjnC,KAAK8iC,eACDtV,MAAOxtB,KAAKwnB,UAAY,KACxBiG,QAAQ,EACRhe,KAAMzP,KAAKsP,aAAanJ,MACxBojB,MAAOvpB,KACPqb,MAAOA,GAAgB,KACvBqS,SAAU1tB,KAAKuzB,UAAY1vB,UAAQC,SAAW9D,KAAKinC,qBAAuB/e,SAAS4C,KAEvF,IAAI6C,GAAY3tB,KAAK8iC,aAoBrB,IAnBA9iC,KAAKkb,QAAQ,OAAQyS,EAAW,SAAUA,GAEtC,GADA7rB,EAAMghC,cAAgBnV,GACjB7rB,EAAMghC,cAAcrV,OAAQ,CAC7B3rB,EAAMghC,cAAcpV,SAASllB,YAAY1G,EAAM0E,cAC/C1E,EAAM+gC,UAAUhhC,EAASwZ,EACzB,IAAI2b,IAAal1B,EAAMgwB,eAAkBhwB,EAAMyxB,UAAYzxB,EAAMgwB,eAC5DyD,cAAYzzB,EAAM0zB,QAAQ,GAAG9pB,OAAS5J,EAAM0zB,QAAQ,GAAGjwB,KAAOzD,EAAM0zB,QAAQ,GAAGC,QAAUuB,GAC1Fl1B,EAAM6iC,oBAEV7iC,EAAMo5B,kBACDp5B,aAAqBoB,oBAAkBpB,EAAMyZ,YAAgBrY,oBAAkBpB,EAAM0Z,WACtF1Z,EAAMw2B,UAAUz2B,QAAQ6B,UAAUC,IAAImtB,GACtChvB,EAAMs2B,YAAYv2B,QAAQ6B,UAAUmG,OAAOinB,GAC3ChvB,EAAMw2B,UAAUz2B,QAAQ0X,gBAAgB,YACxCzX,EAAMq3B,mBAEVx3B,EAAOzB,UAAUqG,gBAAgBxE,KAAKD,EAAOA,EAAMmlC,qBAAsBnlC,EAAM0lB,SAAS3lB,QAASC,EAAM4E,MAAO5E,EAAMyxB,UAAY1vB,UAAQC,aAG5ID,UAAQC,SAAU,CAClB,GAAIiqB,GAAa/tB,KAAKsE,cAAc,OAASuD,UAAW,iBACxDkmB,GAAWlnB,MAAMC,QAAU9G,KAAK8G,OAAS,GAAGC,WAC5C/G,KAAKinC,qBAAqBz+B,YAAYulB,MAUtD8D,EAAgB3xB,UAAUqP,KAAO,SAAU8L,GACvC,GAAIvZ,GAAQ9B,IACZ,IAAIA,KAAKwnB,UAuBL,GAtBItkB,oBAAkBlD,KAAKk2B,mBAAqBhzB,oBAAkBlD,KAAKi2B,oBACnEj2B,KAAKg2B,cAGA9yB,oBAAkBlD,KAAKi2B,qBAMxBj2B,KAAK2yB,WAAa,KAClB3yB,KAAKyoB,aANLzoB,KAAK2yB,WAAa,GAAI7vB,MAAK9C,KAAKqG,WAAWrG,KAAKi2B,qBAChDj2B,KAAKyoB,WACLzoB,KAAKsG,YAAc,GAAIxD,MAAK9C,KAAKqG,WAAWrG,KAAK2yB,cAMhDzvB,oBAAkBlD,KAAKk2B,mBAKxBl2B,KAAK4yB,SAAW,KAChB5yB,KAAKyoB,aALLzoB,KAAK4yB,SAAW,GAAI9vB,MAAK9C,KAAKqG,WAAWrG,KAAKk2B,mBAC9Cl2B,KAAKyoB,aAOTzoB,KAAKw2B,cAAe,CACpBx2B,KAAK+hC,gBACDtU,QAAQ,EACRD,MAAOxtB,KAAKwnB,SACZ/X,KAAMzP,KAAKsP,aAAanJ,MACxBojB,MAAOvpB,KACPqb,MAAOA,GAAgB,KAE3B,IAAIsS,GAAY3tB,KAAK+hC,cACrB/hC,MAAKkb,QAAQ,QAASyS,EAAW,SAAUA,GACvC7rB,EAAMigC,eAAiBpU,EAClB7rB,EAAMigC,eAAetU,OA2CtBxmB,eAAanF,EAAMghB,aAAaE,QAAQ,IAAK8N,IA1CzChvB,EAAMyxB,WACDrwB,oBAAkBpB,EAAMs2B,cAAiBl1B,oBAAkBpB,EAAMw2B,aAClEjvB,eAAaQ,OAAO/H,EAAMs2B,YAAYv2B,QAAS,mBAAoBC,EAAMu2B,mBACzEhvB,eAAaQ,OAAO/H,EAAMw2B,UAAUz2B,QAAS,mBAAoBC,EAAMu2B,qBAG3Ev2B,EAAM0lB,WACN1lB,EAAM0lB,SAASjY,OACXzN,EAAM0wB,cACN1wB,EAAMwN,aAAaX,QACnBzH,YAAUpF,EAAMghB,aAAaC,YAh/H5C,oBAm/HYjhB,EAAMyxB,WACFrwB,oBAAkBpB,EAAM02B,qBAAwBt1B,oBAAkBpB,EAAM42B,uBACzE52B,EAAM02B,mBAAmBlf,UACzBxX,EAAM42B,oBAAoBpf,WAEzBpW,oBAAkBpB,EAAM+4B,gBACzB/4B,EAAMmiC,qBAAqB3qB,UAE1BpW,oBAAkBpB,EAAMk5B,eACzBl5B,EAAMkiC,kBAAkB1qB,WAGhCxX,EAAMy0B,cAAgB,KACtBtvB,eAAaihB,SAAS4C,MA59H/B,oBA69HSzhB,eAAaQ,OAAOqe,SAAU,uBAAwBpmB,EAAMioB,iBACxDjoB,EAAMyxB,UAAYzxB,EAAM4E,QACxB5E,EAAM4E,MAAMG,MAAMkkB,QAAU,OAC5BjpB,EAAM4E,MAAMynB,UAAY,GACxBrsB,EAAM4E,MAAQ,OAEd5E,EAAMyxB,UAAY1vB,UAAQC,YACrBZ,oBAAkBpB,EAAMmlC,wBACzBnlC,EAAMmlC,qBAAqBp9B,SAC3B/H,EAAMmlC,qBAAuB,OAGrCnlC,EAAMqwB,WAAarwB,EAAMswB,cAAe,GAK5CtwB,EAAMmzB,uBACNnzB,EAAMg0B,oBACFh0B,EAAMyxB,UAAYzxB,EAAMshB,YAActhB,EAAMuhB,UAC5CvhB,EAAMwN,aAAaiK,gBAAgB,mBAM/CvZ,MAAKi1B,uBACLj1B,KAAK81B,oBACD91B,KAAKuzB,UAAYvzB,KAAKojB,YAAcpjB,KAAKqjB,UACzCrjB,KAAKsP,aAAaiK,gBAAgB,aAK9CsY,EAAgB3xB,UAAUiY,UAAY,WAClCnY,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKwkB,KAAKrM,UAAUnY,KAAKiD,QACrBjD,KAAK0yB,kBAAyD,MAArC1yB,KAAK0yB,iBAAiB7O,cAC/C7jB,KAAKoD,eAAgBygB,YAAa7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAC1E0W,QAAMqN,eAAejwB,KAAK6jB,YAAa7jB,KAAKsP,eAEhDtP,KAAKkjB,cACLljB,KAAK81B,oBACL91B,KAAK0pB,iBAETmI,EAAgB3xB,UAAUgnC,cAAgB,WACtClnC,KAAKkY,YACLlY,KAAKu5B,iBACLv5B,KAAK0pB,iBAETmI,EAAgB3xB,UAAUyU,QAAU,WAChCiO,QAAM6F,SAAS,GAAIzoB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,iBAChE9kB,KAAKknC,iBAETrV,EAAgB3xB,UAAUinC,YAAc,YAC/BnnC,KAAKwC,MAAQxC,KAAKyC,MACnBzC,KAAKoD,eAAgBqB,SAAS,IAAQ,GACtCme,QAAMuN,WAAWnwB,KAAKyE,QAASzE,KAAKsP,cAChCtP,KAAK6B,QAAQqC,aAAa,aAC1BlE,KAAK0iB,eAIjBmP,EAAgB3xB,UAAUknC,gBAAkB,SAAUtvB,EAASC,GAC3D/X,KAAKoD,eAAgBmY,UAAW,OAAQ,GACxCvb,KAAKoD,eAAgBoY,QAAS,OAAQ,GAClCzD,EAAQ5R,OAAS4R,EAAQ5R,MAAMxF,OAAS,EACxCX,KAAKoD,eAAgB+C,MAAO,OAAQ,GAE/B4R,EAAQ5R,OAAS4R,EAAQ5R,MAAMuF,MACpC1L,KAAKoD,eAAgB+C,OAASuF,MAAO,KAAMnG,IAAK,QAAU,GAErDwS,EAAQ5R,QAAU4R,EAAQ5R,MAAMuF,OACrC1L,KAAKoD,eAAgB+C,OAASuF,MAAO,KAAMnG,IAAK,QAAU,GAE9DvF,KAAK00B,cACL10B,KAAK2U,WAETkd,EAAgB3xB,UAAU2mC,kBAAoB,WACtC3jC,oBAAkBlD,KAAK+0B,mBAAqB7xB,oBAAkBlD,KAAKg1B,qBACnEh1B,KAAK+0B,iBAAmB/0B,KAAKsE,cAAc,SAC3CtE,KAAKg1B,kBAAoBh1B,KAAKsE,cAAc,UAE3CpB,oBAAkBlD,KAAKsP,aAAanL,aAAa,WAClDnE,KAAKsP,aAAalL,aAAa,YAAapE,KAAKsP,aAAanL,aAAa,SAC3EnE,KAAKsP,aAAaiK,gBAAgB,SAEtCxV,aAAW/D,KAAK+0B,kBACZ9sB,KAAQ,OAAQwP,KAAQzX,KAAKsP,aAAanL,aAAa,aAAcyE,MA7iI7D,uBA+iIZ7E,aAAW/D,KAAKg1B,mBACZ/sB,KAAQ,OAAQwP,KAAQzX,KAAKsP,aAAanL,aAAa,aAAcyE,MAhjI7D,sBAkjIZ,IAAI4J,IAAWA,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,MACtElS,MAAK+0B,iBAAiB5uB,MAAQnG,KAAKub,WAAavb,KAAK+C,UAAUqP,WAAWpS,KAAKub,UAAW/I,GAC1FxS,KAAKg1B,kBAAkB7uB,MAAQnG,KAAKwb,SAAWxb,KAAK+C,UAAUqP,WAAWpS,KAAKwb,QAAShJ,GACvFxS,KAAKsP,aAAa0a,cAAcxhB,YAAYxI,KAAK+0B,kBACjD/0B,KAAKsP,aAAa0a,cAAcxhB,YAAYxI,KAAKg1B,oBAErDnD,EAAgB3xB,UAAUmnC,cAAgB,WAClCrnC,KAAKw2B,gBACLx2B,KAAKi5B,sBACLj5B,KAAKk7B,kBACDl7B,KAAKuzB,UACLvzB,KAAKm5B,mBAEJn5B,KAAKslB,YAAepiB,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,UAClF5yB,KAAKs2B,kBAGLt2B,KAAKu3B,YAAav3B,KAAKuzB,UAAYvzB,KAAKqE,kBAAoBrE,KAAK02B,aAAc12B,KAAKw3B,gBAExFx3B,KAAK03B,iBAGb7F,EAAgB3xB,UAAUonC,iBAAmB,SAAU73B,EAAM+pB,GACzD,MAAmB,UAAfx5B,KAAK4N,MACE5N,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWoJ,KAEhC,SAAfzP,KAAK4N,MACH,GAAI9K,MAAK2M,EAAKL,cAAeK,EAAKyB,YAAcsoB,EAAQ,EAAI,GAAIA,EAAQ,EAAI,GAG5E,GAAI12B,MAAK2M,EAAKL,cAAeoqB,EAAQ,GAAK,EAAGA,EAAQ,GAAK,IAWzE3H,EAAgB3xB,UAAU2X,kBAAoB,SAAUC,EAASC,GAE7D,IAAK,GADDvF,IAAWA,OAAQxS,KAAK0lB,aAAczd,KAAM,OAAQiK,SAAU,OACzD1H,EAAK,EAAGC,EAAKhL,OAAOiL,KAAKoN,GAAUtN,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC9D,GAAIwN,GAAOvN,EAAGD,EAKd,SAJiB,UAAW,UAAW,SACzBoJ,QAAQoE,GAAQ,GAC1BhY,KAAKuP,KAAK,MAENyI,GACJ,IAAK,QACDhY,KAAK2lC,YAAY3lC,KAAKilB,OACtBrC,QAAMC,eAAe7iB,KAAKsP,aAActP,KAAK8iB,aAAaC,WACrD7f,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,YACD3D,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAKoD,eAAgB0wB,UAAWhc,EAAQgc,YAAa,GACrD9zB,KAAKkjB,cACLljB,KAAK0pB,eACL,MACJ,KAAK,cACD9G,QAAMqN,eAAenY,EAAQ+L,YAAa7jB,KAAKsP,cAC/CtP,KAAKoD,eAAgBygB,YAAa/L,EAAQ+L,cAAe,EACzD,MACJ,KAAK,WACDjB,QAAMsN,YAAYlwB,KAAKqjB,SAAUrjB,KAAKsP,cACtCtP,KAAK60B,mBACL,MACJ,KAAK,WACD70B,KAAKipB,eAAenR,EAAQqF,SAAUpF,EAAQoF,SAC9C,MACJ,KAAK,UACDnd,KAAKoD,eAAgBqB,QAASqT,EAAQrT,UAAW,GACjDme,QAAMuN,WAAWnwB,KAAKyE,QAASzE,KAAKsP,cAChCtP,KAAKyE,QACLzE,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,UAGhDjE,KAAKsP,aAAarL,UAAY,CAElC,MACJ,KAAK,YACDjE,KAAK60B,mBACL,MACJ,KAAK,YACD70B,KAAKoD,eAAgBQ,UAAWkU,EAAQlU,YAAa,GACrDgf,QAAMwN,aAAapwB,KAAK4D,WAAY5D,KAAK8iB,aAAaC,WACtD,MACJ,KAAK,SACD/iB,KAAKoD,eAAgB0D,OAAQgR,EAAQhR,SAAU,EAC/C,MACJ,KAAK,SACD9G,KAAKoD,eAAgBoP,OAAQsF,EAAQtF,SAAU,GAC/CxS,KAAKqvB,cACLrvB,KAAKkjB,cACLljB,KAAK0pB,eACL,MACJ,KAAK,SACD1pB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKwkB,KAAKrM,UAAUnY,KAAKiD,QACrBjD,KAAK0yB,kBAAyD,MAArC1yB,KAAK0yB,iBAAiB7O,cAC/C7jB,KAAKoD,eAAgBygB,YAAa7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAC1E0W,QAAMqN,eAAejwB,KAAK6jB,YAAa7jB,KAAKsP,eAEhDtP,KAAKmY,WACL,MACJ,KAAK,iBACDnY,KAAKgpB,+BACLhpB,KAAK4jB,+BACL5jB,KAAK8yB,kBAAiB,GACtB9yB,KAAK4uB,qBAAoB,EACzB,MACJ,KAAK,kBACDhM,QAAMyN,eAAerwB,KAAK8kB,gBAAiB9kB,KAAKsP,aAActP,KAAK8iB,cACnE9iB,KAAK6nB,gBACL,MACJ,KAAK,YACgC,gBAAtB/P,GAAQyD,YACfzD,EAAQyD,UAAYvb,KAAK+C,UAAUoP,UAAU2F,EAAQyD,UAAW/I,KAE/DxS,KAAKw0B,gBAAmB1c,EAAQyD,YACjCvb,KAAK2yB,WAAa3yB,KAAKsnC,iBAAiBxvB,EAAQyD,WAAW,GAC3Dvb,KAAK2U,UACL3U,KAAKyoB,WAET,MACJ,KAAK,UAC8B,gBAApB3Q,GAAQ0D,UACf1D,EAAQ0D,QAAUxb,KAAK+C,UAAUoP,UAAU2F,EAAQ0D,QAAShJ,KAE3DxS,KAAKy0B,cAAiB3c,EAAQ0D,UAC/Bxb,KAAK4yB,SAAW5yB,KAAKsnC,iBAAiBxvB,EAAQ0D,SAAS,GACvDxb,KAAK2U,UACL3U,KAAKyoB,WAET,MACJ,KAAK,QAGD,GAFAzoB,KAAKgiB,mBAAqB,KAC1BhiB,KAAK4zB,kBAAkB9b,EAAQ3R,OACA,gBAAnB2R,SACR,GAAK9X,KAAKgiB,mBAONhiB,KAAKonC,gBAAgBtvB,EAASC,OAPJ,CAC1B,GAAI8b,GAAa/b,EAAQ3R,MAAMgI,MAAM,IAAMnO,KAAK8zB,UAAY,IAC5D9zB,MAAKmG,OAAS,GAAIrD,MAAK+wB,EAAW,IAAK,GAAI/wB,MAAK+wB,EAAW,KAC3D7zB,KAAK00B,cACL10B,KAAK2U,eAOHzR,oBAAkB4U,EAAQ3R,QAAU2R,EAAQ3R,MAAMxF,OAAS,IACzDuC,oBAAkB4U,EAAQ3R,QAAU2R,EAAQ3R,MAAMuF,OACtD1L,KAAK+1B,UAAYje,EAAQ3R,MACA,OAArB2R,EAAQ3R,MAAM,IAAwC,OAAxB2R,EAAQ3R,MAAMuF,MACf,IAAzBoM,EAAQ3R,MAAMxF,QAAiBmX,EAAQ3R,MAAY,MACnDnG,KAAKonC,gBAAgBtvB,EAASC,GAEJ,OAArBD,EAAQ3R,MAAM,IACM,OAAxB2R,EAAQ3R,MAAMuF,OACf1L,KAAKonC,gBAAgBtvB,EAASC,IAG3B/X,KAAKw0B,gBAAmB1c,EAAQ3R,MAAM,KACzCnG,KAAKy0B,cAAiB3c,EAAQ3R,MAAM,KACtCnG,KAAKw0B,iBAAoB1c,EAAQ3R,MAAMuF,QACjC1L,KAAKy0B,cAAiB3c,EAAQ3R,MAAMuF,SACf,IAAzBoM,EAAQ3R,MAAMxF,OACdX,KAAK4iC,WAAa9qB,EAAQ3R,MAErB2R,EAAQ3R,MAAMuF,QACnB1L,KAAK4iC,WAAa9qB,EAAQ3R,OAE9BnG,KAAK00B,cACL10B,KAAK2U,aAILzR,oBAAkBlD,KAAKmG,QACG,MAAvB2R,EAAQ3R,MAAMuF,SACjB1L,KAAK+1B,UAAYje,EAAQ3R,MACzBnG,KAAK2yB,WAAa,KAClB3yB,KAAK4yB,SAAW,KAChB5yB,KAAKonC,gBAAgBtvB,EAASC,GAI1C,IAAI/X,KAAKw2B,cAAe,CACpB,GAAItzB,oBAAkBlD,KAAK2yB,aAAezvB,oBAAkBlD,KAAK4yB,UAK7D,MAJA5yB,MAAKs2B,uBACDt2B,KAAKuzB,UACLvzB,KAAK6hC,qBAIT7hC,MAAKuzB,UACLvzB,KAAK+mC,SAAS/mC,KAAK+4B,eAAgB/4B,KAAK2yB,WAAY3yB,KAAK2N,eACzD3N,KAAK6hC,uBAGL7hC,KAAK+mC,SAAS/mC,KAAK02B,aAAc12B,KAAK2yB,WAAY3yB,KAAK2N,eACvD3N,KAAKi/B,cAAcj/B,KAAK02B,cACxB12B,KAAK+mC,SAAS/mC,KAAKw3B,cAAex3B,KAAK4yB,SAAU5yB,KAAK2N,eACtD3N,KAAKi/B,cAAcj/B,KAAKw3B,gBAE5Bx3B,KAAKu3B,YAAav3B,KAAKuzB,UAAYvzB,KAAKqE,kBAAoBrE,KAAK02B,aAAc12B,KAAKw3B,gBACpFx3B,KAAK03B,eACL13B,KAAKq2B,YAAY7xB,SAAWxE,KAAKq2B,YAAYx0B,QAAQ2C,UAAW,EAEpExE,KAAKoC,cAAgBpC,KAAKqP,WAAarP,KAAKoC,eAAiBpC,KAAKoC,cAAgBpC,KAAKoC,aACvF,MACJ,KAAK,UACDpC,KAAKoD,eAAgBwzB,QAAS9e,EAAQ8e,UAAW,GACjD52B,KAAKknC,gBACLlnC,KAAKqnC,eACL,MACJ,KAAK,UACDrnC,KAAKoD,eAAgByzB,QAAS/e,EAAQ+e,UAAW,GACjD72B,KAAKknC,gBACLlnC,KAAKqnC,eACL,MACJ,KAAK,MACDrnC,KAAKoD,eAAgBZ,IAAKxC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWyR,EAAQtV,SAAU,GACzFxC,KAAKkyB,iBAAmBlyB,KAAKsP,aAAanJ,MAC1CnG,KAAKmnC,cACLnnC,KAAKknC,eACL,MACJ,KAAK,MACDlnC,KAAKoD,eAAgBX,IAAKzC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKqG,WAAWyR,EAAQrV,SAAU,GACzFzC,KAAKmnC,cACLnnC,KAAKknC,eACL,MACJ,KAAK,aACDlnC,KAAKgiB,mBAAqB,KAC1BhiB,KAAKoD,eAAgBkiB,WAAYxN,EAAQwN,aAAc,GACvDtlB,KAAKknC,eACL,MACJ,KAAK,UACDlnC,KAAKoD,eAAgBoyB,QAAS1d,EAAQ0d,UAAW,GACjDx1B,KAAK40B,gBACL,MACJ,KAAK,iBACD50B,KAAK2iB,eAAiB7K,EAAQ6K,eAC9BC,QAAM0N,eAAetwB,KAAK8iB,cAC1BF,QAAM2N,YAAYvwB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK6jB,aAC1D3gB,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,QACD3D,KAAKoD,eAAgBsI,MAAOoM,EAAQpM,QAAS,GAC7C1L,KAAKknC,eACL,MACJ,KAAK,QACDlnC,KAAKoD,eAAgBwK,MAAOkK,EAAQlK,QAAS,GAC7C5N,KAAKknC,mBAKrB9mC,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,YAAS,IACvCE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,wBAAqB,IACnDE,GACIkc,WAAS,GAAIxZ,MAAK,KAAM,EAAG,KAC5B+uB,EAAgB3xB,UAAW,UAAO,IACrCE,GACIkc,WAAS,GAAIxZ,MAAK,KAAM,GAAI,MAC7B+uB,EAAgB3xB,UAAW,UAAO,IACrCE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,aAAU,IACxCE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,qBAAkB,IAChDE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,iBAAc,IAC5CE,GACIkc,WAAS,cACVuV,EAAgB3xB,UAAW,mBAAgB,IAC9CE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,kBAAe,IAC7CE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,qBAAkB,IAChDE,GACImc,WACDsV,EAAgB3xB,UAAW,cAAW,IACzCE,GACImc,WACDsV,EAAgB3xB,UAAW,gBAAa,IAC3CE,GACImc,WACDsV,EAAgB3xB,UAAW,aAAU,IACxCE,GACImc,WACDsV,EAAgB3xB,UAAW,cAAW,IACzCE,GACImc,WACDsV,EAAgB3xB,UAAW,gBAAa,IAC3CE,GACImc,WACDsV,EAAgB3xB,UAAW,oBAAiB,IAC/CE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,gBAAa,IAC3CE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,cAAW,IACzCE,GACImnC,kBAAiB7V,IAClBG,EAAgB3xB,UAAW,cAAW,IACzCE,GACIkc,WAAS,KACVuV,EAAgB3xB,UAAW,YAAS,IACvCE,GACIkc,WAAS,MACVuV,EAAgB3xB,UAAW,aAAU,IACxCE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,sBAAmB,IACjDE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,sBAAmB,IACjDE,GACIkc,WAAS,UACVuV,EAAgB3xB,UAAW,YAAS,IACvCE,GACIkc,WAAS,UACVuV,EAAgB3xB,UAAW,YAAS,IACvCE,GACIkc,WAAS,KACVuV,EAAgB3xB,UAAW,eAAY,IAC1CE,GACIkc,WAAS,MACVuV,EAAgB3xB,UAAW,gBAAa,IAC3CE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,cAAW,IACzCE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,cAAW,IACzCE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,iBAAc,IAC5CE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,iBAAc,IAC5CE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,aAAU,IACxCE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,cAAW,IACzCE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,eAAY,IAC1CE,GACIkc,YAAS,IACVuV,EAAgB3xB,UAAW,gBAAa,IAC3CE,GACIkc,WAAS,UACVuV,EAAgB3xB,UAAW,qBAAkB,IAChDE,GACIkc,WAAS,OACVuV,EAAgB3xB,UAAW,kBAAe,IAC7CE,GACIkc,gBACDuV,EAAgB3xB,UAAW,qBAAkB,IAChDE,GACImc,WACDsV,EAAgB3xB,UAAW,WAAQ,IACtCE,GACImc,WACDsV,EAAgB3xB,UAAW,YAAS,IACvCE,GACImc,WACDsV,EAAgB3xB,UAAW,aAAU,IACxCE,GACImc,WACDsV,EAAgB3xB,UAAW,YAAS,IACvCE,GACImc,WACDsV,EAAgB3xB,UAAW,WAAQ,IACtC2xB,EAAkBzxB,GACdoc,yBACDqV,IAELnwB,GCzhJErC,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAe5D4mC,GAAM,GAAI1kC,OAAOiO,UACjB02B,GAAQ,GAAI3kC,OAAOoO,WACnBw2B,GAAO,GAAI5kC,OAAOsM,cAClBjO,EAAO,eASPwmC,EAAQ,gBAORC,GAAqB,QAAS,QAAS,UAG3C,SAAWC,GAEP,QAASC,GAAgBC,EAAWvlC,EAAKC,EAAKM,EAAWilC,EAAYC,GAE7DjoC,KAAK4C,YAOT,IAAI8I,GACAw8B,EAAkB,IAAPD,EACXE,KACAC,IACJ18B,IAAUlJ,EAAI8b,gBAAgB,EAE9B,KADA,GAAI/Y,IAAQ9C,EAAI6b,gBAAgB,GACzB/Y,GAAOmG,GACV08B,EAAgBx9B,KAAKc,GACrBy8B,EAAUv9B,KAAK7H,EAAUqP,WAAW,GAAItP,MAAK4I,IAAU8G,OAAQw1B,EAAY//B,KAAM,UACjFyD,GAASw8B,CAGb,QAAStyB,WAAYwyB,EAAiBC,KADxBrF,WAASC,WAAW8E,EAAWI,EAAW,MAAM,IAGlEN,EAAeC,gBAAkBA,GAClCD,mBAAmBA,yBAClBS,GAAqC,SAAU3mC,GAE/C,QAAS2mC,KACL,MAAkB,QAAX3mC,GAAmBA,EAAOgwB,MAAM3xB,KAAMU,YAAcV,KAuB/D,MAzBAX,GAAUipC,EAAqB3mC,GAI/BvB,GACIkc,WAAS,QACVgsB,EAAoBpoC,UAAW,UAAO,IACzCE,GACIkc,WAAS,UACVgsB,EAAoBpoC,UAAW,YAAS,IAC3CE,GACIkc,WAAS,SACVgsB,EAAoBpoC,UAAW,WAAQ,IAC1CE,GACIkc,WAAS,oBACVgsB,EAAoBpoC,UAAW,mBAAgB,IAClDE,GACIkc,WAAS,SACVgsB,EAAoBpoC,UAAW,WAAQ,IAC1CE,GACIkc,WAAS,WACVgsB,EAAoBpoC,UAAW,aAAU,IAC5CE,GACIkc,WAAS,WACVgsB,EAAoBpoC,UAAW,aAAU,IACrCooC,GACT1W,iBAaE2W,GAA4B,SAAU5mC,GAStC,QAAS4mC,GAAW3mC,EAASC,GACzB,GAAIC,GAAQH,EAAOI,KAAK/B,KAAM4B,EAASC,IAAY7B,IASnD,OARA8B,GAAMmwB,iBACNnwB,EAAMsmC,mBACNtmC,EAAM0mC,yBACN1mC,EAAMkgB,mBAAqB,KAC3BlgB,EAAMM,eAAgB,EACtBN,EAAMogB,gBAAkB,GACxBpgB,EAAM+K,WAAa/K,EAAM2B,gBACzB3B,EAAM2mC,YAAc7mC,EACbE,EA65EX,MA/6EAzC,GAAUkpC,EAAY5mC,GA0BtB4mC,EAAWroC,UAAU2P,UAAY,WAC7B7P,KAAK0oC,cACD3Z,MAAO,QACPD,OAAQ,SACRvpB,IAAK,MACL0pB,IAAK,MACL3pB,KAAM,OACNqjC,KAAM,YACNC,GAAI,UACJC,KAAM,YACNC,MAAO,aACPrd,KAAM,gBACNU,MAAO,eAEXnsB,KAAK2zB,aAAe3zB,KAAK6B,QAAQc,WAAU,GAC3CsE,eAAajH,KAAK2zB,eAAgBxyB,EA9H5B,YADA,UAgINnB,KAAKsP,aAAetP,KAAK6B,QACzB7B,KAAK0zB,WAAa,KAClB1zB,KAAKmnB,YAAc5iB,UAAQvE,KAAK6B,QAAS,QACZ,mBAAzB7B,KAAK6B,QAAQ6lB,UACb1nB,KAAK0zB,WAAa1zB,KAAK6B,QAAQ6lB,QAC/B1nB,KAAKsP,aAAetP,KAAKsE,cAAc,SACvCtE,KAAK6B,QAAQ2G,YAAYxI,KAAKsP,eAElCtP,KAAKiE,SAAWjE,KAAK6B,QAAQqC,aAAa,YAAclE,KAAK6B,QAAQsC,aAAa,YAAc,IAChGnE,KAAK6B,QAAQ0X,gBAAgB,YAC7BvZ,KAAK+oC,oBACDrb,SAAUxF,SAAS4C,OAI3Byd,EAAWroC,UAAUoC,OAAS,WAC1BtC,KAAKyiB,aACLziB,KAAKgpC,qBACLhpC,KAAK4jB,+BACL5jB,KAAKipC,mBACLjpC,KAAKid,YACLjd,KAAKkpC,mBACLlpC,KAAK0iB,aACL1iB,KAAKmpC,kBACLnpC,KAAKsd,cACLtd,KAAKyoB,SAASzoB,KAAKopC,kBAAkBppC,KAAKmG,SACtCnG,KAAKwjB,YAAexjB,KAAKmG,QAASnG,KAAKkiB,iBAA4C,WAAxBliB,KAAK2iB,gBAAgC3iB,KAAK2iB,gBAAmB3iB,KAAK6jB,cAC7H7jB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKqpC,gBAAgBrpC,KAAKkiB,kBAE9BliB,KAAKspC,OAAStpC,KAAKsP,aACnBtP,KAAKsP,aAAalL,aAAa,QAASpE,KAAKsP,aAAanJ,OAC1DnG,KAAKupC,cAAgBvpC,KAAKwpC,cAAcxpC,KAAKsP,aAAanJ,OACrDjD,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQvE,KAAK6B,QAAS,cAAgB0C,UAAQvE,KAAK6B,QAAS,YAAY2C,WAC3FxE,KAAKyE,SAAU,GAEnBzE,KAAKwd,kBAET+qB,EAAWroC,UAAUod,YAAc,WAC/B,IAAKpa,oBAAkBlD,KAAKud,uBAAyBvd,KAAKmG,MAAO,CAC7D,GAAIsjC,IAAqB,GAAI3mC,OAAOmT,oBAAsB,GAEtDiI,EADqBle,KAAKud,qBACUksB,CACxCvrB,GAAele,KAAK8d,mBAAqBI,IAAiBA,EAC1Dle,KAAKmG,MAAQ,GAAIrD,MAAM9C,WAAYoa,UAA4B,GAAf8D,EAAoB,GAAK,OAGjFqqB,EAAWroC,UAAU4d,iBAAmB,WACpC,GAAIE,GAAc,GAAIlb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,oBACvD8H,EAAe,GAAIjb,MAAK9C,KAAKmG,MAAMiJ,cAAe,EAAG,GAAG6G,mBAC5D,OAAQjW,MAAKmG,MAAM8P,oBAAsBF,KAAKtT,IAAIub,EAAaD,IAEnEwqB,EAAWroC,UAAU+oC,iBAAmB,WAChCjpC,KAAKojB,UACApjB,KAAKqjB,UACNrjB,KAAKsP,aAAaiK,gBAAgB,YAItCxV,aAAW/D,KAAKsP,cAAgB+T,SAAY,KAEhDrjB,KAAK0pC,kBAETnB,EAAWroC,UAAUwpC,eAAiB,WAC7B1pC,KAAKojB,YAAapjB,KAAK8iB,cAAiB9iB,KAAKqjB,SAQzCrjB,KAAK8iB,cACV7b,eAAajH,KAAK8iB,aAAaC,YA9L5B,eAsL6B,KAA5B/iB,KAAKsP,aAAanJ,MAClBc,eAAajH,KAAK8iB,aAAaC,YAvLhC,eA0LC7b,YAAUlH,KAAK8iB,aAAaC,YA1L7B,gBAiMXwlB,EAAWroC,UAAUipC,gBAAkB,WACnCnpC,KAAK2pC,UAAU3pC,KAAK4pC,QAAS5pC,KAAK6pC,SAC7B3mC,oBAAkBlD,KAAKmG,SACxBnG,KAAK8pC,gBACL9pC,KAAKwnB,SAASlO,UACdtZ,KAAKwG,aAAexG,KAAKwnB,SAAW,MAElCrR,OAAOnW,KAAKmG,QAAyB,OAAfnG,KAAKmG,OACxBnG,KAAK+pC,eAAe/pC,KAAKmG,SAEtBnG,KAAKslB,YACLtlB,KAAKgqC,aAEThqC,KAAKiqC,UAAY,KACjBjqC,KAAK6pC,QAAU7pC,KAAKwpC,cAAcxpC,KAAK6pC,SACvC7pC,KAAK4pC,QAAU5pC,KAAKwpC,cAAcxpC,KAAK4pC,SACvC5pC,KAAKooC,gBAAkBpoC,KAAKiyB,iBAC5BjyB,KAAK2pC,UAAU3pC,KAAK4pC,QAAS5pC,KAAK6pC,WAI9CtB,EAAWroC,UAAUyuB,oBAAsB,SAAUruB,EAAQ40B,GACzD,GAAIzd,GAAOnX,EAAO6D,aAAa,QAAU7D,EAAO6D,aAAa,QAAU7D,EAAO6D,aAAa,KAC3F+wB,GAAM9wB,aAAa,OAAQqT,GAC3BnX,EAAOiZ,gBAAgB,OAEvB,KAAK,GADDxV,IAAc,WAAY,gBAAiB,QACtC/C,EAAI,EAAGA,EAAI+C,EAAWpD,OAAQK,IACnC,IAAIkC,oBAAkB5C,EAAO6D,aAAaJ,EAAW/C,KAArD,CAGA,GAAIouB,GAAO9uB,EAAO6D,aAAaJ,EAAW/C,GAC1Ck0B,GAAM9wB,aAAaL,EAAW/C,GAAIouB,GAClC9uB,EAAOiZ,gBAAgBxV,EAAW/C,MAG1CunC,EAAWroC,UAAUuiB,WAAa,WAC9BziB,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKkqC,eAAiB,GAAIlnC,wBAAqB,MAC/ChD,KAAKmqC,kBACLnqC,KAAKujB,kBAAkBvjB,KAAKmG,OAE5BnG,KAAKoD,eAAgB+C,MAAOnG,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAapqC,KAAKmG,WAAY,GAC5FnG,KAAKoD,eAAgBZ,IAAKxC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAapqC,KAAKwC,SAAU,GACxFxC,KAAKoD,eAAgBX,IAAKzC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAapqC,KAAKyC,SAAU,GACxFzC,KAAKoD,eAAgBinC,SAAUrqC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAapqC,KAAKqqC,cAAe,GAC1E,OAApBrqC,KAAK0zB,YACL1zB,KAAK2uB,oBAAoB3uB,KAAK6B,QAAS7B,KAAKsP,cAEhDtP,KAAKgpB,+BACLhpB,KAAKsqC,iBAAgB,EACrB,IAAIC,IAAe1mB,YAAa7jB,KAAK6jB,YACrC7jB,MAAKwkB,KAAO,GAAIjY,QAAK,aAAcg+B,EAAYvqC,KAAKiD,QACpDjD,KAAKoD,eAAgBygB,YAAa7jB,KAAK6jB,aAAe7jB,KAAKwkB,KAAKtY,YAAY,iBAAkB,GAC9FlM,KAAKiqC,UAAYjqC,KAAKoG,eAAepG,KAAKmG,OAC1CnG,KAAK4pC,QAAU5pC,KAAKoG,eAAepG,KAAKwC,KACxCxC,KAAK6pC,QAAU7pC,KAAKoG,eAAepG,KAAKyC,KACxCzC,KAAKwqC,WAAaxqC,KAAKyqC,cAAgBzqC,KAAK0qC,gBAAiB,EAC7D1qC,KAAK21B,YAAc31B,KAAK2qC,iBAAmB3qC,KAAK4qC,SAAW,KACtD1nC,oBAAkBlD,KAAK6B,QAAQsC,aAAa,QAO7CnE,KAAK6B,QAAQmH,GAAK0M,cAAY,kBACN,OAApB1V,KAAK0zB,YACL3vB,aAAW/D,KAAKsP,cAAgBtG,GAAMhJ,KAAK6B,QAAQmH,GAAK,YARpC,OAApBhJ,KAAK0zB,aACL1zB,KAAKsP,aAAatG,GAAKhJ,KAAK6B,QAAQsC,aAAa,MAAQ,UAU7DjB,oBAAkBlD,KAAKsP,aAAanL,aAAa,UACjDJ,aAAW/D,KAAKsP,cAAgBmI,KAAQzX,KAAK6B,QAAQmH,KAErDhJ,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,oBAIpB6kB,EAAWroC,UAAUiqC,gBAAkB,WACnC,GAAInqC,KAAKwS,OACL,GAA2B,gBAAhBxS,MAAKwS,OACZxS,KAAK0lB,aAAe1lB,KAAKwS,WAExB,IAAKtP,oBAAkBlD,KAAKwS,OAAON,WAAsC,KAAzBlS,KAAKwS,OAAON,SAK7DlS,KAAK0lB,aAAe1lB,KAAK+C,UAAUmjB,gBAAiBje,KAAM,OAAQiK,SAAU,cALE,CAC9E,GAAIod,GAAiBtvB,KAAKwS,OAAON,QACjClS,MAAK0lB,aAAe1lB,KAAK+C,UAAUmjB,gBAAiBje,KAAM,OAAQiK,SAAUod,QAOhFtvB,MAAK0lB,aAAe,MAG5B6iB,EAAWroC,UAAUkG,eAAiB,SAAUD,GAC5C,OAASjD,oBAAkBiD,IAAUA,YAAiBrD,QAASqT,OAAOhQ,GAAUA,EAAQ,MAE5FoiC,EAAWroC,UAAU8oC,mBAAqB,WAClChpC,KAAKykB,gBAAkB5gB,UAAQC,WAC/B9D,KAAKmd,UAAY,kBAErB,IAAI0tB,GAAyB7qC,KAAKmd,SAC9BwH,GAAoB3kB,KAAKwjB,UACxBtgB,qBAAkBlD,KAAKmd,WAA+B,KAAlBnd,KAAKmd,WAC1C0tB,EAA0B7qC,KAAKmd,SAASS,QAAQ,OAAQ,KAAMC,QAElE7d,KAAK8iB,aAAeF,QAAMe,aACtB9hB,QAAS7B,KAAKsP,aACdsV,gBAAiBD,EACjBhC,eAAgB3iB,KAAK2iB,eACrBkC,YACIxB,SAAUrjB,KAAKqjB,SACfQ,YAAa7jB,KAAK6jB,YAClB1G,SAAU0tB,EACVpmC,QAASzE,KAAKyE,QACdb,UAAW5D,KAAK4D,UAChBkhB,gBAAiB9kB,KAAK8kB,iBAE1B9B,SAAU,4CACXhjB,KAAKsE,eACRtE,KAAK8iB,aAAaC,UAAUlc,MAAMoe,MAAQjlB,KAAKglB,SAAShlB,KAAKilB,OAC7DlhB,aAAW/D,KAAKsP,cACZw7B,oBAAqB,OAAQnjC,SAAY,IACzCuc,gBAAiB,QAASrb,KAAQ,WAAYsb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAC7Dld,gBAAiB,QAASmd,eAAgB,UAEzCvkB,KAAK+qC,cAAc/qC,KAAKgrC,aACzBpoB,QAAMsC,eAAgBre,MAAS7G,KAAKgrC,YAAchrC,KAAKsP,cAE3DpI,YAAUlH,KAAK8iB,aAAaC,WA3VjB,mBA6VfwlB,EAAWroC,UAAU+qC,sBAAwB,WACzC,GAEIC,GAFU,GAAIloC,wBAAqBhD,KAAKiD,QAEnBijB,gBAAiBhU,SAAU,OAOpD,OANIlS,MAAK+qC,cAAc/qC,KAAK0lB,cACbwlB,EAAa,IAAMlrC,KAAKmrC,WAAW,QAGnCnrC,KAAK0lB,cAIxB6iB,EAAWroC,UAAUqjB,kBAAoB,SAAUpd,GAC/C,GAAIilC,IAAY,CAChB,IAAqB,gBAAVjlC,KAAuBjD,oBAAkBiD,GAAQ,CACxD,GAAIigB,GAAcjgB,CACS,iBAAhBigB,KACPA,EAAcA,EAAYvI,OAE9B,IAAIwtB,GAAkB,KAClBC,EAAW,IAuBf,IAtBqB,gBAAVnlC,GACPigB,EAAcjgB,EAAMY,WAEE,gBAAVZ,KACP,mBAAqBogB,KAAKpgB,KAC3BklC,EAAkBrrC,KAAKurC,eAAevrC,KAAKwpC,cAAcrjC,IACrDjD,oBAAkBmoC,KAClBA,EAAkBrrC,KAAKoG,eAAepG,KAAK+C,UAAUoP,UAAUiU,GAC3D5T,OAAQxS,KAAKirC,wBAAyBhjC,KAAM,cAE5C/E,oBAAkBmoC,KAClBA,EAAkBrrC,KAAKoG,eAAepG,KAAK+C,UAAUoP,UAAUiU,GAC3D5T,OAAQxS,KAAK0lB,aAAczd,KAAM,WAAYiK,SAAU,aAM3Eo5B,EAAWtrC,KAAK+C,UAAUoP,UAAUiU,GAChC5T,OAAQxS,KAAKirC,wBAAyBhjC,KAAM,aAEhDojC,GAAoBnoC,oBAAkBooC,IAAaA,YAAoBxoC,QAASqT,OAAOm1B,GAAaA,EAAW,KAC3GpoC,oBAAkBmoC,IAAoBjlB,EAAYxI,QAAQ,MAAO,IAAIjd,OAAQ,CAC7E,GACI2lB,GAAiB,IAIrBA,GAAiB,8IAFF,kJAGIC,KAAKH,KAAiBE,EAAeC,KAAKH,IACrD,mBAAqBG,KAAKpgB,IAAWgQ,OAAO,GAAIrT,MAAK,GAAKsjB,IAC9DglB,GAAY,EAGZC,EAAkB,GAAIvoC,MAAK,GAAKsjB,GAGpCglB,GACKprC,KAAKslB,aACNtlB,KAAKgiB,mBAAqBoE,GAE9BpmB,KAAKoD,eAAgB+C,MAAO,OAAQ,GACpCnG,KAAKiqC,UAAY,OAGjBjqC,KAAKoD,eAAgB+C,MAAOklC,IAAmB,GAC/CrrC,KAAKiqC,UAAYjqC,KAAKmG,SAIlCoiC,EAAWroC,UAAUoX,gBAAkB,WACnC,GAAIC,KAIJ,OAHIvX,MAAKwjB,YACLjM,EAAQ3M,MAAOpB,MAAOxJ,MAAOwX,OAAQ,mBAElCD,GAEXgxB,EAAWroC,UAAUirC,WAAa,SAAUljC,GAQxC,MANoB,OAAhBjI,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OACPmH,WAAS,oBAAqBC,0BAG9BrK,KAAKwrC,qBAAqBjhC,WAAU,GAAKvK,KAAKiD,SAK5EslC,EAAWroC,UAAUoZ,QAAU,WAC3BtZ,KAAKuP,OACDvP,KAAK8kB,kBACL9kB,KAAKinB,YAAciB,SAASjF,uBAAuB,gBAAgB,IAEvEjjB,KAAKynB,cACL,IAAIgkB,IACAX,oBAAqB,OAAQnjC,SAAY,IACzCuc,gBAAiB,QAASrb,KAAQ,WAAYsb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAC7Dld,gBAAiB,OAAQmd,eAAgB,QAEzCvkB,MAAKsP,eACLsT,QAAM0L,iBAAiBmd,EAAezrC,KAAKsP,cACnB,OAApBtP,KAAK0zB,YACL1zB,KAAK8iB,aAAaC,UAAUiH,cAAcxhB,YAAYxI,KAAKsP,cAE1DpM,oBAAkBlD,KAAK2zB,aAAaxvB,aAAa,aAIlDnE,KAAKsP,aAAaiK,gBAAgB,YAHlCvZ,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,UAKpDjE,KAAKwuB,uBACLxuB,KAAK0rC,eAAe1rC,KAAKsP,eACzBtP,KAAKsP,aAAa5L,UAAUmG,OAAO,WAC/B3G,oBAAkBlD,KAAK2zB,aAAaxvB,aAAa,cACjDye,QAAMuN,YAAW,EAAMnwB,KAAKsP,aAActP,KAAK2iB,iBAGnD3iB,KAAK8iB,aAAaC,WAClB7X,SAAOlL,KAAK8iB,aAAaC,WAE7B/iB,KAAK8iB,aAAe9iB,KAAKwG,aAAexG,KAAK2zB,iBAAevb,GAC5DpY,KAAKiyB,cAAgBjyB,KAAKooC,gBAAkBpoC,KAAKwoC,yBAC5CtlC,oBAAkBlD,KAAK2rC,WACxB3rC,KAAK2rC,WAET/oB,QAAMtJ,SACFzX,QAAS7B,KAAKsP,aACdqT,eAAgB3iB,KAAK2iB,eACrBkC,WAAY7kB,KAAK6kB,YAClB7kB,KAAKinB,aACRtlB,EAAOzB,UAAUoZ,QAAQvX,KAAK/B,MAC1BA,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKqd,kBAExDrd,KAAK2rC,SAAW,KAChB3rC,KAAK+oC,mBAAqB,KAC1B/oC,KAAK8a,gBAAkB,KACvB9a,KAAK+iC,QAAU,KACf/iC,KAAKiyB,cAAgB,MAEzBsW,EAAWroC,UAAUsuB,qBAAuB,WAExC,IAAK,GADDod,MACK5qC,EAAI,EAAGA,EAAIhB,KAAKsP,aAAavL,WAAWpD,OAAQK,IACrD4qC,EAAa5qC,GAAKhB,KAAKsP,aAAavL,WAAW/C,GAAGyW,IAEtD,KAASzW,EAAI,EAAGA,EAAI4qC,EAAajrC,OAAQK,IAChCkC,oBAAkBlD,KAAK2zB,aAAaxvB,aAAaynC,EAAa5qC,MAO/DhB,KAAKsP,aAAaiK,gBAAgBqyB,EAAa5qC,IACT,UAAlC4qC,EAAa5qC,GAAGmJ,gBAChBnK,KAAKsP,aAAanJ,MAAQ,MAR9BnG,KAAKsP,aAAalL,aAAawnC,EAAa5qC,GAAIhB,KAAK2zB,aAAaxvB,aAAaynC,EAAa5qC,KACtD,UAAlC4qC,EAAa5qC,GAAGmJ,gBAChBnK,KAAKsP,aAAanJ,MAAQnG,KAAK2zB,aAAaxvB,aAAaynC,EAAa5qC,OAYtFunC,EAAWroC,UAAU4pC,cAAgB,WACjC9pC,KAAKwG,aAAexG,KAAKsE,cAAc,OACnCuD,UAAW1G,EAAO,WAClB6G,OAASgB,GAAMhJ,KAAK6B,QAAQmH,GAAK,SAAUnC,MAAS,uBAExD7G,KAAKwG,aAAapC,aAAa,aAAcpE,KAAK6B,QAAQmH,IAC1DhJ,KAAKwG,aAAapC,aAAa,OAAQ,UAClClB,oBAAkBlD,KAAKmd,YACxBnd,KAAKwG,aAAaqB,WAAa,IAAM7H,KAAKmd,WAEzCja,oBAAkBlD,KAAKioC,OAASjoC,KAAKioC,KAAO,IAC7CjoC,KAAK6rC,eACLC,UAAQ9rC,KAAK+rC,aAAc/rC,KAAKwG,eAEpCxG,KAAKgsC,eACLhsC,KAAKm3B,cACLjsB,SAAOlL,KAAKwG,eAEhB+hC,EAAWroC,UAAU+rC,eAAiB,WAClC,GAAItK,GAAS/6B,SAhhBA,QAghByB,IAClCslC,EAAclsC,KAAKwG,aAAao7B,wBAAwBD,MAC5D,OAAOuK,GAAcvK,EAASA,EAASuK,GAE3C3D,EAAWroC,UAAU2rC,aAAe,WAChC7rC,KAAK8nC,kBACL9nC,KAAKojC,gBACL,IAAI+I,IAAgBhkC,SAAU,IAAKC,SAAU,eAC7CpI,MAAK2rC,SAAWzjC,eAAalI,KAAK+rC,YAAaI,GAC/CnsC,KAAKiyB,cAAgBjyB,KAAK+rC,YAAY9gC,iBAAiB,iBAE3Ds9B,EAAWroC,UAAUi3B,YAAc,WAC/B,GAAIr1B,GAAQ9B,IAsCZ,IArCAA,KAAKosC,eAAiBpsC,KAAK8iB,aAAaC,UAAU6e,wBAClD5hC,KAAKwnB,SAAW,GAAIwD,SAAMhrB,KAAKwG,cAC3Bye,MAAOjlB,KAAKqsC,cAAcrsC,KAAKilB,OAC/Bne,OAAQ9G,KAAK8G,OACbykB,WAAY,WACZJ,SAAUtnB,UAAQC,UAAasnB,EAAG,SAAUC,EAAG,WAAeD,EAAG,OAAQC,EAAG,UAC5EG,UAAW3nB,UAAQC,UAAasnB,EAAG,MAAOC,EAAG,QAAYD,EAAG,OAAQC,EAAG,QACvEznB,UAAW5D,KAAK4D,UAChBsnB,SAAUrnB,UAAQC,SAAWokB,SAAS4C,KAAO9qB,KAAK8iB,aAAaC,UAC/DuI,QAphBI,EAqhBJG,KAAM,WACF3pB,EAAM0E,aAAaK,MAAMylC,WAAa,UACtCplC,YAAUpF,EAAMghB,aAAaE,QAAQ,IAjiBtC,aAkiBAmJ,MAAO,WACNllB,eAAanF,EAAMghB,aAAaE,QAAQ,IAniBzC,YAoiBClhB,EAAM0hC,mBACN1hC,EAAMwN,aAAaiK,gBAAgB,yBACnC1P,SAAO/H,EAAM0lB,SAAS3lB,SACtBC,EAAM0lB,SAASlO,UACfxX,EAAM0E,aAAaiF,UAAY,GAC/B3J,EAAMiqC,YAAcjqC,EAAM0E,aAAe1E,EAAMihC,YAAU3qB,IAC1DkU,mBAAoB,WACdzoB,UAAQC,UACThC,EAAMyN,UAIb1L,UAAQC,WACT9D,KAAKwnB,SAASgE,WAAcJ,EAAG,OAAQC,EAAG,SAE1CxnB,UAAQC,UAAY9D,KAAKykB,gBACzBzkB,KAAKwnB,SAAS3lB,QAAQgF,MAAM0lC,UAAY,OACxCvsC,KAAKwnB,SAAS3lB,QAAQgF,MAAMoe,MAAQ,QAGpCjlB,KAAKwnB,SAAS3lB,QAAQgF,MAAM0lC,UAhkBnB,QAkkBT1oC,UAAQC,UAAY9D,KAAKykB,eAAgB,CACzC,GAAIoG,GAAc7qB,KAAKsE,cAAc,OAASuD,UAAW,mBACrDy7B,EAAiBtjC,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7Dy7B,GAAet3B,YAAc,aAC7B,IAAI+gB,GAAiB/sB,KAAKsE,cAAc,QAAUuD,UAAW,iBAC7DwB,gBAAa1F,IAAIopB,EAAgB,uBAAwB/sB,KAAKwsC,sBAAuBxsC,MACrF6qB,EAAYriB,YAAYukB,GACxBlC,EAAYriB,YAAY86B,GACxBtjC,KAAKwG,aAAa0mB,aAAarC,EAAa7qB,KAAKwG,aAAasjB,qBAGtEye,EAAWroC,UAAUssC,sBAAwB,SAAU/+B,GACnDzN,KAAKuP,QAGTg5B,EAAWroC,UAAUkpC,kBAAoB,SAAUjjC,GAC/C,MAAIjD,qBAAkBlD,KAAKoG,eAAeD,IAC/B,KAGAnG,KAAK+C,UAAUqP,WAAWjM,GAAS+L,SAAU,SAAUjK,KAAM,UAG5EsgC,EAAWroC,UAAUspC,cAAgB,SAAU1+B,GAC3C,IAAK9K,KAAK+qC,cAAcjgC,GAAO,CAC3B,GAAI0a,GAAYxlB,KAAKysC,cAAc3hC,GAC/B3E,GAASnG,KAAK+qC,cAAc/qC,KAAKiqC,UACrC,IAAIjqC,KAAKoG,eAAeof,GAAY,CAChC,GAAI/V,GAAOtJ,EAAQnG,KAAKiqC,UAAUl5B,UAAYy2B,EAC1C5yB,EAAQzO,EAAQnG,KAAKiqC,UAAU/4B,WAAau2B,EAC5CjyB,EAAOrP,EAAQnG,KAAKiqC,UAAU76B,cAAgBs4B,CAClD,OAAO,IAAI5kC,MAAK0S,EAAMZ,EAAOnF,EAAM+V,EAAUpU,WAAYoU,EAAUnU,aAAcmU,EAAUlU,eAGnG,MAAO,OAEXi3B,EAAWroC,UAAU0jB,6BAA+B,WAChD,IAAK1gB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACb,IAAIo9B,EAAkBh0B,QAAQrT,IAAQ,EAClC,GAAY,UAARA,EAAiB,CACjB,GAAImsC,GAAuB1sC,KAAK4oB,eAAe,GAAKroB,GAAKqd,QAAQ,OAAQ,KAAMC,MACnD,MAAxB6uB,GACAxlC,YAAUlH,KAAK8iB,aAAaC,WAAY2pB,EAAoBv+B,MAAM,UAGrE,IAAY,UAAR5N,EAAiB,CACtB,GAAIosC,GAAY3sC,KAAK8iB,aAAaC,UAAU5e,aAAa5D,EACzDosC,GAAazpC,oBAAkBypC,GAC3B3sC,KAAK4oB,eAAe,GAAKroB,GADgBosC,EAAY3sC,KAAK4oB,eAAe,GAAKroB,GAElFP,KAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAKosC,OAG9C3sC,MAAK8iB,aAAaC,UAAU3e,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAM3FgoC,EAAWroC,UAAU8oB,6BAA+B,WAChD,IAAK9lB,oBAAkBlD,KAAK4oB,gBACxB,IAAK,GAAIpe,GAAK,EAAGC,EAAKhL,OAAOiL,KAAK1K,KAAK4oB,gBAAiBpe,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC1E,GAAIjK,GAAMkK,EAAGD,EACTo9B,GAAkBh0B,QAAQrT,GAAO,GACjCP,KAAKsP,aAAalL,aAAa7D,EAAKP,KAAK4oB,eAAe,GAAKroB,MAK7EgoC,EAAWroC,UAAU+oB,eAAiB,SAAU2jB,EAAaC,GACpD3pC,oBAAkB2pC,KACnBA,EAAeA,EAAYjvB,QAAQ,OAAQ,KAAMC,QAEhD3a,oBAAkB0pC,KACnBA,EAAeA,EAAYhvB,QAAQ,OAAQ,KAAMC,QAErD+E,QAAMsG,YAAY0jB,GAAc5sC,KAAK8iB,aAAaC,WAAY8pB,GAC1D7sC,KAAKwG,cACLoc,QAAMsG,YAAY0jB,GAAc5sC,KAAKwG,cAAeqmC,IAG5DtE,EAAWroC,UAAU4sC,iBAAmB,WACpC7lC,eAAajH,KAAK8iB,aAAaC,WAtpB3B,WAupBJhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,WAEpDgkB,EAAWroC,UAAUmpC,gBAAkB,SAAUvjB,GAC7C,GAAI3f,GAAQnG,KAAKwpC,cAAc1jB,EAC1B9lB,MAAK+sC,cAAc5mC,KAAWnG,KAAKgiB,oBACnChiB,KAAKwjB,YAAcxjB,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,gBACrDliB,KAAK8sC,oBAGL5lC,YAAUlH,KAAK8iB,aAAaC,WAhqB5B,WAiqBAhf,aAAW/D,KAAKsP,cAAgBiV,eAAgB,WAGxDgkB,EAAWroC,UAAUgpC,iBAAmB,YAC/BhmC,oBAAkBlD,KAAKioC,OAASjoC,KAAKioC,KAAO,EAC7CjoC,KAAK0rC,eAAe1rC,KAAK8iB,aAAaE,QAAQ,KAG9ChjB,KAAKgtC,mBAGbzE,EAAWroC,UAAU8sC,gBAAkB,WACnChtC,KAAKitC,gBAAgBjtC,KAAK8iB,aAAaE,QAAQ,KAC/ChjB,KAAKuP,QAETg5B,EAAWroC,UAAU+sC,eAAiB,SAAUprC,GAC5CqF,WAASrF,EArqBF,eAuqBX0mC,EAAWroC,UAAUwrC,cAAgB,SAAU7pC,GAC3CoF,cAAYpF,EAxqBL,eA0qBX0mC,EAAWroC,UAAUgtC,gBAAkB,WACnCltC,KAAKsP,aAAa69B,kBAAkB,EAAIntC,kBAAmBmG,MAAMxF,SAErE4nC,EAAWroC,UAAUktC,eAAiB,WAClCptC,KAAKsP,aAAa69B,kBAAmBntC,kBAAmBmG,MAAMxF,OAASX,kBAAmBmG,MAAMxF,SAEpG4nC,EAAWroC,UAAUmtC,gBAAkB,WACnC,GAAIC,EACJ,IAAoB,OAAhBttC,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OAC7BqqC,EAAWljC,WAAS,yBAA0BC,8BAE7C,CAGDijC,EAAWljC,WADG,QACqBpK,KAAKiD,OAFlB,2DAE4CsH,YAEtE,MAAO+iC,IAEX/E,EAAWroC,UAAUqtC,mBAAqB,WACtC,GAAIrY,GAASl1B,KAAkB,aAC3B0L,EAAQ,EACRnG,EAAM,CAKV,OAJK4Q,OAAM+e,EAAM9L,kBACb1d,EAAQwpB,EAAM9L,eACd7jB,EAAM2vB,EAAM7L,eAEP3d,MAAOqK,KAAKC,IAAItK,GAAQnG,IAAKwQ,KAAKC,IAAIzQ,KAEnDgjC,EAAWroC,UAAUstC,iBAAmB,WACpC,MAAKtqC,qBAAkBlD,KAAKwG,cAIjB,KAHAxG,KAAKwG,aAAayE,iBAAiB,cAMlDs9B,EAAWroC,UAAU6qC,cAAgB,SAAU5kC,GAC3C,SAAIjD,oBAAkBiD,IAA4B,gBAAVA,IAAuC,KAAjBA,EAAM0X,SAOxE0qB,EAAWroC,UAAU8kB,SAAW,SAAUC,GAUtC,MARIA,GADiB,gBAAVA,GACCmI,aAAWnI,GAEG,gBAAVA,GACHA,EAAMyF,MAAM,WAAczF,EAAQmI,aAAWnI,GAG9C,QAIhBsjB,EAAWroC,UAAUmsC,cAAgB,SAAUpnB,GAM3C,OALAA,EAAQjlB,KAAKglB,SAASC,IACZrR,QAAQ,MAAQ,IAEtBqR,GADiBjlB,KAAKosC,eAAennB,MAAQwoB,WAAWxoB,GAAS,KAC9Cle,WAAa,MAE7Bke,GAEXsjB,EAAWroC,UAAUykC,kBAAoB,WACrC,GAAI9iC,GAAU7B,KAAK8a,eACd5X,qBAAkBrB,GAGd7B,KAAKwG,cAAgBxG,KAAKoG,eAAepG,KAAKqqC,WACnDrqC,KAAK0tC,cAHL1tC,KAAK2tC,cAAc9rC,IAM3B0mC,EAAWroC,UAAUytC,cAAgB,SAAU9rC,GAC3C,GAAIsjC,GAAanlC,KAAKisC,iBAClB3G,EAAUzjC,EAAQojC,mBAClBtD,EAAS2D,EAAUA,EAAQC,UAAY1jC,EAAQ0jC,UAC/CC,EAAW3jC,EAAQ+/B,wBAAwBD,MAC1CA,GAAS9/B,EAAQ0jC,UAAaJ,EAC/BnlC,KAAKwG,aAAai/B,UAAYH,EAAW3D,GAAUwD,EArvB5C,EAqvBwEK,EArvBxE,GAqvBoG7D,EAG3G3hC,KAAKwG,aAAai/B,UAAY,GAGtC8C,EAAWroC,UAAUwtC,YAAc,WAC/B,GAAI7rC,EACJ,IAAKqB,oBAAkBlD,KAAKwG,cASxBxG,KAAKwG,aAAai/B,UAAY,MATS,CACvC,GAAImI,GAAQ5tC,KAAKwG,aAAayE,iBAAiB,eAC/C,IAAI2iC,EAAMjtC,OAAQ,CACd,GAAIktC,GAAc7tC,KAAKooC,gBAAgB,GACnC0F,EAAa9tC,KAAKwpC,cAAcxpC,KAAKoG,eAAepG,KAAKqqC,WAAWjwB,SACxEvY,GAAU+rC,EAAM73B,KAAKsL,OAAOysB,EAAaD,IAA4B,IAAZ7tC,KAAKioC,SAMjE/kC,oBAAkBrB,GAInB7B,KAAKwG,aAAai/B,UAAY,EAH9BzlC,KAAK2tC,cAAc9rC,IAM3B0mC,EAAWroC,UAAU6tC,QAAU,WAC3B,MAAQ7qC,qBAAkBlD,KAAKoG,eAAepG,KAAKmG,QAAW,GAAKnG,KAAKoK,SAASpK,KAAKmG,QAE1FoiC,EAAWroC,UAAUkK,SAAW,SAAUjE,GACtC,MAAQjD,qBAAkBlD,KAAKoG,eAAeD,IAAW,KAAOnG,KAAK+C,UAAUqP,WAAWjM,GACtFqM,OAAQxS,KAAKguC,iBAAkB/lC,KAAM,UAG7CsgC,EAAWroC,UAAU+tC,eAAiB,WAQlC,MANoB,OAAhBjuC,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OACjBmH,WAAS,oBAAqBC,0BAG9BrK,KAAKkuC,qBAAqB3jC,WAAU,GAAKvK,KAAKiD,SAIlEslC,EAAWroC,UAAU8tC,eAAiB,WAalC,MAXIhuC,MAAK+qC,cAAc/qC,KAAK0lB,cACJ,OAAhB1lB,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OACjBmH,WAAS,oBAAqBC,0BAG9BrK,KAAKwrC,qBAAqBjhC,WAAU,GAAKvK,KAAKiD,QAInDjD,KAAK0lB,cAIxB6iB,EAAWroC,UAAUiuC,cAAgB,WAQjC,MANoB,OAAhBnuC,KAAKiD,QAAmC,UAAhBjD,KAAKiD,OACjBmH,WAAS,qBAAsBC,0BAG/BD,WAAS,QAAepK,KAAKiD,OAAS,gDAAiDsH,aAI3Gg+B,EAAWroC,UAAUkuC,iBAAmB,SAAUjoC,GAC9C,MAAIjD,qBAAkBlD,KAAKoG,eAAeD,IAC/B,KAGAnG,KAAK+C,UAAUqP,WAAWjM,GAASqM,OAAQxS,KAAKmuC,gBAAiBlmC,KAAM,UAGtFsgC,EAAWroC,UAAUuoB,SAAW,SAAUtiB,GACtC,GAAI+T,GAAOla,KAAKqG,WAAWF,EACtBnG,MAAKslB,YAAetlB,KAAK+sC,cAAc7yB,GAOpCla,KAAK+qC,cAAc7wB,IACnBla,KAAKiqC,UAAY,KACjBjqC,KAAK0/B,eAAe1/B,KAAKmG,MAAOnG,KAAKwC,IAAKxC,KAAKyC,MAG/CzC,KAAKiqC,UAAYjqC,KAAKquC,oBAAoBn0B,IAXK,OAA/Cla,KAAKoG,eAAepG,KAAK2qC,oBACzB3qC,KAAKiqC,UAAYjqC,KAAK2qC,iBAAmB,MAE7C3qC,KAAK0/B,eAAe1/B,KAAKmG,MAAOnG,KAAKwC,IAAKxC,KAAKyC,MAWnDzC,KAAKkjB,aAAY,EAAMljB,KAAKiqC,YAEhC1B,EAAWroC,UAAUmuC,oBAAsB,SAAUloC,GACjD,MAAIjD,qBAAkBiD,GACX,KAEHA,IAAUnG,KAAK+tC,UAAa/tC,KAAKwpC,cAAcrjC,GAASnG,KAAKwpC,cAAcxpC,KAAKmG,QAE5FoiC,EAAWroC,UAAUouC,kBAAoB,WACrC1rB,QAAMqN,eAAejwB,KAAKwkB,KAAKtY,YAAY,eAAgBlM,KAAKsP,eAGpEi5B,EAAWroC,UAAU4jB,iBAAmB,SAAU3d,GAC9Cyc,QAAM6F,SAAStiB,EAAOnG,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK8kB,kBAEvEyjB,EAAWroC,UAAUooB,qBAAuB,SAAU7a,GAClDA,EAAEe,iBACFxO,KAAKuoB,eAAeC,kBAAkB,oBAE1C+f,EAAWroC,UAAUquC,aAAe,SAAU9gC,GACrCzN,KAAKyE,UAGNZ,UAAQC,UACR9D,KAAKsP,aAAalL,aAAa,WAAY,IAE/CqJ,EAAEe,iBACExO,KAAKw2B,cACLx2B,KAAKwuC,WAAW,EAAG/gC,IAGnBzN,KAAKsP,aAAaX,QAClB3O,KAAK2oB,KAAKlb,MAGlB86B,EAAWroC,UAAUuuC,iBAAmB,WAC/BzuC,KAAKyE,UAGLzE,KAAKqjB,WACNrjB,KAAKsP,aAAa69B,kBAAkB,EAAG,GACvC9jC,eAAa1F,IAAI3D,KAAKsP,aAAc,UAAWtP,KAAK2mB,eAAgB3mB,SAG5EuoC,EAAWroC,UAAUymB,eAAiB,SAAUtL,GAC5C,IAAKrb,KAAKqjB,SAAU,CAEhB,GADAhI,EAAM7M,iBACFxO,KAAKwjB,WAKL,MAJAnI,GAAM7M,qBACNxO,MAAKyjB,OAAO,oBACRC,OAAQ,kBAKZra,gBAAaQ,OAAO7J,KAAKsP,aAAc,UAAWtP,KAAK2mB,eACvD,IAAI+nB,GAAS1uC,KAAKutC,oBACK,KAAjBmB,EAAOhjC,OAAegjC,EAAOnpC,MAAQvF,KAAKsP,aAAanJ,MAAMxF,SAC3DX,KAAKsP,aAAanJ,MAAMxF,OAAS,IACjCX,KAAK2uC,cAAgB3uC,KAAK4uC,kBAE9B5uC,KAAKsP,aAAa69B,kBAAkBntC,KAAK2uC,cAAcjjC,MAAO1L,KAAK2uC,cAAcppC,QAKjGgjC,EAAWroC,UAAU0uC,eAAiB,WAClC,GAAIC,GAAQ,GAAIC,QAAO,kBACnB3gC,EAAQnO,KAAKsP,aAAanJ,MAAMgI,MAAM,GAC1CA,GAAMvD,KAAK,IACX,IAAI8jC,GAAS1uC,KAAKutC,qBACd7hC,EAAQ,EACRnG,EAAM,EACNwpC,GAAc,CAClB,IAAK/uC,KAAK0qC,eAqBNh/B,EAAQgjC,EAAOhjC,MACfnG,EAAMmpC,EAAOnpC,IACbvF,KAAK0qC,gBAAiB,MAtBtB,KAAK,GAAI1pC,GAAI,EAAGA,EAAImN,EAAMxN,OAAQK,IAK9B,GAJK6tC,EAAMtoB,KAAKpY,EAAMnN,MAClBuE,EAAMvE,EACN+tC,GAAc,GAEdA,EAAa,CACb,GAAIL,EAAOhjC,OAASA,GAASgjC,EAAOnpC,KAAOA,EAAK,CAE5CA,EAAMA,EACNvF,KAAK0qC,gBAAiB,CACtB,OAGAh/B,EAAQ1K,EAAI,EACZ+tC,GAAc,EAU9B,OAASrjC,MAAOA,EAAOnG,IAAKA,IAEhCgjC,EAAWroC,UAAUumB,aAAe,SAAUpL,GAC1C,IAAKrb,KAAKqjB,UAAYrjB,KAAKyE,QAIvB,OAHwB,UAAjB4W,EAAMnN,QAAuC,SAAjBmN,EAAMnN,QAAsC,QAAjBmN,EAAMnN,SAAwC,SAAjBmN,EAAMnN,QAAsC,QAAjBmN,EAAMnN,QAAqC,OAAjBmN,EAAMnN,QAAoC,SAAjBmN,EAAMnN,QAAuBlO,KAAKw2B,eAAkBx2B,KAAKwjB,aAC9NnI,EAAM7M,iBAEF6M,EAAMnN,QACV,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,OACIlO,KAAKw2B,gBACNx2B,KAAK8pC,gBACL9pC,KAAKwnB,SAASlO,UACdtZ,KAAKwnB,SAAWxnB,KAAKwG,aAAe,OAEpCxG,KAAKwjB,YAAexjB,KAAKqjB,UAAarjB,KAAKw2B,gBAC3Cnb,EAAM7M,iBACNxO,KAAKyjB,OAAO,kBACRC,OAAQ,iBACRjW,EAAG4N,KAGPrb,KAAKw2B,eACLx2B,KAAKgvC,WAAW3zB,EAEpB,MACJ,KAAK,QACGrb,KAAKwqC,YACLxqC,KAAK8a,gBAAkB9a,KAAKiyB,cAAcjyB,KAAK21B,aAC/C31B,KAAK2qC,iBAAmB,GAAI7nC,MAAK9C,KAAKooC,gBAAgBpoC,KAAK21B,cAC3D31B,KAAK00B,YAAY10B,KAAK2qC,iBAAkBtvB,IAGxCrb,KAAK00B,YAAY10B,KAAKsP,aAAanJ,MAAOkV,GAE9Crb,KAAKuP,OACLvP,KAAKwqC,YAAa,EACdxqC,KAAKw2B,eACLnb,EAAMuM,iBAEV,MACJ,KAAK,OACD5nB,KAAK2oB,KAAKtN,EACV,MACJ,KAAK,SACDrb,KAAK8jB,iBAAiB9jB,KAAKivC,YAAYjvC,KAAKmG,QACxCnG,KAAKwjB,aACAxjB,KAAKmG,OACNnG,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAE/BliB,KAAKkvC,cAETlvC,KAAKmvC,cAAcnvC,KAAKmG,OACxBnG,KAAKuP,MACL,MACJ,KAAK,QACDvP,KAAKuP,MACL,MACJ,KAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,WACIvP,KAAKw2B,gBAAiBx2B,KAAKwjB,YAAexjB,KAAKqjB,YACN,IAArCrjB,KAAKsP,aAAa8Z,gBAAwBppB,KAAKsP,aAAa+Z,eAAiBrpB,KAAKsP,aAAanJ,MAAMxF,QACrGX,KAAKsP,aAAa+Z,eAAiBrpB,KAAKsP,aAAanJ,MAAMxF,QAA2B,QAAjB0a,EAAMnN,QACtC,IAArClO,KAAKsP,aAAa8Z,gBAAyC,aAAjB/N,EAAMnN,QAA4C,SAAjBmN,EAAMnN,QAAsC,UAAjBmN,EAAMnN,SAC7GmN,EAAM7M,iBAEVxO,KAAKyjB,OAAO,kBAAoBC,OAAQ,iBACpCjW,EAAG4N,IAGX,MACJ,SACIrb,KAAKwqC,YAAa,IAKlCjC,EAAWroC,UAAUgiC,aAAe,SAAU7mB,GAC1C,GAAI/a,GAAS+a,EAAM/a,OACf8hC,EAAKpiC,KAAK8a,gBAAkBvW,UAAQjE,EAAQ,eAChDN,MAAKovC,aAAahN,EAAI/mB,GAClB+mB,GAAMA,EAAG1+B,UAAU+I,SA5gCf,gBA6gCJzM,KAAKuP,QAGbg5B,EAAWroC,UAAUsuC,WAAa,SAAUa,EAAO5hC,GAC/C,GAAI3L,GAAQ9B,IACZ,IAAIA,KAAKw2B,eAAiBx2B,KAAKwG,aAAc,CACzC,GAAIgD,IACAgkB,MAAOxtB,KAAKwnB,SACZnM,MAAO5N,GAAK,KACZggB,QAAQ,EACRhW,KAAM,OAEVxQ,gBAAaihB,SAAS4C,MAthCnB,mBAuhCH9qB,KAAKkb,QAAQ,QAAS1R,EAAM,SAAUA,GAClC,IAAKA,EAAKikB,OAAQ,CACd,GAAI6hB,IACA73B,KAAM,UACNtP,SA5hCA,GA6hCAknC,MAAOA,GAAgB,EAE3BvtC,GAAM0lB,SAASjY,KAAK,GAAIue,aAAUwhB,IAClCroC,eAAanF,EAAMghB,aAAaC,YApiChC,gBAqiCAhf,aAAWjC,EAAMwN,cAAgB4U,gBAAiB,UAClDpiB,EAAMwN,aAAaiK,gBAAgB,aACnCzX,EAAMwN,aAAaiK,gBAAgB,iBACnCzX,EAAMwN,aAAaiK,gBAAgB,yBACnClQ,eAAaQ,OAAOqe,SAAU,uBAAwBpmB,EAAMytC,sBAE5D1rC,UAAQC,UAAYhC,EAAM4E,QAC1B5E,EAAM4E,MAAMG,MAAMkkB,QAAU,OAC5BjpB,EAAM4E,MAAMynB,UAAY,GACxBrsB,EAAM4E,MAAQ,MAEd7C,UAAQC,WACHZ,oBAAkBpB,EAAM0tC,uBACzB1tC,EAAM0tC,oBAAoB3lC,SAC1B/H,EAAM0tC,oBAAsB,OAGhC3rC,UAAQC,UAAYhC,EAAMshB,YAActhB,EAAMuhB,UAC9CvhB,EAAMwN,aAAaiK,gBAAgB,kBAKvC1V,WAAQC,UAAY9D,KAAKojB,YAAcpjB,KAAKqjB,UAC5CrjB,KAAKsP,aAAaiK,gBAAgB,aAI9CgvB,EAAWroC,UAAUuvC,mBAAqB,WAClCzvC,KAAKwG,eACLxG,KAAKwG,aAAaK,MAAMylC,WAAa,SACrCtsC,KAAKwG,aAAaK,MAAM6oC,IAAM,UAC9B1vC,KAAKwG,aAAaK,MAAMgiC,KAAO,UAC/B7oC,KAAKwG,aAAaK,MAAMoe,MAAQ,MAChCjlB,KAAKwG,aAAaK,MAAM86B,OAAS,QAGzC4G,EAAWroC,UAAUyvC,iBAAmB,SAAUt0B,EAAOu0B,GACrD,GAAK5vC,KAAKslB,YAAetlB,KAAK+sC,cAAc/sC,KAAK2qC,kBAY7C,GAAKiF,EAKA,CACD,GAAIzpC,GAAQnG,KAAKwpC,cAAc,GAAI1mC,MAAK9C,KAAKooC,gBAAgBpoC,KAAK21B,gBAC7D31B,KAAK4qC,WAAczkC,GACpBnG,KAAK6vC,aAAax0B,EAAOlV,QAPxBnG,KAAK8vC,YAAc9vC,KAAKsP,aAAanJ,OAAUjD,oBAAkBlD,KAAKoG,eAAepG,KAAKmG,UAC3FnG,KAAK6vC,aAAax0B,EAAOrb,KAAKquC,oBAAoBruC,KAAKsP,aAAanJ,YAbzB,QAA/CnG,KAAKoG,eAAepG,KAAK2qC,oBACzB3qC,KAAKiqC,UAAYjqC,KAAK2qC,iBAAmB,MAE7C3qC,KAAKoD,eAAgB+C,MAAOnG,KAAKquC,oBAAoBruC,KAAKsP,aAAanJ,SAAU,GACjFnG,KAAKiqC,UAAYjqC,KAAK2qC,iBAAmB3qC,KAAKquC,oBAAoBruC,KAAKsP,aAAanJ,OACpFnG,KAAK8vC,UAAY9vC,KAAKsP,aAAanJ,OAC9BnG,KAAK4qC,WAAc5qC,KAAKmG,OACzBnG,KAAKsf,YAAYjE,IAiB7BktB,EAAWroC,UAAUqiC,YAAc,SAAUlnB,GACzC,GAAI00B,GAAYxrC,UAAQ8W,EAAM/a,OAAQ,eACtCN,MAAKgwC,SAASD,EAzmCV,YA2mCRxH,EAAWroC,UAAU8vC,SAAW,SAAU5N,EAAIv6B,GACtC7H,KAAKyE,SAAWzE,KAAKiwC,UAAU7N,KAAQA,EAAG1+B,UAAU+I,SAAS5E,KAC7D7H,KAAKkwC,YAAYroC,GACjBX,YAAUk7B,GAAKv6B,GA7mCV,iBA8mCDA,GACAu6B,EAAGh+B,aAAa,gBAAiB,UAI7CmkC,EAAWroC,UAAUkvC,aAAe,SAAUhN,EAAI/mB,GAC1Crb,KAAKiwC,UAAU7N,KACfpiC,KAAKqG,WAAW+7B,EAAGj+B,aAAa,eAC5BnE,KAAKwjB,YACLxjB,KAAKkvC,aAETlvC,KAAK8a,gBAAkBsnB,EACvBpiC,KAAK21B,YAAc/1B,MAAMM,UAAU8K,MAAMjJ,KAAK/B,KAAKiyB,eAAere,QAAQwuB,GAC1EpiC,KAAK2qC,iBAAmB,GAAI7nC,MAAK9C,KAAKooC,gBAAgBpoC,KAAK21B,cAC3DzuB,YAAUlH,KAAK8a,iBA9nCZ,YA+nCH9a,KAAK8a,gBAAgB1W,aAAa,gBAAiB,QACnDpE,KAAK2vC,iBAAiBt0B,GAAO,KAGrCktB,EAAWroC,UAAUsiC,aAAe,WAChCxiC,KAAKkwC,YAnoCD,YAqoCR3H,EAAWroC,UAAUiwC,cAAgB,WACJ,eAAzBnwC,KAAKyD,iBAAoCI,UAAQC,UAIjD9D,KAAKuP,QAGbg5B,EAAWroC,UAAUypC,UAAY,SAAUyG,EAAQC,GAC3CntC,oBAAkBlD,KAAKoG,eAAegqC,MACtCpwC,KAAK4pC,QAAU5pC,KAAKwpC,cAAc,gBAElCtmC,oBAAkBlD,KAAKoG,eAAeiqC,MACtCrwC,KAAK6pC,QAAU7pC,KAAKwpC,cAAc,iBAI1CjB,EAAWroC,UAAUw/B,eAAiB,SAAU4Q,EAASF,EAAQC,GAC7D,GAAIlqC,GAAQmqC,YAAmBxtC,MAAOwtC,EAAUtwC,KAAKwpC,cAAc8G,EAYnE,OAXKptC,qBAAkBlD,KAAKoG,eAAeD,KAGhCnG,KAAKysC,cAAczsC,KAAKopC,kBAAkBppC,KAAK4pC,WACpD5pC,KAAKysC,cAAczsC,KAAKopC,kBAAkBppC,KAAK6pC,WACjD7pC,KAAKgtC,kBAJLsD,EAAUtwC,KAAKuwC,gBAAgBvwC,KAAK4pC,QAAS5pC,KAAK6pC,QAASyG,EAASnqC,GAMpEnG,KAAKslB,aACLgrB,EAAUtwC,KAAK+pC,eAAeuG,GAAWA,EAAU,MAEvDtwC,KAAKqpC,gBAAgBiH,GACdA,GAEX/H,EAAWroC,UAAU6pC,eAAiB,SAAU5jC,GAC5C,GAAInG,KAAKwoC,sBAAsB7nC,OAAS,EAAG,CACvC,GAAIX,KAAKwoC,sBAAsB7nC,SAAWX,KAAKooC,gBAAgBznC,OAC3D,OAAO,CAGX,KAAK,GADDuZ,GAAO/T,YAAiBrD,MAAO9C,KAAKivC,YAAY9oC,GAASA,EACpDQ,EAAQ,EAAGA,EAAQ3G,KAAKwoC,sBAAsB7nC,OAAQgG,IAC3D,GAAIuT,IAASla,KAAKwoC,sBAAsB7hC,GACpC,OAAO,EAInB,OAAO,GAEX4hC,EAAWroC,UAAU6sC,cAAgB,SAAUjnB,GAC3C,IAAK9lB,KAAKslB,WAAY,CAClB,IAAItlB,KAAK+pC,eAAejkB,GAiBpB,OAAO,CAhBP,IAAI3f,GAAkCnG,KAAKurC,eAAevrC,KAAKwpC,cAAc1jB,IAEzE0qB,EAAWxwC,KAAKurC,eAAevrC,KAAKwpC,cAAcxpC,KAAK6pC,UACvD4G,EAAWzwC,KAAKurC,eAAevrC,KAAKwpC,cAAcxpC,KAAK4pC,SAC3D,IAAK1mC,oBAAkBlD,KAAKoG,eAAeD,KAMvC,UAA+D,KAA5BnG,KAAKsP,aAAanJ,MACjD,OAAO,MANX,iBACI,OAAO,EAavB,OAAO,GAEXoiC,EAAWroC,UAAUqwC,gBAAkB,SAAUpkC,EAASC,EAASkkC,EAASxqB,GACxE,GAAI0qB,GAAWxwC,KAAKysC,cAAczsC,KAAKopC,kBAAkBh9B,IACrDqkC,EAAWzwC,KAAKysC,cAAczsC,KAAKopC,kBAAkBj9B,IACrDhG,EAAQnG,KAAKysC,cAAczsC,KAAKopC,kBAAkBtjB,GACtD,IAAI9lB,KAAKslB,WAAY,CACjB,IAAKmrB,GAAYD,EAOb,MANAxwC,MAAKgtC,kBACLhtC,KAAKiqC,UAAYjqC,KAAKwpC,cAAcgH,GACpCxwC,KAAK8jB,iBAAiB9jB,KAAKoK,SAASpK,KAAKiqC,YACrCjqC,KAAKwjB,YACLxjB,KAAKkvC,aAEFlvC,KAAKsP,aAAanJ,KAExB,KAAKsqC,IAAatqC,EACnB,MAAOnG,MAAKwpC,cAAciH,EAEzB,KAAKtqC,IAAUqqC,IAAaC,IAAcD,EAC3C,MAAOxwC,MAAKwpC,cAAcgH,OAI9B,KAAKC,GAAYD,IACbxwC,KAAKgtC,mBACA72B,OAAOnW,KAAKysC,cAAc6D,KAC3B,MAAOA,EAInB,OAAOA,IAEX/H,EAAWroC,UAAUwiB,WAAa,WAC9BrZ,eAAa1F,IAAI3D,KAAK8iB,aAAaE,QAAQ,GAAI,YAAahjB,KAAKuuC,aAAcvuC,MAC/EqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,OAAQtP,KAAK6mB,iBAAkB7mB,MACnEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAK4mB,kBAAmB5mB,MACrEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,SAAUtP,KAAKgnB,mBAAoBhnB,MACvEqJ,eAAa1F,IAAI3D,KAAKsP,aAAc,QAAStP,KAAK0wC,kBAAmB1wC,MACjEA,KAAKwjB,YACLna,eAAa1F,IAAI3D,KAAKsP,aAAc,UAAWtP,KAAK+mB,eAAgB/mB,MAEpEA,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,YAAajnB,KAAK2wC,aAAc3wC,MAEhFA,KAAKmnB,aACL9d,eAAa1F,IAAI3D,KAAKmnB,YAAa,QAASnnB,KAAKqd,iBAAkBrd,MAElE6D,UAAQC,WACT9D,KAAK0oC,aAAe37B,SAAO/M,KAAK0oC,aAAc1oC,KAAKgN,YACnDhN,KAAK4wC,WAAa,GAAI1jC,kBAAelN,KAAK8iB,aAAaC,WACnD3V,UAAWpN,KAAKymB,aAAanZ,KAAKtN,MAClCgN,WAAYhN,KAAK0oC,aACjBv7B,UAAW,YAEXnN,KAAK8kB,iBAAmB9kB,KAAKsP,cAC7BjG,eAAa1F,IAAI3D,KAAKsP,aAAc,YAAatP,KAAKyuC,iBAAkBzuC,QAIpFuoC,EAAWroC,UAAU6mB,eAAiB,SAAUtZ,GAC5C,OAAQA,EAAE8Z,MACN,IAAK,UACGvnB,KAAKwjB,YAAexjB,KAAKwnB,UAAaxnB,KAAKqjB,UAC3CrjB,KAAKyjB,OAAO,kBACRC,OAAQ,iBACRjW,EAAGA,MAQvB86B,EAAWroC,UAAUmd,iBAAmB,WACpC,GAAKrd,KAAKyE,UAGLzE,KAAKsP,aAAa9K,SAAU,CAC7B,GAAIqsC,GAAY7wC,KAAKsP,aAAanL,aAAa,SAC3C2hB,EAAM9lB,KAAKoG,eAAepG,KAAKupC,cACN,oBAAzBvpC,KAAK6B,QAAQ6lB,UACb5B,EAAM,KACN+qB,EAAY,GACZ7wC,KAAKsP,aAAalL,aAAa,QAAS,KAE5CpE,KAAKoD,eAAgB+C,MAAO2f,IAAO,GACnC9lB,KAAK4qC,SAAW5qC,KAAKmG,MACrBnG,KAAK2qC,iBAAmB3qC,KAAKmG,MAC7BnG,KAAKiqC,UAAYjqC,KAAKmG,MAClBnG,KAAKsP,eACLtP,KAAK8jB,iBAAiB+sB,GAClB7wC,KAAKwjB,aACAqtB,GACD7wC,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAE/BliB,KAAKkvC,cAETlvC,KAAKqpC,gBAAgBwH,GACrB7wC,KAAK8vC,UAAY9vC,KAAKsP,aAAanJ,SAI/CoiC,EAAWroC,UAAU8mB,mBAAqB,SAAUvZ,GAC3CzN,KAAKyE,SAGVgJ,EAAEma,mBAEN2gB,EAAWroC,UAAUwwC,kBAAoB,WACjC1wC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,gBACRC,OAAQ,oBAIpB6kB,EAAWroC,UAAUunB,aAAe,WAC5BznB,KAAK8iB,cACLzZ,eAAaQ,OAAO7J,KAAK8iB,aAAaE,QAAQ,GAAI,uBAAwBhjB,KAAKuuC,cAEnFllC,eAAaQ,OAAO7J,KAAKsP,aAAc,OAAQtP,KAAK6mB,kBACpDxd,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK4mB,mBACrDvd,eAAaQ,OAAO7J,KAAKsP,aAAc,SAAUtP,KAAKgnB,oBACtD3d,eAAaQ,OAAO7J,KAAKsP,aAAc,QAAStP,KAAK0wC,mBACjD1wC,KAAK4wC,YACL5wC,KAAK4wC,WAAWt3B,UAEpBjQ,eAAaQ,OAAO7J,KAAKsP,aAAc,uBAAwBtP,KAAKyuC,mBAChEzuC,KAAK8kB,iBAAoB5hB,oBAAkBlD,KAAK8iB,eAAkB5f,oBAAkBlD,KAAK8iB,aAAamE,cACtG5d,eAAaQ,OAAO7J,KAAK8iB,aAAamE,YAAa,uBAAwBjnB,KAAK2wC,cAEhF3wC,KAAKmnB,aACL9d,eAAaQ,OAAO7J,KAAKmnB,YAAa,QAASnnB,KAAKqd,mBAG5DkrB,EAAWroC,UAAU2nB,eAAiB,WAC9B7nB,KAAK8kB,iBAAmB9kB,KAAK8iB,aAAamE,aAC1C5d,eAAa1F,IAAI3D,KAAK8iB,aAAamE,YAAa,YAAajnB,KAAK2wC,aAAc3wC,OAGxFuoC,EAAWroC,UAAU4wC,kBAAoB,SAAUrjC,GAC/C,GAAIsa,IACA1M,MAAO5N,EAEXzN,MAAKkb,QAAQ,UAAW6M,IAE5BwgB,EAAWroC,UAAUywC,aAAe,SAAUljC,GAC1C,GAAKzN,KAAKyE,UAGVgJ,EAAEe,iBACGtL,oBAAkBlD,KAAKmG,QAIxBnG,KAAKgqC,aACLhqC,KAAK8wC,kBAAkBrjC,IAJvBzN,KAAK8nB,MAAMra,GAMXzN,KAAKwG,eACLxG,KAAKwG,aAAai/B,UAAY,GAE9BzlC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,gBACRC,OAAQ,mBAGZnf,UAAQvE,KAAK6B,QAAS,SAAS,CAC/B,GAAIA,GAAU7B,KAAK6B,QACfomB,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrCvmB,EAAQwmB,cAAcJ,KAG9BsgB,EAAWroC,UAAU4nB,MAAQ,SAAUzM,GACnCrb,KAAKoD,eAAgB+C,MAAO,OAAQ,GACpCnG,KAAKiqC,UAAY,KACjBjqC,KAAKgqC,aACLhqC,KAAK8wC,kBAAkBz1B,GACvBrb,KAAKsf,YAAYjE,IAErBktB,EAAWroC,UAAU6wC,UAAY,WACzB/wC,KAAKwnB,WACLxnB,KAAKwnB,SAAS1gB,OAAS9G,KAAK8G,OAC5B9G,KAAKwnB,SAASwpB,aAGtBzI,EAAWroC,UAAUoqC,gBAAkB,SAAUnlB,GAI7C,IAAK,GADDhf,GACKqE,EAAK,EAAGglB,EAHArK,EAAYjiB,oBAAkBlD,KAAK4oB,mBAAuBnpB,OAAOiL,KAAK1K,KAAK4oB,iBACvF,OAAQ,WAAY,WAAY,QAAS,OAAQ,QAAS,MAAO,MAAO,eAEjCpe,EAAKglB,EAAa7uB,OAAQ6J,IAAM,CACxE,GAAIwN,GAAOwX,EAAahlB,EACxB,KAAKtH,oBAAkBlD,KAAKsP,aAAanL,aAAa6T,IAClD,OAAQA,GACJ,IAAK,WACD,GAAK9U,oBAAkBlD,KAAKyoC,kBAAiDrwB,KAAhCpY,KAAKyoC,YAAqB,SAAqBtjB,EAAW,CACnG,GAAI1gB,GAAmD,aAAzCzE,KAAKsP,aAAanL,aAAa6T,IACA,KAAzChY,KAAKsP,aAAanL,aAAa6T,IAAyD,SAAzChY,KAAKsP,aAAanL,aAAa6T,EAClFhY,MAAKoD,eAAgBqB,QAASA,IAAY0gB,GAE9C,KACJ,KAAK,QACDnlB,KAAKgrC,WAAahrC,KAAKsP,aAAanL,aAAa6T,EACjD,MACJ,KAAK,WACD,GAAK9U,oBAAkBlD,KAAKyoC,kBAAkDrwB,KAAjCpY,KAAKyoC,YAAsB,UAAqBtjB,EAAW,CACpG,GAAI9B,GAAoD,aAAzCrjB,KAAKsP,aAAanL,aAAa6T,IACD,KAAzChY,KAAKsP,aAAanL,aAAa6T,IAAyD,SAAzChY,KAAKsP,aAAanL,aAAa6T,EAClFhY,MAAKoD,eAAgBigB,SAAUA,IAAa8B,GAEhD,KACJ,KAAK,OACDnlB,KAAKsP,aAAalL,aAAa,OAAQpE,KAAKsP,aAAanL,aAAa6T,GACtE,MACJ,KAAK,OACDhY,KAAKioC,KAAOrhC,SAAS5G,KAAKsP,aAAanL,aAAa6T,GAAO,GAC3D,MACJ,KAAK,eACI9U,oBAAkBlD,KAAKyoC,kBAAqDrwB,KAApCpY,KAAKyoC,YAAyB,aAAqBtjB,IAC5FnlB,KAAKoD,eAAgBygB,YAAa7jB,KAAKsP,aAAanL,aAAa6T,KAAUmN,EAE/E,MACJ,KAAK,OACIjiB,oBAAkBlD,KAAKyoC,kBAA6CrwB,KAA5BpY,KAAKyoC,YAAiB,KAAqBtjB,KACpFhf,EAAQ,GAAIrD,MAAK9C,KAAKsP,aAAanL,aAAa6T,IAC3C9U,oBAAkBlD,KAAKoG,eAAeD,KACvCnG,KAAKoD,eAAgBZ,IAAK2D,IAAUgf,GAG5C,MACJ,KAAK,OACIjiB,oBAAkBlD,KAAKyoC,kBAA6CrwB,KAA5BpY,KAAKyoC,YAAiB,KAAqBtjB,KACpFhf,EAAQ,GAAIrD,MAAK9C,KAAKsP,aAAanL,aAAa6T,IAC3C9U,oBAAkBlD,KAAKoG,eAAeD,KACvCnG,KAAKoD,eAAgBX,IAAK0D,IAAUgf,GAG5C,MACJ,KAAK,SACIjiB,oBAAkBlD,KAAKyoC,kBAA+CrwB,KAA9BpY,KAAKyoC,YAAmB,OAAqBtjB,KACtFhf,EAAQ,GAAIrD,MAAK9C,KAAKsP,aAAanL,aAAa6T,IAC3C9U,oBAAkBlD,KAAKoG,eAAeD,MACvCnG,KAAKiqC,UAAY9jC,EACjBnG,KAAKkjB,aAAY,EAAOljB,KAAKiqC,WAC7BjqC,KAAKoD,eAAgB+C,MAAOA,IAAUgf,QAQlEojB,EAAWroC,UAAUqrC,eAAiB,SAAUplC,GAC5C,MAAIjD,qBAAkBlD,KAAKoG,eAAeD,IAC/B,KAEJ,GAAIrD,MAAK4kC,EAAMD,EAAOD,EAAKrhC,EAAMiL,WAAYjL,EAAMkL,aAAclL,EAAMmL,eAElFi3B,EAAWroC,UAAU+wC,cAAgB,WACjC,GAAI/2B,GAAO,CACX,IAA4C,MAAxCla,KAAKguC,iBAAiB7/B,MAAM,KAAK,IAAqD,IAAvCnO,KAAKguC,iBAAiBp6B,QAAQ,KAC7EsG,EAAO,MAEN,IAAIla,KAAKguC,iBAAiBp6B,QAAQ,KAAO,EAE1C,IAAK,GADDs9B,GAAWlxC,KAAKguC,iBAAiB7/B,MAAM,KAClCnN,EAAI,EAAGA,EAAIkwC,EAASvwC,OAAQK,IACjC,GAAIkwC,EAASlwC,GAAGmJ,cAAcyJ,QAAQ,MAAQ,EAAG,CAC7CsG,EAAOlZ,CACP,OAIZ,MAAOkZ,IAEXquB,EAAWroC,UAAUw0B,YAAc,SAAUvuB,EAAOkV,GAChD,GAAIyK,EACJ,IAAI9lB,KAAK+qC,cAAc5kC,GACnBnG,KAAKgqC,iBAIL,IADAlkB,EAAM9lB,KAAKqG,WAAWF,GAClBnG,KAAKslB,WAAY,CAEjB,GAAIuK,GAAoB,OAAR/J,GAAgB3f,EAAM0X,OAAOld,OAAS,EAClDX,KAAKmvC,cAAcnvC,KAAK4qC,UAAY5qC,KAAKsP,aAAanJ,KAC1DnG,MAAK8jB,iBAAiB+L,GAClB7vB,KAAKwjB,aACAqM,GACD7vB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAE3Bhf,oBAAkB4iB,IAAQ3f,IAAUnG,KAAKkiB,iBACzCliB,KAAKkvC,aAELhsC,oBAAkB4iB,IAAQ3f,IAAUnG,KAAKkiB,iBACzCliB,KAAK8jB,iBAAiB9jB,KAAKkiB,kBAK3CliB,KAAK2vC,iBAAiBt0B,EAAwB,gBAAVlV,KAExCoiC,EAAWroC,UAAUivC,cAAgB,SAAU1/B,GAE3C,IAAK,GADDtJ,GAAQnG,KAAKwpC,cAAc/5B,GACtBzO,EAAI,EAAGA,EAAIhB,KAAKooC,gBAAgBznC,OAAQK,IAC7C,IAAKmF,IAAUnG,KAAKooC,gBAAgBpnC,GAAI,CACpChB,KAAK21B,YAAc30B,EACnBhB,KAAK8a,gBAAkB9a,KAAKiyB,cAAcjxB,GAC1ChB,KAAK2qC,iBAAmB,GAAI7nC,MAAK9C,KAAKooC,gBAAgBpnC,GACtD,OAGR,MAAOhB,MAAKoK,SAASqF,IAEzB84B,EAAWroC,UAAU8pC,WAAa,WAC9BhqC,KAAKs2B,kBACL1T,QAAM6F,SAAS,GAAIzoB,KAAKsP,aAActP,KAAK2iB,gBAAgB,GAC3D3iB,KAAK2qC,iBAAmB3qC,KAAK21B,YAAc,KACtC31B,KAAKslB,YACNtlB,KAAKqpC,gBAAgB,OAG7Bd,EAAWroC,UAAU+uC,YAAc,SAAUnpB,GACzC,MAAI5iB,qBAAkBlD,KAAKoG,eAAe0f,IAC/B,KAGA9lB,KAAK+C,UAAUqP,WAAW0T,GAAOtT,OAAQxS,KAAKguC,iBAAkB/lC,KAAM,UAGrFsgC,EAAWroC,UAAUmG,WAAa,SAAUF,GACxC,IAAKnG,KAAK+qC,cAAc5kC,GAAQ,CAC5B,GAAIsJ,GAAOtJ,YAAiBrD,MAAOqD,EAAQnG,KAAKwpC,cAAcrjC,EAC9D,OAAOnG,MAAKmxC,cAAc1hC,EAAMtJ,GAGpC,MADAnG,MAAKgqC,aACEhqC,KAAK2qC,iBAAmB,MAEnCpC,EAAWroC,UAAUixC,cAAgB,SAAU1hC,EAAMtJ,GACjD,GAAI+T,GACA4L,EAAM9lB,KAAK0/B,eAAev5B,EAAOnG,KAAKwC,IAAKxC,KAAKyC,KAChD2uC,EAASpxC,KAAKwpC,cAAc1jB,EAahC,IAZI9lB,KAAKopC,kBAAkBgI,KAAYpxC,KAAKopC,kBAAkBppC,KAAKmG,QAC/DnG,KAAK2qC,iBAAmBznC,oBAAkBkuC,GAAU,KAAOA,EAC3Dl3B,EAAOla,KAAKivC,YAAYjvC,KAAK2qC,oBAGzB3qC,KAAKslB,aAEL7V,EAAO2hC,GAEXpxC,KAAK2qC,iBAAmB3qC,KAAKoG,eAAeqJ,GAC5CyK,EAAOla,KAAKivC,YAAYjvC,KAAK2qC,oBAE5B3qC,KAAKslB,YAAcpiB,oBAAkBgX,GAAO,CAC7C,GAAIm3B,GAAUvrB,EAAIjI,OAAOld,OAAS,EAAImlB,EAAM,EAC5C9lB,MAAK8jB,iBAAiButB,GAClBrxC,KAAKwjB,aACA6tB,GACDrxC,KAAK8jB,iBAAiB9jB,KAAKkiB,sBAKnCliB,MAAK8jB,iBAAiB5J,GAClBla,KAAKwjB,aACQ,KAATtJ,GACAla,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAE3Bhf,oBAAkBgX,IAAS/T,IAAUnG,KAAKkiB,iBAC1CliB,KAAKkvC,aAELhsC,oBAAkBgX,IAAS/T,IAAUnG,KAAKkiB,iBAC1CliB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAIvC,OAAOhI,IAEXquB,EAAWroC,UAAUgvC,WAAa,WAC9BlvC,KAAKyjB,OAAO,cACRC,OAAQ,oBAGhB6kB,EAAWroC,UAAUoxC,gBAAkB,SAAUj2B,GAC7C,GAAIk2B,GAAWvxC,kBAAmBmG,MAC9BA,EAAQjD,oBAAkBlD,KAAK2qC,kBAAoB3qC,KAAKysC,cAAc8E,GACtEvxC,KAAKwpC,cAAcxpC,KAAK2qC,kBACxB6G,EAAU,KACVn7B,EAAQrW,KAAKiyB,cAActxB,OAC3B8wC,EAAczxC,KAAKooC,eACvB,IAAKllC,oBAAkBlD,KAAKoG,eAAeD,KAAYjD,oBAAkBlD,KAAK21B,aAiD1E31B,KAAK0xC,eAAer2B,OAjDoE,CACxF,GAAqB,SAAjBA,EAAMnN,OAAmB,CACrBvH,EAAQ3G,KAAK2xC,eAAe,EAChCH,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,MAElB,IAAqB,QAAjB0U,EAAMnN,OAAkB,CACzBvH,EAAQ3G,KAAK2xC,eAAeF,EAAY9wC,OAAS,GAAG,EACxD6wC,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,MAGnB,IAAqB,SAAjB0U,EAAMnN,OACN,IAASlN,EAAI,EAAGA,EAAIqV,EAAOrV,IAAK,CAC5B,IAAKmF,EAAQnG,KAAKooC,gBAAgBpnC,GAAI,CAC9B2F,EAAQ3G,KAAK2xC,eAAe3wC,EAChCwwC,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,CACnB,OAEC,GAAI3F,IAAMqV,EAAQ,EAAG,CAClB1P,EAAQ3G,KAAK2xC,eAAe,EAChCH,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,CACnB,YAKR,KAAK,GAAI3F,GAAIqV,EAAQ,EAAGrV,GAAK,EAAGA,IAAK,CACjC,IAAKmF,EAAQnG,KAAKooC,gBAAgBpnC,GAAI,CAC9B2F,EAAQ3G,KAAK2xC,eAAe3wC,GAAG,EACnCwwC,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,CACnB,OAEC,GAAU,IAAN3F,EAAS,CACd,GAAI2F,GAAQ3G,KAAK2xC,eAAet7B,EAAQ,EACxCm7B,IAAYxxC,KAAKysC,cAAc,GAAI3pC,MAAK9C,KAAKooC,gBAAgBzhC,KAC7D3G,KAAK21B,YAAchvB,CACnB,QAKhB3G,KAAK8a,gBAAkB9a,KAAKiyB,cAAcjyB,KAAK21B,aAC/C31B,KAAK4xC,aAAa1uC,oBAAkBsuC,GAAW,KAAO,GAAI1uC,MAAK0uC,MAMvEjJ,EAAWroC,UAAUwxC,eAAiB,SAAUr2B,GAC5C,GAAI1U,GAAQ3G,KAAK2xC,eAAe,EAAoB,SAAjBt2B,EAAMnN,OACzClO,MAAK21B,YAAchvB,EACnB3G,KAAK8a,gBAAkB9a,KAAKiyB,cAActrB,GAC1C3G,KAAK4xC,aAAa,GAAI9uC,MAAK9C,KAAKooC,gBAAgBzhC,MAEpD4hC,EAAWroC,UAAU0xC,aAAe,SAAUzrC,GACrCjD,oBAAkBlD,KAAKoG,eAAeD,KACvCnG,KAAKqG,WAAWF,IAGxBoiC,EAAWroC,UAAUyxC,eAAiB,SAAUhrC,EAAOkrC,GACnD,GAAIC,GAAe,KACflE,EAAQ1qC,oBAAkBlD,KAAKwG,cAAgBxG,KAAKiyB,cACpDjyB,KAAKwG,aAAayE,iBAAiB,gBACnC8mC,GAAU,CACd,IAAInE,EAAMjtC,OACN,GAAIkxC,EACA,IAAS7wC,EAAI2F,EAAO3F,GAAK,EAAGA,IAAK,CAC7B,IAAK4sC,EAAM5sC,GAAG0C,UAAU+I,SAppD7B,cAopDiD,CACxCqlC,EAAe9wC,CACf,OAEW,IAANA,GACD+wC,IACAprC,EAAQ3F,EAAI4sC,EAAMjtC,OAClBoxC,GAAU,OAMtB,KAAK,GAAI/wC,GAAI2F,EAAO3F,GAAK4sC,EAAMjtC,OAAS,EAAGK,IAAK,CAC5C,IAAK4sC,EAAM5sC,GAAG0C,UAAU+I,SAlqD7B,cAkqDiD,CACxCqlC,EAAe9wC,CACf,OAEKA,IAAM4sC,EAAMjtC,OAAS,GACtBoxC,IACAprC,EAAQ3F,GAAK,EACb+wC,GAAU,GAM9B,MAAOD,IAEXvJ,EAAWroC,UAAU8uC,WAAa,SAAU3zB,GACxC,KAAInY,oBAAkBlD,KAAKioC,OAASjoC,KAAKioC,MAAQ,IAAM/kC,oBAAkBlD,KAAK8iB,eACvE9iB,KAAK8iB,aAAaE,QAAQ,GAAGtf,UAAU+I,SAnrDvC,eAkrDP,CAIA,GAAI4J,GAAQrW,KAAKooC,gBAAgBznC,MACjC,IAAIuC,oBAAkBlD,KAAKwtC,qBAA0D,IAAnCxtC,KAAKwtC,mBAAmB7sC,OACtE,GAAIX,KAAKiyB,cAActxB,OAAS,EAC5B,GAAIuC,oBAAkBlD,KAAKmG,QAAUjD,oBAAkBlD,KAAK21B,aAAc,CAClEhvB,EAAQ3G,KAAK2xC,eAAe,EAAoB,SAAjBt2B,EAAMnN,OACzClO,MAAK21B,YAAchvB,EACnB3G,KAAK8a,gBAAkB9a,KAAKiyB,cAActrB,GAC1C3G,KAAK4xC,aAAa,GAAI9uC,MAAK9C,KAAKooC,gBAAgBzhC,SAGhD3G,MAAKsxC,gBAAgBj2B,OAIzBrb,MAAKsxC,gBAAgBj2B,OAGxB,CACD,GAAI22B,OAAW,EACf,IAAK32B,EAAMmpB,SAAW,IAAQnpB,EAAMmpB,SAAW,GAAK,CAC5C79B,EAA2B,KAAlB0U,EAAMmpB,SAAoC,KAAlBnpB,EAAMmpB,UAAoBxkC,KAAK21B,cAAgB31B,KAAK21B,WACzF31B,MAAK21B,YAAchvB,EAAQ3G,KAAK21B,gBAA0B,EAAI31B,KAAK21B,YACnE31B,KAAK21B,YAAchvB,EAAQ3G,KAAK21B,YAAc,EAAKtf,EAAQ,EAAKrW,KAAK21B,YACrE31B,KAAK21B,YAAchvB,EAAQ3G,KAAK2xC,eAAe3xC,KAAK21B,YAAgC,KAAlBta,EAAMmpB,SAAoC,KAAlBnpB,EAAMmpB,SAEhGwN,EAAW9uC,oBAAkBlD,KAAKooC,gBAAgBzhC,IAC9C3G,KAAKooC,gBAAgB,GAAKpoC,KAAKooC,gBAAgBzhC,OAElD,IAAqB,SAAjB0U,EAAMnN,OAAmB,CAC1BvH,EAAQ3G,KAAK2xC,eAAe,EAChC3xC,MAAK21B,YAAchvB,EACnBqrC,EAAWhyC,KAAKooC,gBAAgBzhC,OAE/B,IAAqB,QAAjB0U,EAAMnN,OAAkB,CAC7B,GAAIvH,GAAQ3G,KAAK2xC,eAAet7B,EAAQ,GAAG,EAC3CrW,MAAK21B,YAAchvB,EACnBqrC,EAAWhyC,KAAKooC,gBAAgBzhC,GAEpC3G,KAAK8a,gBAAkB9a,KAAKiyB,cAAcjyB,KAAK21B,aAC/C31B,KAAK4xC,aAAa,GAAI9uC,MAAKkvC,IAE/BhyC,KAAKwqC,YAAa,EAClBxqC,KAAKgwC,SAAShwC,KAAK8a,gBAjuDV,gBAkuDT9a,KAAK8Y,sBACD9Y,KAAKwjB,YACLxjB,KAAKktC,mBAELltC,KAAKw2B,eAA0C,OAAzBx2B,KAAK8a,iBAA8BO,GAAwB,UAAfA,EAAMpT,MACxEjI,KAAK2kC,sBAGb4D,EAAWroC,UAAUsrC,qBAAuB,SAAU1xB,EAAIrZ,GACtD,MAAO2J,YAAS,QAAU3J,EAAI,+CAAgDqZ,IAElFyuB,EAAWroC,UAAUguC,qBAAuB,SAAUp0B,EAAIrZ,GACtD,MAAO2J,YAAS,QAAU3J,EAAI,+CAAgDqZ,IAElFyuB,EAAWroC,UAAUkjC,eAAiB,WAClC/5B,eAAa1F,IAAI3D,KAAK+rC,YAAa,QAAS/rC,KAAKkiC,aAAcliC,MAC1D6D,UAAQC,WACTuF,eAAa1F,IAAI3D,KAAK+rC,YAAa,YAAa/rC,KAAKuiC,YAAaviC,MAClEqJ,eAAa1F,IAAI3D,KAAK+rC,YAAa,WAAY/rC,KAAKwiC,aAAcxiC,QAG1EuoC,EAAWroC,UAAUsjC,iBAAmB,WAChCxjC,KAAK+rC,cACL1iC,eAAaQ,OAAO7J,KAAK+rC,YAAa,QAAS/rC,KAAKkiC,cAC/Cr+B,UAAQC,WACTuF,eAAaQ,OAAO7J,KAAK+rC,YAAa,YAAa/rC,KAAKuiC,aACxDl5B,eAAaQ,OAAO7J,KAAK+rC,YAAa,WAAY/rC,KAAKwiC,iBAInE+F,EAAWroC,UAAU2vC,aAAe,SAAUx0B,EAAOlV,GACjD,GAAIuV,GAAUxY,oBAAkBlD,KAAKoG,eAAeD,IAAW,KAAOA,GACjEnG,KAAK4qC,WAAclvB,IACpB1b,KAAKiqC,UAAYvuB,EACjB1b,KAAKsf,YAAYjE,KAGzBktB,EAAWroC,UAAUof,YAAc,SAAU7R,GACzCzN,KAAKgsC,eACLhsC,KAAKkjB,aAAY,EAAMljB,KAAKiqC,UAC5B,IAAItc,IACAtS,MAAQ5N,GAAK,KACbtH,MAAOnG,KAAKmG,MACZ2E,KAAO9K,kBAAmBmG,MAC1BoZ,cAAerc,oBAAkBuK,GACjC5L,QAAS7B,KAAK6B,QAElB8rB,GAAUxnB,MAAQnG,KAAK2qC,kBAAoB3qC,KAAKwpC,cAAcxpC,KAAKsP,aAAanJ,OAChFnG,KAAK4qC,SAAW5qC,KAAK2qC,kBAAoB3qC,KAAKwpC,cAAcxpC,KAAKsP,aAAanJ,OAC1EnG,KAAKqP,WAAarP,KAAKoC,cACvBpC,KAAKoC,eAAgB,EAGrBpC,KAAKkb,QAAQ,SAAUyS,GAE3B3tB,KAAKgiB,mBAAqB,KAC1BhiB,KAAKqpC,gBAAgBrpC,KAAKmG,QAE9BoiC,EAAWroC,UAAUgjB,YAAc,SAAU+uB,EAAUxiC,GAC/CwiC,IACAjyC,KAAK8vC,UAAY9vC,KAAKoK,SAASpK,KAAK4qC,WAExC5qC,KAAK4qC,SAAW5qC,KAAK2qC,iBAAmBl7B,EACnB,gBAATA,KAAuBzP,KAAKmG,QAAU,GAAIrD,OAAM9C,KAAKmG,OAAOmY,gBAAgB,OAAS7O,IAC7FzP,KAAKoD,eAAgB+C,MAAOsJ,IAAQ,GAChCzP,KAAKwjB,YAAcxjB,KAAKmG,OACxBnG,KAAKkvC,eAGRlvC,KAAKslB,YAAcpiB,oBAAkBlD,KAAKmG,QAAUnG,KAAKgiB,qBAC1DhiB,KAAKqpC,gBAAgBrpC,KAAKgiB,oBAC1BhiB,KAAK8jB,iBAAiB9jB,KAAKgiB,qBAE/BhiB,KAAK0pC,kBAETnB,EAAWroC,UAAU4Y,oBAAsB,YAClC5V,oBAAkBlD,KAAK8a,kBAAoB9a,KAAKmG,MACjDpC,aAAW/D,KAAKsP,cAAgBxG,wBAAyB9I,KAAK8a,gBAAgB3W,aAAa,QAG3FnE,KAAKsP,aAAaiK,gBAAgB,0BAG1CgvB,EAAWroC,UAAUo2B,gBAAkB,WAEnC,GADAt2B,KAAKkwC,YAvzDD,YAwzDChtC,oBAAkBlD,KAAKwG,cAAe,CACvC,GAAIonC,GAAQ5tC,KAAKwG,aAAayE,iBAAiB,YAC3C2iC,GAAMjtC,SACNsG,cAAY2mC,EA5zDb,YA6zDCA,EAAM,GAAGr0B,gBAAgB,oBAIrCgvB,EAAWroC,UAAUgwC,YAAc,SAAUroC,GACzC,GAAIqqC,GAAclyC,KAAKmyC,aAAatqC,EAChCqqC,IAAeA,EAAYvxC,SAC3BsG,cAAYirC,EAAarqC,GAl0DpB,iBAm0DDA,GACAqqC,EAAY,GAAG34B,gBAAgB,mBAI3CgvB,EAAWroC,UAAUiyC,aAAe,SAAUtqC,GAC1C,GAAIqqC,EAIJ,OAHKhvC,qBAAkBlD,KAAKwG,gBACxB0rC,EAAclyC,KAAKwG,aAAayE,iBAAiB,IAAMpD,IAEpDqqC,GAEX3J,EAAWroC,UAAUkyC,eAAiB,WAClC,IAAKlvC,oBAAkBlD,KAAKwG,cAAe,CACvC,GAAIonC,GAAQ5tC,KAAKwG,aAAayE,iBAAiB,eAC/C,IAAI2iC,EAAMjtC,OACN,IAAK,GAAIK,GAAI,EAAGA,EAAI4sC,EAAMjtC,OAAQK,IAC9B,GAAKhB,KAAKooC,gBAAgBpnC,MAAQhB,KAAKwpC,cAAcxpC,KAAK2qC,kBAAoB,CAC1EiD,EAAM5sC,GAAGoD,aAAa,gBAAiB,QACvCpE,KAAK8a,gBAAkB8yB,EAAM5sC,GAC7BhB,KAAK21B,YAAc30B,CACnB,UAMpBunC,EAAWroC,UAAU8rC,aAAe,WAChChsC,KAAK8a,gBAAkB,KACvB9a,KAAKs2B,kBACLt2B,KAAKoyC,iBACAlvC,oBAAkBlD,KAAK8a,mBACxB5T,YAAUlH,KAAK8a,iBAr2DZ,YAs2DH9a,KAAK8a,gBAAgB1W,aAAa,gBAAiB,UAG3DmkC,EAAWroC,UAAU+vC,UAAY,SAAU7N,GACvC,MAAQA,IAAMA,EAAG1+B,UAAU+I,SAp2DnB,iBAo2D2C21B,EAAG1+B,UAAU+I,SAv2DzD,eAy2DX87B,EAAWroC,UAAUusC,cAAgB,SAAU3mB,GAC3C,GACIxZ,GAAQtM,KAAK+C,UAAUqP,WAAW,GAAItP,OAAU0P,OADpC,KACuDN,SAAU,QAASjK,KAAM,SAC5F9B,EAAQ,IAgBZ,OAfmB,gBAAR2f,GACHA,EAAI/a,cAAc6I,QAAQ,OAAS,GAAKkS,EAAI/a,cAAc6I,QAAQ,OAAS,GAC3EtH,EAAQtM,KAAKkqC,eAAe93B,WAAW,GAAItP,OAAU0P,OAL7C,KAKgEN,SAAU,QAASjK,KAAM,SACjG9B,EAAQgQ,OAAO,GAAIrT,MAAKwJ,EAAQ,IAAMwZ,IAAQ,KAAO,GAAIhjB,MAAK,GAAIA,MAAKwJ,EAAQ,IAAMwZ,GAAKxH,gBAAgB,IACtGpb,oBAAkBiD,KAClBA,EAAQnG,KAAKqyC,UAAU/lC,EAAOwZ,KAIlC3f,EAAQnG,KAAKqyC,UAAU/lC,EAAOwZ,GAG7BA,YAAehjB,QACpBqD,EAAQ2f,GAEL3f,GAEXoiC,EAAWroC,UAAUmyC,UAAY,SAAU/lC,EAAOwZ,GAC9C,GAAI3f,EAQJ,OAPAA,GAAQnG,KAAK+C,UAAUoP,UAAU7F,EAAQ,IAAMwZ,GAC3CtT,OAAQxS,KAAKiuC,iBAAmB,IAAMjuC,KAAKguC,iBAAkB/lC,KAAM,aAEvE9B,EAAQjD,oBAAkBiD,GAASnG,KAAK+C,UAAUoP,UAAU7F,EAAQ,IAAMwZ,GACtEtT,OAAQxS,KAAKiuC,iBAAmB,IAAMjuC,KAAKmuC,gBAAiBlmC,KAAM,aACjE9B,EACLA,EAAQjD,oBAAkBiD,GAASA,EAAQ,GAAIrD,MAAKqD,EAAMmY,gBAAgB,KAG9EiqB,EAAWroC,UAAU4nC,gBAAkB,WACnC,GAAIhmC,GAAQ9B,IACZA,MAAK+rC,YAAc/rC,KAAKsE,cAAc,OAASuD,UA/4DzC,YA+4D6DG,OAASL,SAAY,OACxF,IAAI+D,GACAw8B,EAAuB,IAAZloC,KAAKioC,KAChBE,IACJnoC,MAAKooC,mBACLpoC,KAAKwoC,yBACL98B,GAAU1L,KAAKwpC,cAAcxpC,KAAK4pC,SAAStrB,gBAAgB,EAE3D,KADA,GAAI/Y,IAAQvF,KAAKwpC,cAAcxpC,KAAK6pC,SAASvrB,gBAAgB,GACtD/Y,GAAOmG,GACV1L,KAAKooC,gBAAgBx9B,KAAKc,GAC1By8B,EAAUv9B,KAAK5K,KAAK+C,UAAUqP,WAAW,GAAItP,MAAK4I,IAAU8G,OAAQxS,KAAKguC,iBAAkB/lC,KAAM,UACjGyD,GAASw8B,CAEb,IAAIoK,IACAC,YAAa,SAAU/oC,GACnB,GAAImkB,IACA9rB,QAAS2H,EAAK24B,KACdr3B,KAAMtB,EAAKsB,KAAM3E,MAAOrE,EAAM0nC,cAAchgC,EAAKsB,MAAO2H,YAAY,EAExE3Q,GAAMoZ,QAAQ,aAAcyS,EAAW,SAAUA,GACzCA,EAAUlb,YACVkb,EAAU9rB,QAAQ6B,UAAUC,IAh6DrC,cAk6DSgqB,EAAU9rB,QAAQ6B,UAAU+I,SAl6DrC,eAm6DS3K,EAAM0mC,sBAAsB59B,KAAK+iB,EAAU9rB,QAAQsC,aAAa,kBAKhFnE,MAAK+iC,QAAUC,WAASC,WAAWjjC,KAAKsE,cAAe6jC,EAAWmK,GAAiB,GACnFvuC,aAAW/D,KAAK+iC,SAAWl6B,KAAQ,UAAWq6B,cAAe,QAASl6B,GAAMhJ,KAAK6B,QAAQmH,GAAK,WAAYrB,SAAY,MACtHmkC,UAAQ9rC,KAAK+iC,SAAU/iC,KAAK+rC,cAEhCxD,EAAWroC,UAAUqvC,qBAAuB,SAAUl0B,GAClD,GAAI/a,GAAS+a,EAAM/a,MACb4C,qBAAkBlD,KAAKwnB,WAActkB,oBAAkBlD,KAAK8iB,iBAAkB9iB,KAAK8iB,aAAaC,UAAUtW,SAASnM,IAA0B,cAAf+a,EAAMpT,MACrIjI,KAAKwnB,SAAS3lB,SAAW7B,KAAKwnB,SAAS3lB,QAAQ4K,SAASnM,KAA6B,eAAf+a,EAAMpT,MAC7EoT,EAAM7M,iBAEJjK,UAAQjE,EAAQ,QAAUN,KAAKwnB,SAAS3lB,QAAQmH,GAAK,OAAU1I,IAAWN,KAAKsP,cAC9EhP,KAAYN,KAAK8iB,cAAgB9iB,KAAK8iB,aAAaE,QAAQ,KAC9D1iB,KAAYN,KAAK8iB,cAAgB9iB,KAAK8iB,aAAamE,cACnD3mB,KAAYN,KAAK8iB,cAAgB9iB,KAAK8iB,aAAaC,YAC9CziB,EAAOoD,UAAU+I,SAAS,iBAM1BnM,IAAWN,KAAKsP,eAChBzL,UAAQC,WACT9D,KAAKyqC,eAAiB5mC,UAAQ2uC,MAA8B,SAAtB3uC,UAAQ4uC,KAAKh7B,OAAqByQ,SAASyB,gBAAkB3pB,KAAKsP,cAChGhP,IAAWN,KAAKwG,eARxBxG,KAAKw2B,gBACLx2B,KAAKuP,OACLvP,KAAKiqB,aAUjBse,EAAWroC,UAAUkwB,aAAe,WAChCxN,QAAMwN,aAAapwB,KAAK4D,WAAY5D,KAAK8iB,aAAaC,YAClD/iB,KAAKwnB,WACLxnB,KAAKwnB,SAAS5jB,UAAY5D,KAAK4D,UAC/B5D,KAAKwnB,SAASwpB,aAGtBzI,EAAWroC,UAAU+c,UAAY,WAC7B2F,QAAMuN,WAAWnwB,KAAKyE,QAASzE,KAAKsP,aAActP,KAAK2iB,gBACnD3iB,KAAKyE,SACLwC,eAAajH,KAAK8iB,aAAaC,WA78D5B,cA88DHhf,aAAW/D,KAAKsP,cAAgBlI,gBAAiB,UACjDpH,KAAKsP,aAAalL,aAAa,WAAYpE,KAAKiE,YAGhDjE,KAAKuP,OACLrI,YAAUlH,KAAK8iB,aAAaC,WAn9DzB,cAo9DHhf,aAAW/D,KAAKsP,cAAgBlI,gBAAiB,SACjDpH,KAAKsP,aAAarL,UAAY,IAGtCskC,EAAWroC,UAAUwyC,YAAc,SAAUjjC,EAAMqW,GACnC,QAARA,GACA9lB,KAAK4pC,QAAU5pC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAa36B,EAAKjN,OACnExC,KAAKoD,eAAgBZ,IAAKxC,KAAK4pC,UAAW,KAG1C5pC,KAAK6pC,QAAU7pC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAa36B,EAAKhN,OACnEzC,KAAKoD,eAAgBX,IAAKzC,KAAK6pC,UAAW,IAEd,KAA5B7pC,KAAKsP,aAAanJ,MAClBnG,KAAK0/B,eAAe1/B,KAAKmG,MAAOnG,KAAKwC,IAAKxC,KAAKyC,KAG/CzC,KAAKqG,WAAWrG,KAAKsP,aAAanJ,OAEtCnG,KAAK2vC,iBAAiB,MAAM,IAEhCpH,EAAWroC,UAAU2mB,iBAAmB,SAAUpZ,GAC9C,GAAKzN,KAAKyE,QAAV,CAIA,GAAIzE,KAAKyqC,eAAiBzqC,KAAKw2B,cAE3B,WADAx2B,MAAKsP,aAAaX,OAGtB3O,MAAKwuC,WAAW,EAAG/gC,GACfzN,KAAKwjB,YAAcxjB,KAAKkiB,iBAAmBliB,KAAK6jB,aAAuC,WAAxB7jB,KAAK2iB,iBAChE3iB,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,iBAAoBliB,KAAKmG,OAAkC,SAAxBnG,KAAK2iB,gBAAqD,UAAxB3iB,KAAK2iB,iBAA8B3iB,KAAK6jB,aAC9I7jB,KAAK8jB,iBAAiB,KAG9B7c,eAAajH,KAAK8iB,aAAaC,YAAa4kB,IACxC3nC,KAAK+tC,YAAc/tC,KAAKsP,aAAanJ,MACrCnG,KAAK00B,YAAa10B,kBAAmBmG,MAAOsH,GAEG,IAA1CzN,KAAKsP,aAAanJ,MAAM0X,OAAOld,QACpCX,KAAKgqC,aAEThqC,KAAK2uC,cAAgB,KACrB3uC,KAAKwqC,YAAa,EACc,KAA5BxqC,KAAKsP,aAAanJ,QAClBnG,KAAKgiB,mBAAqB,KAE9B,IAAI4H,IACAL,MAAOvpB,KAEXA,MAAKkb,QAAQ,OAAQ0O,KAOzB2e,EAAWroC,UAAU+pB,SAAW,WAC5B,GAAI/B,SAASyB,gBAAkB3pB,KAAKsP,aAAc,CAC9CtP,KAAKsP,aAAaoZ,OAClBzhB,eAAajH,KAAK8iB,aAAaC,YAAa4kB,GAC5C,IAAI/d,IACAL,MAAOvpB,KAEXA,MAAKkb,QAAQ,OAAQ0O,KAG7B2e,EAAWroC,UAAUs2B,YAAc,WAC/B,SAAIx2B,KAAKwG,eAAgBxG,KAAKwG,aAAa9C,UAAU+I,SAAS,GAAKtL,KAKvEonC,EAAWroC,UAAU0mB,kBAAoB,WACrC,GAAK5mB,KAAKyE,QAAV,CAGA,GAAI6kB,IACAC,MAAOvpB,KAENA,MAAKqjB,UAAaxf,UAAQC,UAAa9D,KAAKwjB,YAC7CxjB,KAAKktC,kBAELltC,KAAKwjB,aAAexjB,KAAKsP,aAAanJ,OAASnG,KAAK6jB,eAChD7jB,KAAKkiB,iBAAoBliB,KAAKmG,OAAkC,SAAxBnG,KAAK2iB,gBAAqD,UAAxB3iB,KAAK2iB,iBAA8B3iB,KAAK6jB,cAClH7jB,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKsP,aAAa8Z,eAAiB,EACnCppB,KAAKsP,aAAa+Z,aAAerpB,KAAKsP,aAAanJ,MAAMxF,SAGjEX,KAAKkb,QAAQ,QAASoO,GACtBtpB,KAAK0pC,iBACD1pC,KAAKwpB,aACLxpB,KAAK2oB,SAQb4f,EAAWroC,UAAUkuB,QAAU,WACvBlG,SAASyB,gBAAkB3pB,KAAKsP,cAAgBtP,KAAKyE,SACrDzE,KAAKsP,aAAaX,SAS1B45B,EAAWroC,UAAUqP,KAAO,WACxBvP,KAAKwuC,WAAW,IAAK,MACrBxuC,KAAK0pC,kBASTnB,EAAWroC,UAAUyoB,KAAO,SAAUtN,GAClC,GAAIvZ,GAAQ9B,IACZ,MAAKA,KAAKyE,SAAWzE,KAAKqjB,WAAcrjB,KAAKyE,SAAWzE,KAAKwG,cAA7D,CAIIxG,KAAK8pC,gBACDjmC,UAAQC,UAAY9D,KAAK+rC,cACzB/rC,KAAK0G,MAAQ1G,KAAKsE,cAAc,OAChCtE,KAAK0G,MAAMmB,UAAiB1G,EAAO,gBACnC+mB,SAAS4C,KAAKjjB,WAAa,mBAC3BqgB,SAAS4C,KAAKtiB,YAAYxI,KAAK0G,QAE/B7C,UAAQC,WACR9D,KAAKwvC,oBAAsBxvC,KAAKsE,cAAc,OAASuD,UAAW,gCAClEqgB,SAAS4C,KAAKtiB,YAAYxI,KAAKwvC,sBAEnCxvC,KAAK+oC,oBACDvb,MAAOxtB,KAAKwnB,UAAY,KACxBiG,QAAQ,EACRpS,MAAOA,GAAS,KAChB5D,KAAM,OACNiW,SAAU7pB,UAAQC,SAAW9D,KAAKwvC,oBAAsBtnB,SAAS4C,KAErE,IAAI6C,GAAY3tB,KAAK+oC,kBAoCrB,IAnCA/oC,KAAKkb,QAAQ,OAAQyS,EAAW,SAAUA,GAEtC,GADA7rB,EAAMinC,mBAAqBpb,EACtB7rB,EAAMinC,mBAAmBtb,QAAW3rB,EAAMghB,aAAaE,QAAQ,GAAGtf,UAAU+I,SA3mElF,cAsoEK3K,EAAM0lB,SAASlO,UACfxX,EAAM0E,aAAe1E,EAAMihC,YAAU3qB,GACrCtW,EAAMmwB,cAAgBnwB,EAAMsmC,gBAAkBtmC,EAAM0mC,yBACpD1mC,EAAM0lB,SAAW,SA9BgF,CACjG1lB,EAAMinC,mBAAmBrb,SAASllB,YAAY1G,EAAM0E,cACpD1E,EAAM6wC,eAAe7wC,EAAMinC,oBAC3BjnC,EAAM6iC,oBACD9gC,UAAQC,UACThC,EAAMwN,aAAaX,OAEvB,IAAIkf,IACApW,KAAM,SACNtP,SA/mEA,GAinEJrG,GAAM0lB,SAASoG,gBAAgB9rB,EAAMwnC,QAChB,MAAjBxnC,EAAMgF,OACNhF,EAAM0lB,SAASmB,KAAK,GAAImF,aAAUD,GAAgB/rB,EAAMD,SAGxDC,EAAM0lB,SAASmB,KAAK,GAAImF,aAAUD,GAAgB,MAEtD/rB,EAAMgX,sBACN/U,aAAWjC,EAAMwN,cAAgB4U,gBAAiB,SAClDngB,aAAWjC,EAAMwN,cAAgBwgB,YAAahuB,EAAMwN,aAAatG,GAAK,aACtEjF,aAAWjC,EAAMwN,cAAgBygB,gBAAiBjuB,EAAMwN,aAAatG,KACrE9B,YAAUpF,EAAMghB,aAAaC,WAAY4kB,GACzCt+B,eAAa1F,IAAIukB,SAAU,uBAAwBpmB,EAAMytC,qBAAsBztC,GAC/EA,EAAMyE,gBAAgBzE,EAAM0tC,oBAAqB1tC,EAAM0lB,SAAS3lB,QAASC,EAAM4E,MAAO7C,UAAQC,aASlGD,UAAQC,SAAU,CAClB,GAAIiqB,GAAa/tB,KAAKsE,cAAc,OAASuD,UAAW,iBACxDkmB,GAAWlnB,MAAMC,QAAU9G,KAAK8G,OAAS,GAAGC,WAC5C/G,KAAKwvC,oBAAoBhnC,YAAYulB,MAKjDwa,EAAWroC,UAAUqG,gBAAkB,SAAUC,EAAcosC,EAAkBlsC,EAAO5C,GACpF,GAAIA,IAAaZ,oBAAkB0vC,KAAsB1vC,oBAAkBwD,KAAWxD,oBAAkBsD,GAAe,CACnH,GAAIG,GAAQC,SAASgsC,EAAiB/rC,MAAMC,OAAQ,IAAMF,SAASgsC,EAAiB/rC,MAAMC,OAAQ,IAAM,GACxGJ,GAAMG,MAAMC,QAAUH,EAAQ,GAAGI,WACjCP,EAAaK,MAAMC,OAASH,EAAMI,aAG1CwhC,EAAWroC,UAAU2yC,aAAe,SAAU5qC,GAC1C,GAAI9B,EAOJ,OANoB,gBAAT8B,GACP9B,EAAQinB,aAAWnlB,GAEE,gBAATA,KACZ9B,EAAS8B,EAAKyiB,MAAM,WAAcziB,EAAOkO,MAAMvP,SAASqB,EAAM,KAAOA,EAAOmlB,aAAWnlB,IAEpF9B,GAEXoiC,EAAWroC,UAAUyyC,eAAiB,SAAUnpC,GAa5C,GAZAA,EAAKgkB,MAAMrC,SAASC,EAAIprB,KAAK6yC,aAAarpC,EAAKgkB,MAAMrC,SAASC,GAC9D5hB,EAAKgkB,MAAMrC,SAASE,EAAIrrB,KAAK6yC,aAAarpC,EAAKgkB,MAAMrC,SAASE,GACzDlV,MAAMs3B,WAAWjkC,EAAKgkB,MAAMrC,SAASC,KAAQjV,MAAMs3B,WAAWjkC,EAAKgkB,MAAMrC,SAASE,MACnFrrB,KAAKwnB,SAAS0D,SAAWlrB,KAAKspC,OAASphB,SAAS4C,KAChD9qB,KAAKwnB,SAAS+D,WAAa,aAE1BpV,MAAMs3B,WAAWjkC,EAAKgkB,MAAMrC,SAASC,MACtCprB,KAAKwnB,SAASkc,QAAU+J,WAAWjkC,EAAKgkB,MAAMrC,SAASC,IAEtDjV,MAAMs3B,WAAWjkC,EAAKgkB,MAAMrC,SAASE,MACtCrrB,KAAKwnB,SAAS8D,QAAUmiB,WAAWjkC,EAAKgkB,MAAMrC,SAASE,IAEtDxnB,UAAQC,SA2BqB,WAA1B0F,EAAKgkB,MAAMrC,SAASC,GAA4C,WAA1B5hB,EAAKgkB,MAAMrC,SAASE,IAC1DrrB,KAAKwnB,SAAS0D,SAAWlrB,KAAKspC,OAASphB,SAAS4C,KAChD9qB,KAAKwnB,SAAS8D,QAAU,EACxBtrB,KAAKwnB,SAAS+D,WAAa,YAC3BvrB,KAAKwnB,SAASgE,WAAcJ,EAAG,MAAOC,EAAG,YA/B1B,CACnB,OAAQ7hB,EAAKgkB,MAAMrC,SAASC,GACxB,IAAK,OACD,KACJ,KAAK,QACD5hB,EAAKgkB,MAAMkW,QAAU1jC,KAAKosC,eAAennB,KACzC,MACJ,KAAK,SACDzb,EAAKgkB,MAAMkW,SAAY1jC,KAAKosC,eAAennB,MAAQ,EAG3D,OAAQzb,EAAKgkB,MAAMrC,SAASE,GACxB,IAAK,MAEL,IAAK,SACD,KACJ,KAAK,SACD7hB,EAAKgkB,MAAMlC,SAAYtrB,KAAKosC,eAAezK,OAAS,EAG9B,WAA1Bn4B,EAAKgkB,MAAMrC,SAASC,GAA4C,WAA1B5hB,EAAKgkB,MAAMrC,SAASE,IAC1DrrB,KAAKwnB,SAAS0D,SAAWlrB,KAAK8iB,aAAaC,UAC3C/iB,KAAKspC,OAAStpC,KAAKsP,aACnBtP,KAAKwnB,SAAS+D,WAAa,cAkBvCgd,EAAWroC,UAAUwX,eAAiB,WAClC,GAAIC,IAAa,QACjB,OAAO3X,MAAK4X,aAAaD,IAS7B4wB,EAAWroC,UAAUuD,cAAgB,WACjC,MAAO,cAUX8kC,EAAWroC,UAAU2X,kBAAoB,SAAUC,EAASC,GACxD,IAAK,GAAIvN,GAAK,EAAGC,EAAKhL,OAAOiL,KAAKoN,GAAUtN,EAAKC,EAAG9J,OAAQ6J,IAAM,CAC9D,GAAIwN,GAAOvN,EAAGD,EACd,QAAQwN,GACJ,IAAK,cACD4K,QAAMqN,eAAenY,EAAQ+L,YAAa7jB,KAAKsP,aAC/C,MACJ,KAAK,WACDsT,QAAMsN,YAAYlwB,KAAKqjB,SAAUrjB,KAAKsP,aAActP,KAAK2iB,gBACrD3iB,KAAKqjB,UACLrjB,KAAKuP,OAETvP,KAAKipC,kBACL,MACJ,KAAK,UACDjpC,KAAKoD,eAAgBqB,QAASqT,EAAQrT,UAAW,GACjDzE,KAAKid,WACL,MACJ,KAAK,YACDjd,KAAKipC,kBACL,MACJ,KAAK,YACDjpC,KAAKoD,eAAgBQ,UAAWkU,EAAQlU,YAAa,GACrD5D,KAAKowB,cACL,MACJ,KAAK,WACDpwB,KAAKipB,eAAenR,EAAQqF,SAAUpF,EAAQoF,SAC9C,MACJ,KAAK,SACDnd,KAAKoD,eAAgB0D,OAAQgR,EAAQhR,SAAU,GAC/C9G,KAAK+wC,WACL,MACJ,KAAK,iBACD/wC,KAAKgpB,+BACLhpB,KAAK4jB,+BACL5jB,KAAKsqC,iBAAgB,EACrB,MACJ,KAAK,MACL,IAAK,MACDtqC,KAAK0yC,YAAY56B,EAASE,EAC1B,MACJ,KAAK,kBACD4K,QAAMyN,eAAerwB,KAAK8kB,gBAAiB9kB,KAAKsP,aAActP,KAAK8iB,cACnE9iB,KAAK6nB,gBACL,MACJ,KAAK,SACD7nB,KAAKoD,eAAgBH,OAAQ6U,EAAQ7U,SAAU,GAC/CjD,KAAK+C,UAAY,GAAIC,wBAAqBhD,KAAKiD,QAC/CjD,KAAKwkB,KAAKrM,UAAUnY,KAAKiD,QACrBjD,KAAKyoC,aAA+C,MAAhCzoC,KAAKyoC,YAAY5kB,aACrC7jB,KAAKsuC,oBAETtuC,KAAKyoB,SAASzoB,KAAKmG,OACfnG,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,QACDovB,oBAAkB9yC,KAAK8iB,aAAaC,WAAakC,MAASjlB,KAAKglB,SAASlN,EAAQmN,SAChFjlB,KAAKosC,eAAiBpsC,KAAK8iB,aAAaC,UAAU6e,wBAClDhf,QAAMC,eAAe7iB,KAAKsP,aAActP,KAAK8iB,aAAaC,WACrD7f,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,SACD3D,KAAKoD,eAAgBoP,OAAQsF,EAAQtF,SAAU,GAC/CxS,KAAKmqC,kBACLnqC,KAAKyoB,SAASzoB,KAAKmG,OACfnG,KAAKwjB,aACLxjB,KAAKkvC,aACAlvC,KAAKmG,OACNnG,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAGnC,MACJ,KAAK,QACDliB,KAAKgiB,mBAAqB,KAC1BhiB,KAAKujB,kBAAkBzL,EAAQ3R,OAC/B2R,EAAQ3R,MAAQnG,KAAKmG,MAChBnG,KAAKgiB,oBAcNhiB,KAAK8jB,iBAAiB9jB,KAAKgiB,oBAC3BhiB,KAAKqpC,gBAAgBrpC,KAAKgiB,sBAdG,gBAAlBlK,GAAQ3R,OACfnG,KAAKoD,eAAgB+C,MAAOnG,KAAKoG,eAAe,GAAItD,MAAKgV,EAAQ3R,UAAW,GAC5E2R,EAAQ3R,MAAQnG,KAAKmG,QAGhB2R,EAAQ3R,QAAU,GAAIrD,OAAMgV,EAAQ3R,OAAOmY,gBAAgB,OAASte,KAAKmG,QAC1E2R,EAAQ3R,MAAQnG,KAAKoG,eAAe,GAAItD,MAAK,GAAKgV,EAAQ3R,SAGlEnG,KAAKiqC,UAAYnyB,EAAQ3R,MACzB2R,EAAQ3R,MAAQnG,KAAKquC,oBAAoBruC,KAAKqG,WAAWyR,EAAQ3R,SAMjEnG,KAAKwjB,YAActgB,oBAAkB4U,EAAQ3R,SAC7CnG,KAAK8jB,iBAAiB9jB,KAAKkiB,iBAC3BliB,KAAKqpC,gBAAgBrpC,KAAKkiB,kBAE9BliB,KAAK2vC,iBAAiB,MAAM,GACxB3vC,KAAKw2B,eACLx2B,KAAK2kC,oBAEL3kC,KAAKqP,WAAarP,KAAKoC,gBACvBpC,KAAKoC,eAAgB,GAErBpC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,iBACD1jB,KAAK2iB,eAAiB7K,EAAQ6K,eAC9BC,QAAM0N,eAAetwB,KAAK8iB,cAC1BF,QAAM2N,YAAYvwB,KAAKsP,aAActP,KAAK2iB,eAAgB3iB,KAAK6jB,aAC1D3gB,oBAAkBlD,KAAK8iB,aAAaE,QAAQ,KAAQ9f,oBAAkBlD,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBjjB,KAAK2iB,gBAC/J3iB,KAAK8iB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAGvf,UAAUC,IAAI,SAEjG,MACJ,KAAK,aACD3D,KAAKgiB,mBAAqB,KACtBlK,EAAQwN,YACRtlB,KAAKqpC,gBAAgB,MAEzBrpC,KAAKoD,eAAgBkiB,WAAYxN,EAAQwN,aAAc,GACvDtlB,KAAKqG,WAAYrG,kBAAmBmG,OACpCnG,KAAK2vC,iBAAiB,MAAM,EAC5B,MACJ,KAAK,WACG3vC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAatyB,EAAQuyB,aACnDrqC,KAAKwG,cACLxG,KAAK0tC,cAET1tC,KAAKoD,eAAgBinC,SAAUrqC,KAAKoG,eAAe,GAAItD,MAAK9C,KAAKoqC,aAAatyB,EAAQuyB,cAAe,IAGrGrqC,KAAKoD,eAAgBinC,SAAU,OAAQ,EAE3C,MACJ,KAAK,aACGrqC,KAAKwjB,YACLxjB,KAAKyjB,OAAO,cACRC,OAAQ,mBAEZ1jB,KAAK8jB,iBAAiB9jB,KAAKkiB,kBAGvBliB,KAAKsP,aAAanJ,QAAUnG,KAAKkiB,iBACjCliB,KAAK8jB,iBAAiB,OAO9CykB,EAAWroC,UAAUkqC,aAAe,SAAUluB,GAC1C,MAAIA,aAAmBpZ,MACXoZ,EAAQC,cAGR,GAAKD,GAGrB9b,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,YAAS,IAClCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,eAAY,IACrCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,iBAAc,IACvCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,iBAAc,IACvCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,aAAU,IACnCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,cAAW,IACpCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,qBAAkB,IAC3CE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,eAAY,IACrCE,GACIkc,gBACDisB,EAAWroC,UAAW,qBAAkB,IAC3CE,GACIkc,WAAS,UACVisB,EAAWroC,UAAW,qBAAkB,IAC3CE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,kBAAe,IACxCE,GACIkc,WAAS,MACVisB,EAAWroC,UAAW,aAAU,IACnCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,wBAAqB,IAC9CE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,sBAAmB,IAC5CE,GACIkc,WAAS,KACVisB,EAAWroC,UAAW,WAAQ,IACjCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,eAAY,IACrCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,YAAS,IAClCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,UAAO,IAChCE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,UAAO,IAChCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,gBAAa,IACtCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,kBAAe,IACxCE,GACIkc,YAAS,IACVisB,EAAWroC,UAAW,iBAAc,IACvCE,GACIkc,YAAW5K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQgb,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtH4X,EAAWroC,UAAW,sBAAmB,IAC5CE,GACIkc,WAAS,OACVisB,EAAWroC,UAAW,2BAAwB,IACjDE,GACImc,WACDgsB,EAAWroC,UAAW,aAAU,IACnCE,GACImc,WACDgsB,EAAWroC,UAAW,cAAW,IACpCE,GACImc,WACDgsB,EAAWroC,UAAW,gBAAa,IACtCE,GACImc,WACDgsB,EAAWroC,UAAW,WAAQ,IACjCE,GACImc,WACDgsB,EAAWroC,UAAW,iBAAc,IACvCE,GACImc,WACDgsB,EA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S,OACV62B,EAAejzC,UAAW,qBAAkB,IAC/CE,IACIkc,WAAS,cACV62B,EAAejzC,UAAW,mBAAgB,IAC7CE,IACIkc,WAAS,UACV62B,EAAejzC,UAAW,YAAS,IACtCE,IACIkc,WAAS,UACV62B,EAAejzC,UAAW,YAAS,IACtCE,IACIkc,YAAS,IACV62B,EAAejzC,UAAW,iBAAc,IAC3CE,IACIkc,YAAS,IACV62B,EAAejzC,UAAW,sBAAmB,IAChDE,IACIkc,WAAS,UACV62B,EAAejzC,UAAW,sBAAmB,IAChDE,IACIkc,YAAS,IACV62B,EAAejzC,UAAW,kBAAe,IAC5CE,IACIkc,YAAS,IACV62B,EAAejzC,UAAW,iBAAc,IAC3CE,IACIkc,YAAW5K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQgb,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtHwiB,EAAejzC,UAAW,sBAAmB,IAChDE,IACImc,WACD42B,EAAejzC,UAAW,WAAQ,IACrCE,IACImc,WACD42B,EAAejzC,UAAW,YAAS,IACtCE,IACImc,WACD42B,EAAejzC,UAAW,cAAW,IACxCE,IACImc,WACD42B,EAAejzC,UAAW,WAAQ,IACrCE,IACImc,WACD42B,EAAejzC,UAAW,YAAS,IACtCE,IACImc,WACD42B,EAAejzC,UAAW,cAAW,IACxCE,IACImc,WACD42B,EAAejzC,UAAW,gBAAa,IAC1CizC,EAAiB/yC,IACboc,yBACD22B,IAELtxB,GC/qDE22B,GAAgC,WAChC,QAASA,GAAeC,GACpBz4C,KAAK04C,KAAO,GACZ14C,KAAKgzB,iBACDthB,IAAK,MACLkD,MAAO,QACPY,KAAM,OACNgb,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,aAAc,mBAElB3wB,KAAK24C,WAAa,GAClB34C,KAAK44C,gBAAkB,aACvB54C,KAAK64C,WAAY,EACjB74C,KAAK84C,aAAc,EACnB94C,KAAK+4C,YAAa,EAClB/4C,KAAKg5C,YAAa,EAClBh5C,KAAKi5C,cAAe,EACpBj5C,KAAKk5C,eAAgB,EACrBl5C,KAAKm5C,oBA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"}