primeng 13.0.3 → 13.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/translation.d.ts +1 -0
- package/api/translationkeys.d.ts +1 -0
- package/calendar/calendar.d.ts +5 -2
- package/esm2020/api/primengconfig.mjs +2 -1
- package/esm2020/api/translation.mjs +1 -1
- package/esm2020/api/translationkeys.mjs +2 -1
- package/esm2020/calendar/calendar.mjs +19 -9
- package/esm2020/dropdown/dropdown.mjs +2 -2
- package/esm2020/password/password.mjs +8 -3
- package/esm2020/table/table.mjs +76 -63
- package/esm2020/tabmenu/tabmenu.mjs +23 -12
- package/esm2020/treetable/treetable.mjs +14 -17
- package/fesm2015/primeng-api.mjs +2 -0
- package/fesm2015/primeng-api.mjs.map +1 -1
- package/fesm2015/primeng-calendar.mjs +18 -8
- package/fesm2015/primeng-calendar.mjs.map +1 -1
- package/fesm2015/primeng-dropdown.mjs +1 -1
- package/fesm2015/primeng-dropdown.mjs.map +1 -1
- package/fesm2015/primeng-password.mjs +7 -2
- package/fesm2015/primeng-password.mjs.map +1 -1
- package/fesm2015/primeng-table.mjs +75 -62
- package/fesm2015/primeng-table.mjs.map +1 -1
- package/fesm2015/primeng-tabmenu.mjs +22 -11
- package/fesm2015/primeng-tabmenu.mjs.map +1 -1
- package/fesm2015/primeng-treetable.mjs +13 -16
- package/fesm2015/primeng-treetable.mjs.map +1 -1
- package/fesm2020/primeng-api.mjs +2 -0
- package/fesm2020/primeng-api.mjs.map +1 -1
- package/fesm2020/primeng-calendar.mjs +18 -8
- package/fesm2020/primeng-calendar.mjs.map +1 -1
- package/fesm2020/primeng-dropdown.mjs +1 -1
- package/fesm2020/primeng-dropdown.mjs.map +1 -1
- package/fesm2020/primeng-password.mjs +7 -2
- package/fesm2020/primeng-password.mjs.map +1 -1
- package/fesm2020/primeng-table.mjs +75 -62
- package/fesm2020/primeng-table.mjs.map +1 -1
- package/fesm2020/primeng-tabmenu.mjs +22 -11
- package/fesm2020/primeng-tabmenu.mjs.map +1 -1
- package/fesm2020/primeng-treetable.mjs +13 -16
- package/fesm2020/primeng-treetable.mjs.map +1 -1
- package/package.json +1 -1
- package/password/password.d.ts +1 -0
- package/resources/themes/lara-dark-blue/theme.css +349 -349
- package/resources/themes/lara-dark-indigo/theme.css +349 -349
- package/resources/themes/lara-dark-purple/theme.css +349 -349
- package/resources/themes/lara-dark-teal/theme.css +349 -349
- package/table/table.d.ts +7 -4
- package/tabmenu/tabmenu.d.ts +7 -1
- package/treetable/treetable.d.ts +2 -1
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"primeng-calendar.mjs","sources":["../../src/app/components/calendar/calendar.ts","../../src/app/components/calendar/primeng-calendar.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,OnInit,Input,Output,EventEmitter,forwardRef,Renderer2,\n        ViewChild,ChangeDetectorRef,TemplateRef,ContentChildren,QueryList,NgZone,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {SharedModule,PrimeTemplate,PrimeNGConfig,TranslationKeys, OverlayService} from 'primeng/api';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {UniqueComponentId, ZIndexUtils} from 'primeng/utils';\n\nexport const CALENDAR_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Calendar),\n    multi: true\n};\n\nexport interface LocaleSettings {\n    firstDayOfWeek?: number;\n    dayNames?: string[];\n    dayNamesShort?: string[];\n    dayNamesMin?: string[];\n    monthNames?: string[];\n    monthNamesShort?: string[];\n    today?: string;\n    clear?: string;\n    dateFormat?: string;\n    weekHeader?: string;\n}\n\n@Component({\n    selector: 'p-calendar',\n    template:  `\n        <span #container [ngClass]=\"{'p-calendar':true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled':disabled, 'p-focus': focus}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ng-template [ngIf]=\"!inline\">\n                <input #inputfield type=\"text\" [attr.id]=\"inputId\" [attr.name]=\"name\" [attr.required]=\"required\" [attr.aria-required]=\"required\" [value]=\"inputFieldValue\" (focus)=\"onInputFocus($event)\" (keydown)=\"onInputKeydown($event)\" (click)=\"onInputClick()\" (blur)=\"onInputBlur($event)\"\n                    [readonly]=\"readonlyInput\" (input)=\"onUserInput($event)\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [placeholder]=\"placeholder||''\" [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" [attr.inputmode]=\"touchUI ? 'off' : null\"\n                    [ngClass]=\"'p-inputtext p-component'\" autocomplete=\"off\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n                    ><button type=\"button\" [attr.aria-label]=\"iconAriaLabel\" [icon]=\"icon\" pButton pRipple *ngIf=\"showIcon\" (click)=\"onButtonClick($event,inputfield)\" class=\"p-datepicker-trigger\"\n                    [disabled]=\"disabled\" tabindex=\"0\"></button>\n            </ng-template>\n            <div #contentWrapper [class]=\"panelStyleClass\" [ngStyle]=\"panelStyle\" [ngClass]=\"{'p-datepicker p-component': true, 'p-datepicker-inline':inline,\n                'p-disabled':disabled,'p-datepicker-timeonly':timeOnly,'p-datepicker-multiple-month': this.numberOfMonths > 1, 'p-datepicker-monthpicker': (view === 'month'), 'p-datepicker-touch-ui': touchUI}\"\n                [@overlayAnimation]=\"touchUI ? {value: 'visibleTouchUI', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}:\n                                            {value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                                            [@.disabled]=\"inline === true\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\" (click)=\"onOverlayClick($event)\" *ngIf=\"inline || overlayVisible\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ng-container *ngIf=\"!timeOnly\">\n                    <div class=\"p-datepicker-group-container\">\n                        <div class=\"p-datepicker-group\" *ngFor=\"let month of months; let i = index;\">\n                            <div class=\"p-datepicker-header\">\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-prev p-link\" (click)=\"onPrevButtonClick($event)\" *ngIf=\"i === 0\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-prev-icon pi pi-chevron-left\"></span>\n                                </button>\n                                <div class=\"p-datepicker-title\">\n                                    <button type=\"button\" (click)=\"switchToMonthView($event)\" (keydown)=\"onContainerButtonKeydown($event)\" *ngIf=\"currentView === 'date'\" class=\"p-datepicker-month p-link\" [disabled]=\"switchViewButtonDisabled()\">\n                                        {{getMonthName(month.month)}}\n                                    </button>\n                                    <button type=\"button\" (click)=\"switchToYearView($event)\" (keydown)=\"onContainerButtonKeydown($event)\" *ngIf=\"currentView !== 'year'\" class=\"p-datepicker-year p-link\" [disabled]=\"switchViewButtonDisabled()\">\n                                        {{currentYear}}\n                                    </button>\n                                    <span class=\"p-datepicker-decade\" *ngIf=\"currentView === 'year'\">\n                                        <ng-container *ngIf=\"!decadeTemplate\">{{yearPickerValues()[0]}} - {{yearPickerValues()[yearPickerValues().length - 1]}}</ng-container>\n                                        <ng-container *ngTemplateOutlet=\"decadeTemplate; context: {$implicit: yearPickerValues}\"></ng-container>\n                                    </span>\n                                </div>\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-next p-link\" (click)=\"onNextButtonClick($event)\" [style.display]=\"numberOfMonths === 1 ? 'inline-flex' : (i === numberOfMonths -1) ? 'inline-flex' : 'none'\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-next-icon pi pi-chevron-right\"></span>\n                                </button>\n                            </div>\n                            <div class=\"p-datepicker-calendar-container\" *ngIf=\"currentView ==='date'\">\n                                <table class=\"p-datepicker-calendar\">\n                                    <thead>\n                                        <tr>\n                                            <th *ngIf=\"showWeek\" class=\"p-datepicker-weekheader p-disabled\">\n                                                <span>{{getTranslation('weekHeader')}}</span>\n                                            </th>\n                                            <th scope=\"col\" *ngFor=\"let weekDay of weekDays;let begin = first; let end = last\">\n                                                <span>{{weekDay}}</span>\n                                            </th>\n                                        </tr>\n                                    </thead>\n                                    <tbody>\n                                        <tr *ngFor=\"let week of month.dates; let j = index;\">\n                                            <td *ngIf=\"showWeek\" class=\"p-datepicker-weeknumber\">\n                                                <span class=\"p-disabled\">\n                                                    {{month.weekNumbers[j]}}\n                                                </span>\n                                            </td>\n                                            <td *ngFor=\"let date of week\" [ngClass]=\"{'p-datepicker-other-month': date.otherMonth,'p-datepicker-today':date.today}\">\n                                                <ng-container *ngIf=\"date.otherMonth ? showOtherMonths : true\">\n                                                    <span [ngClass]=\"{'p-highlight':isSelected(date), 'p-disabled': !date.selectable}\"\n                                                        (click)=\"onDateSelect($event,date)\" draggable=\"false\" (keydown)=\"onDateCellKeydown($event,date,i)\" pRipple>\n                                                        <ng-container *ngIf=\"!dateTemplate\">{{date.day}}</ng-container>\n                                                        <ng-container *ngTemplateOutlet=\"dateTemplate; context: {$implicit: date}\"></ng-container>\n                                                    </span>\n                                                </ng-container>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"p-monthpicker\" *ngIf=\"currentView === 'month'\">\n                        <span *ngFor=\"let m of monthPickerValues(); let i = index\" (click)=\"onMonthSelect($event, i)\" (keydown)=\"onMonthCellKeydown($event,i)\" class=\"p-monthpicker-month\" [ngClass]=\"{'p-highlight': isMonthSelected(i), 'p-disabled':!isSelectable(1, i, this.currentYear, false)}\" pRipple>\n                            {{m}}\n                        </span>\n                    </div>\n                    <div class=\"p-yearpicker\" *ngIf=\"currentView === 'year'\">\n                        <span *ngFor=\"let y of yearPickerValues()\" (click)=\"onYearSelect($event, y)\" (keydown)=\"onYearCellKeydown($event,y)\" class=\"p-yearpicker-year\" [ngClass]=\"{'p-highlight': isYearSelected(y)}\" pRipple>\n                            {{y}}\n                        </span>\n                    </div>\n                </ng-container>\n                <div class=\"p-timepicker\" *ngIf=\"showTime||timeOnly\">\n                    <div class=\"p-hour-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementHour($event)\" (keydown.space)=\"incrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentHour < 10\">0</ng-container>{{currentHour}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementHour($event)\" (keydown.space)=\"decrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-minute-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementMinute($event)\" (keydown.space)=\"incrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentMinute < 10\">0</ng-container>{{currentMinute}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementMinute($event)\" (keydown.space)=\"decrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\" *ngIf=\"showSeconds\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-second-picker\" *ngIf=\"showSeconds\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementSecond($event)\" (keydown.space)=\"incrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentSecond < 10\">0</ng-container>{{currentSecond}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementSecond($event)\" (keydown.space)=\"decrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-ampm-picker\" *ngIf=\"hourFormat=='12'\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span>{{pm ? 'PM' : 'AM'}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div class=\"p-datepicker-buttonbar\" *ngIf=\"showButtonBar\">\n                    <button type=\"button\" [label]=\"getTranslation('today')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onTodayButtonClick($event)\" pButton pRipple [ngClass]=\"[todayButtonStyleClass]\"></button>\n                    <button type=\"button\" [label]=\"getTranslation('clear')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onClearButtonClick($event)\" pButton pRipple [ngClass]=\"[clearButtonStyleClass]\"></button>\n                </div>\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            state('visibleTouchUI', style({\n                transform: 'translate(-50%,-50%)',\n                opacity: 1\n            })),\n            transition('void => visible', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))\n            ]),\n            transition('visible => void', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n            ]),\n            transition('void => visibleTouchUI', [\n                style({opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)'}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('visibleTouchUI => void', [\n                animate(('{{hideTransitionParams}}'),\n                style({\n                    opacity: 0,\n                    transform: 'translate3d(-50%, -40%, 0) scale(0.9)'\n                }))\n            ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focus'\n    },\n    providers: [CALENDAR_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./calendar.css']\n})\nexport class Calendar implements OnInit,OnDestroy,ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() inputStyleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() iconAriaLabel: string;\n\n    @Input() disabled: any;\n\n    @Input() dateFormat: string;\n\n    @Input() multipleSeparator: string = ',';\n\n    @Input() rangeSeparator: string = '-';\n\n    @Input() inline: boolean = false;\n\n    @Input() showOtherMonths: boolean = true;\n\n    @Input() selectOtherMonths: boolean;\n\n    @Input() showIcon: boolean;\n\n    @Input() icon: string = 'pi pi-calendar';\n\n    @Input() appendTo: any;\n\n    @Input() readonlyInput: boolean;\n\n    @Input() shortYearCutoff: any = '+10';\n\n    @Input() monthNavigator: boolean;\n\n    @Input() yearNavigator: boolean;\n\n    @Input() hourFormat: string = '24';\n\n    @Input() timeOnly: boolean;\n\n    @Input() stepHour: number = 1;\n\n    @Input() stepMinute: number = 1;\n\n    @Input() stepSecond: number = 1;\n\n    @Input() showSeconds: boolean = false;\n\n    @Input() required: boolean;\n\n    @Input() showOnFocus: boolean = true;\n\n    @Input() showWeek: boolean = false;\n\n    @Input() dataType: string = 'date';\n\n    @Input() selectionMode: string = 'single';\n\n    @Input() maxDateCount: number;\n\n    @Input() showButtonBar: boolean;\n\n    @Input() todayButtonStyleClass: string = 'p-button-text';\n\n    @Input() clearButtonStyleClass: string = 'p-button-text';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() panelStyleClass: string;\n\n    @Input() panelStyle: any;\n\n    @Input() keepInvalid: boolean = false;\n\n    @Input() hideOnDateTimeSelect: boolean = true;\n\n    @Input() touchUI: boolean;\n\n    @Input() timeSeparator: string = \":\";\n\n    @Input() focusTrap: boolean = true;\n\n    @Input() firstDayOfWeek: number = 0;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTodayClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClearClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMonthChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onYearChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClickOutside: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Input() tabindex: number;\n\n    @ViewChild('container', { static: false }) containerViewChild: ElementRef;\n\n    @ViewChild('inputfield', { static: false }) inputfieldViewChild: ElementRef;\n\n    @ViewChild('contentWrapper', { static: false }) set content (content: ElementRef) {\n        this.contentViewChild = content;\n\n        if (this.contentViewChild) {\n            if (this.isMonthNavigate) {\n                Promise.resolve(null).then(() => this.updateFocus());\n                this.isMonthNavigate = false;\n            }\n            else {\n                if (!this.focus) {\n                    this.initFocusableCell();\n                }\n            }\n        }\n    };\n\n    contentViewChild: ElementRef;\n\n    value: any;\n\n    dates: any[];\n\n    months: any[];\n\n    weekDays: string[];\n\n    currentMonth: number;\n\n    currentYear: number;\n\n    currentHour: number;\n\n    currentMinute: number;\n\n    currentSecond: number;\n\n    pm: boolean;\n\n    mask: HTMLDivElement;\n\n    maskClickListener: Function;\n\n    overlay: HTMLDivElement;\n\n    responsiveStyleElement: any;\n\n    overlayVisible: boolean;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    calendarElement: any;\n\n    timePickerTimer:any;\n\n    documentClickListener: any;\n\n    animationEndListener: any;\n\n    ticksTo1970: number;\n\n    yearOptions: number[];\n\n    focus: boolean;\n\n    isKeydown: boolean;\n\n    filled: boolean;\n\n    inputFieldValue: string = null;\n\n    _minDate: Date;\n\n    _maxDate: Date;\n\n    _showTime: boolean;\n\n    _yearRange: string;\n\n    preventDocumentListener: boolean;\n\n    dateTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    disabledDateTemplate: TemplateRef<any>;\n\n    decadeTemplate: TemplateRef<any>;\n\n    _disabledDates: Array<Date>;\n\n    _disabledDays: Array<number>;\n\n    selectElement: any;\n\n    todayElement: any;\n\n    focusElement: any;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    navigationState: any = null;\n\n    isMonthNavigate: boolean;\n\n    initialized: boolean;\n\n    translationSubscription: Subscription;\n\n    _locale: LocaleSettings;\n\n    _responsiveOptions: any[];\n\n    currentView: string;\n\n    attributeSelector: string;\n\n    _numberOfMonths: number = 1;\n\n    _view: string = 'date';\n\n    preventFocus: boolean;\n\n    @Input() get view(): string {\n        return this._view;\n    };\n\n    set view(view: string) {\n        this._view = view;\n        this.currentView = this._view;\n    }\n\n\n    @Input() get defaultDate(): Date {\n        return this._defaultDate;\n    };\n\n    set defaultDate(defaultDate: Date) {\n        this._defaultDate = defaultDate;\n\n        if (this.initialized) {\n            const date = defaultDate||new Date();\n            this.currentMonth = date.getMonth();\n            this.currentYear = date.getFullYear();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    _defaultDate: Date;\n\n    @Input() get minDate(): Date {\n        return this._minDate;\n    }\n\n    set minDate(date: Date) {\n        this._minDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get maxDate(): Date {\n        return this._maxDate;\n    }\n\n    set maxDate(date: Date) {\n        this._maxDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDates(): Date[] {\n        return this._disabledDates;\n    }\n\n    set disabledDates(disabledDates: Date[]) {\n        this._disabledDates = disabledDates;\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDays(): number[] {\n        return this._disabledDays;\n    }\n\n    set disabledDays(disabledDays: number[]) {\n        this._disabledDays = disabledDays;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get yearRange(): string {\n        return this._yearRange;\n    }\n\n    set yearRange(yearRange: string) {\n        this._yearRange = yearRange;\n\n        if (yearRange) {\n            const years = yearRange.split(':');\n            const yearStart = parseInt(years[0]);\n            const yearEnd = parseInt(years[1]);\n\n            this.populateYearOptions(yearStart, yearEnd);\n        }\n    }\n\n    @Input() get showTime(): boolean {\n        return this._showTime;\n    }\n\n    set showTime(showTime: boolean) {\n        this._showTime = showTime;\n\n        if (this.currentHour === undefined) {\n            this.initTime(this.value||new Date());\n        }\n        this.updateInputfield();\n    }\n\n    get locale() {\n       return this._locale;\n    }\n\n    @Input() get responsiveOptions(): any[] {\n        return this._responsiveOptions;\n    };\n\n    set responsiveOptions(responsiveOptions: any[]) {\n        this._responsiveOptions = responsiveOptions;\n\n        this.destroyResponsiveStyleElement();\n        this.createResponsiveStyle();\n    }\n\n\n    @Input() get numberOfMonths(): number {\n        return this._numberOfMonths;\n    }\n\n    set numberOfMonths(numberOfMonths: number) {\n        this._numberOfMonths = numberOfMonths;\n\n        this.destroyResponsiveStyleElement();\n        this.createResponsiveStyle();\n    }\n\n    @Input()\n    set locale(newLocale: LocaleSettings) {\n        console.warn(\"Locale property has no effect, use new i18n API instead.\");\n    }\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, private zone: NgZone, private config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngOnInit() {\n        this.attributeSelector = UniqueComponentId();\n        const date = this.defaultDate||new Date();\n        this.createResponsiveStyle();\n        this.currentMonth = date.getMonth();\n        this.currentYear = date.getFullYear();\n        this.currentView = this.view;\n\n        if (this.view === 'date') {\n            this.createWeekDays();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n            this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.createWeekDays();\n        });\n\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'date':\n                    this.dateTemplate = item.template;\n                break;\n\n                case 'decade':\n                    this.decadeTemplate = item.template;\n                break;\n\n                case 'disabledDate':\n                    this.disabledDateTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.dateTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.inline) {\n            this.contentViewChild && this.contentViewChild.nativeElement.setAttribute(this.attributeSelector, '');\n\n            if (!this.disabled) {\n                this.initFocusableCell();\n                if (this.numberOfMonths === 1) {\n                    this.contentViewChild.nativeElement.style.width = DomHandler.getOuterWidth(this.containerViewChild.nativeElement) + 'px';\n                }\n            }\n        }\n    }\n\n    getTranslation(option: string) {\n        return this.config.getTranslation(option);\n    }\n\n    populateYearOptions(start, end) {\n        this.yearOptions = [];\n\n        for (let i = start; i <= end; i++) {\n            this.yearOptions.push(i);\n        }\n    }\n\n    createWeekDays() {\n        this.weekDays = [];\n        let dayIndex = this.firstDayOfWeek;\n        let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);\n        for (let i = 0; i < 7; i++) {\n            this.weekDays.push(dayLabels[dayIndex]);\n            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;\n        }\n    }\n\n    monthPickerValues() {\n        let monthPickerValues = [];\n        for (let i = 0; i <= 11; i++) {\n            monthPickerValues.push(this.config.getTranslation('monthNamesShort')[i]);\n        }\n\n        return monthPickerValues;\n    }\n\n    yearPickerValues() {\n        let yearPickerValues = [];\n        let base = this.currentYear -  (this.currentYear % 10);\n        for (let i = 0; i < 10; i++) {\n            yearPickerValues.push(base + i);\n        }\n\n        return yearPickerValues;\n    }\n\n    createMonths(month: number, year: number) {\n        this.months = this.months = [];\n        for (let i = 0 ; i < this.numberOfMonths; i++) {\n            let m = month + i;\n            let y = year;\n            if (m > 11) {\n                m = m % 11 - 1;\n                y = year + 1;\n            }\n\n            this.months.push(this.createMonth(m, y));\n        }\n    }\n\n    getWeekNumber(date: Date) {\n        let checkDate = new Date(date.getTime());\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ));\n\t\tlet time = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 );\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round((time - checkDate.getTime()) / 86400000 ) / 7 ) + 1;\n    }\n\n    createMonth(month: number, year: number) {\n        let dates = [];\n        let firstDay = this.getFirstDayOfMonthIndex(month, year);\n        let daysLength = this.getDaysCountInMonth(month, year);\n        let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n        let dayNo = 1;\n        let today = new Date();\n        let weekNumbers = [];\n        let monthRows = Math.ceil((daysLength + firstDay) / 7);\n\n        for (let i = 0; i < monthRows; i++) {\n            let week = [];\n\n            if (i == 0) {\n                for (let j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {\n                    let prev = this.getPreviousMonthAndYear(month, year);\n                    week.push({day: j, month: prev.month, year: prev.year, otherMonth: true,\n                            today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year, true)});\n                }\n\n                let remainingDaysLength = 7 - week.length;\n                for (let j = 0; j < remainingDaysLength; j++) {\n                    week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    dayNo++;\n                }\n            }\n            else {\n                for (let j = 0; j < 7; j++) {\n                    if (dayNo > daysLength) {\n                        let next = this.getNextMonthAndYear(month, year);\n                        week.push({day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,\n                                    today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n                                    selectable: this.isSelectable((dayNo - daysLength), next.month, next.year, true)});\n                    }\n                    else {\n                        week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    }\n\n                    dayNo++;\n                }\n            }\n\n            if (this.showWeek) {\n                weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));\n            }\n\n            dates.push(week);\n        }\n\n        return {\n            month: month,\n            year: year,\n            dates: dates,\n            weekNumbers: weekNumbers\n        };\n    }\n\n    initTime(date: Date) {\n        this.pm = date.getHours() > 11;\n\n        if (this.showTime) {\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n            this.setCurrentHourPM(date.getHours());\n        }\n        else if (this.timeOnly) {\n            this.currentMinute = 0;\n            this.currentHour = 0;\n            this.currentSecond = 0;\n        }\n    }\n\n    navBackward(event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.currentView === 'month') {\n            this.decrementYear();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else if (this.currentView === 'year') {\n            this.decrementDecade();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else {\n            if (this.currentMonth === 0) {\n                this.currentMonth = 11;\n                this.decrementYear();\n            }\n            else {\n                this.currentMonth--;\n            }\n\n            this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    navForward(event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.currentView === 'month') {\n            this.incrementYear();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else if (this.currentView === 'year') {\n            this.incrementDecade();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else {\n            if (this.currentMonth === 11) {\n                this.currentMonth = 0;\n                this.incrementYear();\n            }\n            else {\n                this.currentMonth++;\n            }\n\n            this.onMonthChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    decrementYear() {\n        this.currentYear--;\n\n        if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);\n        }\n    }\n\n    decrementDecade() {\n        this.currentYear = this.currentYear - 10;\n    }\n\n    incrementDecade() {\n        this.currentYear = this.currentYear + 10;\n    }\n\n    incrementYear() {\n        this.currentYear++;\n\n        if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);\n        }\n    }\n\n    switchToMonthView(event) {\n        this.currentView = 'month';\n        event.preventDefault();\n    }\n\n    switchToYearView(event) {\n        this.currentView = 'year';\n        event.preventDefault();\n    }\n\n    onDateSelect(event, dateMeta) {\n        if (this.disabled || !dateMeta.selectable) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n            this.value = this.value.filter((date, i) => {\n                return !this.isDateEquals(date, dateMeta);\n            });\n            if (this.value.length === 0) {\n                this.value = null;\n            }\n            this.updateModel(this.value);\n        }\n        else {\n            if (this.shouldSelectDate(dateMeta)) {\n                this.selectDate(dateMeta);\n            }\n        }\n\n        if (this.isSingleSelection() && this.hideOnDateTimeSelect) {\n            setTimeout(() => {\n                event.preventDefault();\n                this.hideOverlay();\n\n                if (this.mask) {\n                    this.disableModality();\n                }\n\n                this.cd.markForCheck();\n            }, 150);\n        }\n\n        this.updateInputfield();\n        event.preventDefault();\n    }\n\n    shouldSelectDate(dateMeta) {\n        if (this.isMultipleSelection())\n            return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;\n        else\n            return true;\n    }\n\n    onMonthSelect(event, index) {\n        if (this.view === 'month') {\n            this.onDateSelect(event, {year: this.currentYear, month: index, day: 1, selectable: true});\n        }\n        else {\n            this.currentMonth = index;\n            this.currentView = 'date';\n            this.createMonths(this.currentMonth, this.currentYear);\n            this.cd.markForCheck();\n            this.onMonthChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n        }\n    }\n\n    onYearSelect(event, year) {\n        if (this.view === 'year') {\n            this.onDateSelect(event, {year: year, month: 0, day: 1, selectable: true});\n        }\n        else {\n            this.currentYear = year;\n            this.currentView = 'month';\n            this.onYearChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n        }\n    }\n\n    updateInputfield() {\n        let formattedValue = '';\n\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                formattedValue = this.formatDateTime(this.value);\n            }\n            else if (this.isMultipleSelection()) {\n                for (let i = 0; i < this.value.length; i++) {\n                    let dateAsString = this.formatDateTime(this.value[i]);\n                    formattedValue += dateAsString;\n                    if (i !== (this.value.length - 1)) {\n                        formattedValue += this.multipleSeparator+' ';\n                    }\n                }\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value && this.value.length) {\n                    let startDate = this.value[0];\n                    let endDate = this.value[1];\n\n                    formattedValue = this.formatDateTime(startDate);\n                    if (endDate) {\n                        formattedValue += ' '+this.rangeSeparator +' ' + this.formatDateTime(endDate);\n                    }\n                }\n            }\n        }\n\n        this.inputFieldValue = formattedValue;\n        this.updateFilledState();\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n        }\n    }\n\n    formatDateTime(date) {\n        let formattedValue = null;\n        if (date) {\n            if (this.timeOnly) {\n                formattedValue = this.formatTime(date);\n            }\n            else {\n                formattedValue = this.formatDate(date, this.getDateFormat());\n                if (this.showTime) {\n                    formattedValue += ' ' + this.formatTime(date);\n                }\n            }\n        }\n\n        return formattedValue;\n    }\n\n    setCurrentHourPM(hours: number) {\n        if (this.hourFormat == '12') {\n            this.pm = hours > 11;\n            if (hours >= 12) {\n                this.currentHour = (hours == 12) ? 12 : hours - 12;\n            }\n            else {\n                this.currentHour = (hours == 0) ? 12 : hours;\n            }\n        }\n        else {\n            this.currentHour = hours;\n        }\n    }\n\n    selectDate(dateMeta) {\n        let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n        if (this.showTime) {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    date.setHours(this.pm ? 12 : 0);\n                else\n                    date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                date.setHours(this.currentHour);\n            }\n\n            date.setMinutes(this.currentMinute);\n            date.setSeconds(this.currentSecond);\n        }\n\n        if (this.minDate && this.minDate > date) {\n            date = this.minDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.maxDate && this.maxDate < date) {\n            date = this.maxDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.isSingleSelection()) {\n            this.updateModel(date);\n        }\n        else if (this.isMultipleSelection()) {\n            this.updateModel(this.value ? [...this.value, date] : [date]);\n        }\n        else if (this.isRangeSelection()) {\n            if (this.value && this.value.length) {\n                let startDate = this.value[0];\n                let endDate = this.value[1];\n\n                if (!endDate && date.getTime() >= startDate.getTime()) {\n                    endDate = date;\n                }\n                else {\n                    startDate = date;\n                    endDate = null;\n                }\n\n                this.updateModel([startDate, endDate]);\n            }\n            else {\n                this.updateModel([date, null]);\n            }\n        }\n\n        this.onSelect.emit(date);\n    }\n\n    updateModel(value) {\n        this.value = value;\n\n        if (this.dataType == 'date') {\n            this.onModelChange(this.value);\n        }\n        else if (this.dataType == 'string') {\n            if (this.isSingleSelection()) {\n                this.onModelChange(this.formatDateTime(this.value));\n            }\n            else {\n                let stringArrValue = null;\n                if (this.value) {\n                    stringArrValue = this.value.map(date => this.formatDateTime(date));\n                }\n                this.onModelChange(stringArrValue);\n            }\n        }\n    }\n\n    getFirstDayOfMonthIndex(month: number, year: number) {\n        let day = new Date();\n        day.setDate(1);\n        day.setMonth(month);\n        day.setFullYear(year);\n\n        let dayIndex = day.getDay() + this.getSundayIndex();\n        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n    }\n\n    getDaysCountInMonth(month: number, year: number) {\n        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n    }\n\n    getDaysCountInPrevMonth(month: number, year: number) {\n        let prev = this.getPreviousMonthAndYear(month, year);\n        return this.getDaysCountInMonth(prev.month, prev.year);\n    }\n\n    getPreviousMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 0) {\n            m = 11;\n            y = year - 1;\n        }\n        else {\n            m = month - 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getNextMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 11) {\n            m = 0;\n            y = year + 1;\n        }\n        else {\n            m = month + 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getSundayIndex() {\n        return this.firstDayOfWeek > 0 ? 7 - this.firstDayOfWeek : 0;\n    }\n\n    isSelected(dateMeta): boolean {\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                return this.isDateEquals(this.value, dateMeta);\n            }\n            else if (this.isMultipleSelection()) {\n                let selected = false;\n                for (let date of this.value) {\n                    selected = this.isDateEquals(date, dateMeta);\n                    if (selected) {\n                        break;\n                    }\n                }\n\n                return selected;\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value[1])\n                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);\n                else\n                    return this.isDateEquals(this.value[0], dateMeta)\n            }\n        }\n        else {\n            return false;\n        }\n    }\n\n    isComparable() {\n        return this.value != null && typeof this.value !== 'string';\n    }\n\n    isMonthSelected(month) {\n        if (this.isComparable()) {\n            let value = this.isRangeSelection() ? this.value[0] : this.value;\n\n            return !this.isMultipleSelection() ? (value.getMonth() === month && value.getFullYear() === this.currentYear) : false;\n        }\n\n        return false;\n    }\n\n    isYearSelected(year) {\n        if (this.isComparable()) {\n            let value = this.isRangeSelection() ? this.value[0] : this.value;\n\n            return !this.isMultipleSelection() ? (value.getFullYear() === year) : false;\n        }\n\n        return false;\n    }\n\n    isDateEquals(value, dateMeta) {\n        if (value)\n            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n        else\n            return false;\n    }\n\n    isDateBetween(start, end, dateMeta) {\n        let between : boolean = false;\n        if (start && end) {\n            let date: Date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n        }\n\n        return between;\n    }\n\n    isSingleSelection(): boolean {\n        return this.selectionMode === 'single';\n    }\n\n    isRangeSelection(): boolean {\n        return this.selectionMode === 'range';\n    }\n\n    isMultipleSelection(): boolean {\n        return this.selectionMode === 'multiple';\n    }\n\n    isToday(today, day, month, year): boolean {\n        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n    }\n\n    isSelectable(day, month, year, otherMonth): boolean {\n        let validMin = true;\n        let validMax = true;\n        let validDate = true;\n        let validDay = true;\n\n        if (otherMonth && !this.selectOtherMonths) {\n            return false;\n        }\n\n        if (this.minDate) {\n             if (this.minDate.getFullYear() > year) {\n                 validMin = false;\n             }\n             else if (this.minDate.getFullYear() === year) {\n                 if (this.minDate.getMonth() > month) {\n                     validMin = false;\n                 }\n                 else if (this.minDate.getMonth() === month) {\n                     if (this.minDate.getDate() > day) {\n                         validMin = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.maxDate) {\n             if (this.maxDate.getFullYear() < year) {\n                 validMax = false;\n             }\n             else if (this.maxDate.getFullYear() === year) {\n                 if (this.maxDate.getMonth() < month) {\n                     validMax = false;\n                 }\n                 else if (this.maxDate.getMonth() === month) {\n                     if (this.maxDate.getDate() < day) {\n                         validMax = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.disabledDates) {\n           validDate = !this.isDateDisabled(day,month,year);\n        }\n\n        if (this.disabledDays) {\n           validDay = !this.isDayDisabled(day,month,year)\n        }\n\n        return validMin && validMax && validDate && validDay;\n    }\n\n    isDateDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDates) {\n            for (let disabledDate of this.disabledDates) {\n                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    isDayDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDays) {\n            let weekday = new Date(year, month, day);\n            let weekdayNumber = weekday.getDay();\n            return this.disabledDays.indexOf(weekdayNumber) !== -1;\n        }\n        return false;\n    }\n\n    onInputFocus(event: Event) {\n        this.focus = true;\n        if (this.showOnFocus) {\n            this.showOverlay();\n        }\n        this.onFocus.emit(event);\n    }\n\n    onInputClick() {\n        if (this.showOnFocus && !this.overlayVisible) {\n            this.showOverlay();\n        }\n    }\n\n    onInputBlur(event: Event) {\n        this.focus = false;\n        this.onBlur.emit(event);\n        if (!this.keepInvalid) {\n            this.updateInputfield();\n        }\n        this.onModelTouched();\n    }\n\n    onButtonClick(event, inputfield) {\n        if (!this.overlayVisible) {\n            inputfield.focus();\n            this.showOverlay();\n        }\n        else {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    getMonthName(index) {\n        return this.config.getTranslation('monthNames')[index];\n    }\n\n\n    switchViewButtonDisabled() {\n        return this.numberOfMonths > 1 || this.disabled;\n    }\n\n    onPrevButtonClick(event) {\n        this.navigationState = {backward: true, button: true};\n        this.navBackward(event);\n    }\n\n    onNextButtonClick(event) {\n        this.navigationState = {backward: false, button: true};\n        this.navForward(event);\n    }\n\n    onContainerButtonKeydown(event) {\n        switch (event.which) {\n           //tab\n           case 9:\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n           break;\n\n           //escape\n           case 27:\n               this.overlayVisible = false;\n               event.preventDefault();\n           break;\n\n           default:\n               //Noop\n           break;\n        }\n   }\n\n    onInputKeydown(event) {\n        this.isKeydown = true;\n        if (event.keyCode === 40 && this.contentViewChild) {\n            this.trapFocus(event);\n        }\n        else if (event.keyCode === 27) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 13) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 9 && this.contentViewChild) {\n            DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach(el => el.tabIndex = '-1');\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n            }\n        }\n    }\n\n    onDateCellKeydown(event, date, groupIndex) {\n        const cellContent = event.currentTarget;\n        const cell = cellContent.parentElement;\n\n        switch (event.which) {\n            //down arrow\n            case 40: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let nextRow = cell.parentElement.nextElementSibling;\n                if (nextRow) {\n                    let focusCell = nextRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: false};\n                        this.navForward(event);\n                    }\n                    else {\n                        nextRow.children[cellIndex].children[0].tabIndex = '0';\n                        nextRow.children[cellIndex].children[0].focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //up arrow\n            case 38: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let prevRow = cell.parentElement.previousElementSibling;\n                if (prevRow) {\n                    let focusCell = prevRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: true};\n                        this.navBackward(event);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cellContent.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    let focusCell = prevCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {\n                        this.navigateToMonth(true, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(true, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cellContent.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    let focusCell = nextCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigateToMonth(false, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(false, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.onDateSelect(event, date);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    onMonthCellKeydown(event, index) {\n        const cell = event.currentTarget;\n        switch (event.which) {\n            //arrows\n            case 38:\n            case 40: {\n                cell.tabIndex = '-1';\n                var cells = cell.parentElement.children;\n                var cellIndex = DomHandler.index(cell);\n                let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex -3];\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cell.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    prevCell.tabIndex = '0';\n                    prevCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cell.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            case 13: {\n                this.onMonthSelect(event, index);\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n\n    onYearCellKeydown(event, index) {\n        const cell = event.currentTarget;\n\n        switch (event.which) {\n            //arrows\n            case 38:\n            case 40: {\n                cell.tabIndex = '-1';\n                var cells = cell.parentElement.children;\n                var cellIndex = DomHandler.index(cell);\n                let nextCell = cells[event.which === 40 ? cellIndex + 2 : cellIndex -2];\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cell.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    prevCell.tabIndex = '0';\n                    prevCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cell.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.onYearSelect(event, index);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                this.trapFocus(event);\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    navigateToMonth(prev, groupIndex) {\n        if (prev) {\n            if (this.numberOfMonths === 1 || (groupIndex === 0)) {\n                this.navigationState = {backward: true};\n                this.navBackward(event);\n            }\n            else {\n                let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];\n                let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                let focusCell = cells[cells.length - 1];\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n        else {\n            if (this.numberOfMonths === 1 || (groupIndex === this.numberOfMonths - 1)) {\n                this.navigationState = {backward: false};\n                this.navForward(event);\n            }\n            else {\n                let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];\n                let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n    }\n\n    updateFocus() {\n        let cell;\n\n        if (this.navigationState) {\n            if (this.navigationState.button) {\n                this.initFocusableCell();\n\n                if (this.navigationState.backward)\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();\n                else\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();\n            }\n            else {\n                if (this.navigationState.backward) {\n                    let cells;\n\n                    if (this.currentView === 'month') {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n                    }\n                    else if (this.currentView === 'year') {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n                    }\n                    else {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                    }\n\n                    if (cells && cells.length > 0) {\n                        cell = cells[cells.length - 1];\n                    }\n                }\n                else {\n                    if (this.currentView === 'month') {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n                    }\n                    else if (this.currentView === 'year') {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n                    }\n                    else {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                    }\n                }\n\n                if (cell) {\n                    cell.tabIndex = '0';\n                    cell.focus();\n                }\n            }\n\n            this.navigationState = null;\n        }\n        else {\n            this.initFocusableCell();\n        }\n    }\n\n    initFocusableCell() {\n        let cell;\n\n        if (this.currentView === 'month') {\n            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n            let selectedCell= DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-highlight');\n            cells.forEach(cell => cell.tabIndex = -1);\n            cell = selectedCell || cells[0];\n\n            if (cells.length === 0) {\n                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = \"0\"]');\n                disabledCells.forEach(cell => cell.tabIndex = -1);\n            }\n        }\n        else if (this.currentView === 'year') {\n            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n            let selectedCell= DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year.p-highlight');\n            cells.forEach(cell => cell.tabIndex = -1);\n            cell = selectedCell || cells[0];\n\n            if (cells.length === 0) {\n                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year.p-disabled[tabindex = \"0\"]');\n                disabledCells.forEach(cell => cell.tabIndex = -1);\n            }\n        }\n        else {\n            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'span.p-highlight');\n            if (!cell) {\n                let todayCell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');\n                if (todayCell)\n                    cell = todayCell;\n                else\n                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n            }\n        }\n\n        if (cell) {\n            cell.tabIndex = '0';\n\n            if (!this.preventFocus && (!this.navigationState || !this.navigationState.button)) {\n                setTimeout(() => {\n                    cell.focus();\n                }, 1);\n            }\n\n            this.preventFocus = false;\n        }\n    }\n\n    trapFocus(event) {\n        let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);\n\n        if (focusableElements && focusableElements.length > 0) {\n            if (!focusableElements[0].ownerDocument.activeElement) {\n                focusableElements[0].focus();\n            }\n            else {\n                let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                if (event.shiftKey) {\n                    if (focusedIndex == -1 || focusedIndex === 0) {\n                        if (this.focusTrap){\n                            focusableElements[focusableElements.length - 1].focus();\n                        }\n                        else {\n                            if (focusedIndex === -1)\n                                return this.hideOverlay();\n                            else if (focusedIndex === 0)\n                                return;\n                        }\n                    }\n                    else {\n                        focusableElements[focusedIndex - 1].focus();\n                    }\n                }\n                else {\n                    if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1)) {\n                        if (!this.focusTrap && focusedIndex != -1)\n                            return this.hideOverlay();\n                        else\n                            focusableElements[0].focus();\n                    }\n                    else {\n                        focusableElements[focusedIndex + 1].focus();\n                    }\n                }\n            }\n        }\n\n        event.preventDefault();\n    }\n\n    onMonthDropdownChange(m: string) {\n        this.currentMonth = parseInt(m);\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    onYearDropdownChange(y: string) {\n        this.currentYear = parseInt(y);\n        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    convertTo24Hour = function (hours: number, pm: boolean) {\n        if (this.hourFormat == '12') {\n            if (hours === 12) {\n                return (pm ? 12 : 0);\n            } else {\n                return (pm ? hours + 12 : hours);\n            }\n        }\n        return hours;\n    }\n\n    validateTime(hour: number, minute: number, second: number, pm: boolean) {\n        let value = this.value;\n        const convertedHour = this.convertTo24Hour(hour, pm);\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        const valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getHours() > convertedHour) {\n                return false;\n            }\n            if (this.minDate.getHours() === convertedHour) {\n                if (this.minDate.getMinutes() > minute) {\n                    return false;\n                }\n                if (this.minDate.getMinutes() === minute) {\n                    if (this.minDate.getSeconds() > second) {\n                        return false;\n                    }\n                }\n            }\n        }\n\n      if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getHours() < convertedHour) {\n                return false;\n            }\n            if (this.maxDate.getHours() === convertedHour) {\n                if (this.maxDate.getMinutes() < minute) {\n                    return false;\n                }\n                if (this.maxDate.getMinutes() === minute) {\n                  if (this.maxDate.getSeconds() < second) {\n                      return false;\n                  }\n                }\n            }\n        }\n        return true;\n    }\n\n\n    incrementHour(event) {\n        const prevHour = this.currentHour;\n        let newHour = this.currentHour + this.stepHour;\n        let newPM = this.pm;\n\n        if (this.hourFormat == '24')\n            newHour = (newHour >= 24) ? (newHour - 24) : newHour;\n        else if (this.hourFormat == '12') {\n            // Before the AM/PM break, now after\n            if (prevHour < 12 && newHour > 11) {\n                newPM= !this.pm;\n            }\n            newHour = (newHour >= 13) ? (newHour - 12) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n        event.preventDefault();\n    }\n\n    onTimePickerElementMouseDown(event: Event, type: number, direction: number) {\n        if (!this.disabled) {\n            this.repeat(event, null, type, direction);\n            event.preventDefault();\n        }\n    }\n\n    onTimePickerElementMouseUp(event: Event) {\n        if (!this.disabled) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    onTimePickerElementMouseLeave() {\n        if (!this.disabled && this.timePickerTimer) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    repeat(event: Event, interval: number, type: number, direction: number) {\n        let i = interval||500;\n\n        this.clearTimePickerTimer();\n        this.timePickerTimer = setTimeout(() => {\n            this.repeat(event, 100, type, direction);\n            this.cd.markForCheck();\n        }, i);\n\n        switch(type) {\n            case 0:\n                if (direction === 1)\n                    this.incrementHour(event);\n                else\n                    this.decrementHour(event);\n            break;\n\n            case 1:\n                if (direction === 1)\n                    this.incrementMinute(event);\n                else\n                    this.decrementMinute(event);\n            break;\n\n            case 2:\n                if (direction === 1)\n                    this.incrementSecond(event);\n                else\n                    this.decrementSecond(event);\n            break;\n        }\n\n        this.updateInputfield();\n    }\n\n    clearTimePickerTimer() {\n        if (this.timePickerTimer) {\n            clearTimeout(this.timePickerTimer);\n            this.timePickerTimer = null;\n        }\n    }\n\n    decrementHour(event) {\n        let newHour = this.currentHour - this.stepHour;\n        let newPM = this.pm\n\n        if (this.hourFormat == '24')\n            newHour = (newHour < 0) ? (24 + newHour) : newHour;\n        else if (this.hourFormat == '12') {\n            // If we were at noon/midnight, then switch\n            if (this.currentHour === 12) {\n                newPM = !this.pm;\n            }\n            newHour = (newHour <= 0) ? (12 + newHour) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementMinute(event) {\n        let newMinute = this.currentMinute + this.stepMinute;\n        newMinute = (newMinute > 59) ? newMinute - 60 : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementMinute(event) {\n        let newMinute = this.currentMinute - this.stepMinute;\n        newMinute = (newMinute < 0) ? 60 + newMinute : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementSecond(event) {\n        let newSecond = this.currentSecond + this.stepSecond;\n        newSecond = (newSecond > 59) ? newSecond - 60 : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementSecond(event) {\n        let newSecond = this.currentSecond - this.stepSecond;\n        newSecond = (newSecond < 0) ? 60 + newSecond : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    updateTime() {\n        let value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        value = value ? new Date(value.getTime()) : new Date();\n\n        if (this.hourFormat == '12') {\n            if (this.currentHour === 12)\n                value.setHours(this.pm ? 12 : 0);\n            else\n                value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n        }\n        else {\n            value.setHours(this.currentHour);\n        }\n\n        value.setMinutes(this.currentMinute);\n        value.setSeconds(this.currentSecond);\n        if (this.isRangeSelection()) {\n            if (this.value[1])\n                value = [this.value[0], value];\n            else\n                value = [value, null];\n        }\n\n        if (this.isMultipleSelection()){\n            value = [...this.value.slice(0, -1), value];\n        }\n\n        this.updateModel(value);\n        this.onSelect.emit(value);\n        this.updateInputfield();\n    }\n\n    toggleAMPM(event) {\n        const newPM = !this.pm;\n        if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.pm = newPM;\n          this.updateTime();\n        }\n        event.preventDefault();\n    }\n\n    onUserInput(event) {\n        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n        if (!this.isKeydown) {\n            return;\n        }\n        this.isKeydown = false;\n\n        let val = event.target.value;\n        try {\n            let value = this.parseValueFromString(val);\n            if (this.isValidSelection(value)) {\n                this.updateModel(value);\n                this.updateUI();\n            }\n        }\n        catch(err) {\n            //invalid date\n            this.updateModel(null);\n        }\n\n        this.filled = val != null && val.length;\n        this.onInput.emit(event);\n    }\n\n    isValidSelection(value): boolean {\n        let isValid = true;\n        if (this.isSingleSelection()) {\n            if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {\n                isValid = false;\n            }\n        } else if (value.every(v => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {\n            if (this.isRangeSelection()) {\n                isValid = value.length > 1 && value[1] > value[0] ? true : false;\n            }\n        }\n        return isValid;\n    }\n\n    parseValueFromString(text: string): Date | Date[]{\n        if (!text || text.trim().length === 0) {\n            return null;\n        }\n\n        let value: any;\n\n        if (this.isSingleSelection()) {\n            value = this.parseDateTime(text);\n        }\n        else if (this.isMultipleSelection()) {\n            let tokens = text.split(this.multipleSeparator);\n            value = [];\n            for (let token of tokens) {\n                value.push(this.parseDateTime(token.trim()));\n            }\n        }\n        else if (this.isRangeSelection()) {\n            let tokens = text.split(' '+this.rangeSeparator +' ');\n            value = [];\n            for (let i = 0; i < tokens.length; i++) {\n                value[i] = this.parseDateTime(tokens[i].trim());\n            }\n        }\n\n        return value;\n    }\n\n    parseDateTime(text): Date {\n        let date: Date;\n        let parts: string[] = text.split(' ');\n\n        if (this.timeOnly) {\n            date = new Date();\n            this.populateTime(date, parts[0], parts[1]);\n        }\n        else {\n            const dateFormat = this.getDateFormat();\n            if (this.showTime) {\n                let ampm = this.hourFormat == '12' ? parts.pop() : null;\n                let timeString = parts.pop();\n\n                date = this.parseDate(parts.join(' '), dateFormat);\n                this.populateTime(date, timeString, ampm);\n            }\n            else {\n                 date = this.parseDate(text, dateFormat);\n            }\n        }\n\n        return date;\n    }\n\n    populateTime(value, timeString, ampm) {\n        if (this.hourFormat == '12' && !ampm) {\n            throw 'Invalid Time';\n        }\n\n        this.pm = (ampm === 'PM' || ampm === 'pm');\n        let time = this.parseTime(timeString);\n        value.setHours(time.hour);\n        value.setMinutes(time.minute);\n        value.setSeconds(time.second);\n    }\n\n    updateUI() {\n        let val = this.value||this.defaultDate||new Date();\n        if (Array.isArray(val)){\n            val = val[0];\n        }\n\n        this.currentMonth = val.getMonth();\n        this.currentYear = val.getFullYear();\n        this.createMonths(this.currentMonth, this.currentYear);\n\n        if (this.showTime||this.timeOnly) {\n            this.setCurrentHourPM(val.getHours());\n            this.currentMinute = val.getMinutes();\n            this.currentSecond = val.getSeconds();\n        }\n    }\n\n    showOverlay() {\n        if (!this.overlayVisible) {\n            this.updateUI();\n\n            if (!this.touchUI) {\n                this.preventFocus = true;\n            }\n\n            this.overlayVisible = true;\n        }\n    }\n\n    hideOverlay() {\n        this.overlayVisible = false;\n        this.clearTimePickerTimer();\n\n        if (this.touchUI) {\n            this.disableModality();\n        }\n\n        this.cd.markForCheck();\n    }\n\n    toggle() {\n        if (!this.inline){\n            if (!this.overlayVisible) {\n                this.showOverlay();\n                this.inputfieldViewChild.nativeElement.focus();\n            }\n            else {\n                this.hideOverlay();\n            }\n        }\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.overlay = event.element;\n                    this.overlay.setAttribute(this.attributeSelector, '');\n                    this.appendOverlay();\n                    this.updateFocus();\n                    if (this.autoZIndex) {\n                        if (this.touchUI)\n                            ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);\n                        else\n                            ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);\n                    }\n\n                    this.alignOverlay();\n                    this.onShow.emit(event);\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onClose.emit(event);\n            break;\n        }\n    }\n\n    onOverlayAnimationDone(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.touchUI) {\n            this.enableModality(this.overlay);\n        }\n        else if(this.overlay) {\n            if (this.appendTo) {\n                if (this.view === 'date') {\n                    this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';\n                    this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n                }\n                else {\n                    this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n                }\n\n                DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n            }\n            else{\n                DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n            }\n        }\n    }\n\n    enableModality(element) {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(element.style.zIndex) - 1);\n            let maskStyleClass = 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';\n            DomHandler.addMultipleClasses(this.mask, maskStyleClass);\n\n\t\t\tthis.maskClickListener = this.renderer.listen(this.mask, 'click', (event: any) => {\n                this.disableModality();\n            });\n            document.body.appendChild(this.mask);\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n    }\n\n    disableModality() {\n        if (this.mask) {\n            DomHandler.addClass(this.mask, 'p-component-overlay-leave');\n            this.animationEndListener = this.destroyMask.bind(this);\n            this.mask.addEventListener('animationend', this.animationEndListener);\n        }\n    }\n\n    destroyMask() {\n        document.body.removeChild(this.mask);\n        let bodyChildren = document.body.children;\n        let hasBlockerMasks: boolean;\n        for (let i = 0; i < bodyChildren.length; i++) {\n            let bodyChild = bodyChildren[i];\n            if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {\n                hasBlockerMasks = true;\n                break;\n            }\n        }\n\n        if (!hasBlockerMasks) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        this.unbindAnimationEndListener();\n        this.unbindMaskClickListener();\n        this.mask = null;\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n\t\t}\n    }\n\n    unbindAnimationEndListener() {\n        if (this.animationEndListener && this.mask) {\n            this.mask.removeEventListener('animationend', this.animationEndListener);\n            this.animationEndListener = null;\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        if (this.value && typeof this.value === 'string') {\n            this.value = this.parseValueFromString(this.value);\n        }\n\n        this.updateInputfield();\n        this.updateUI();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    getDateFormat() {\n        return this.dateFormat||this.getTranslation('dateFormat');\n    }\n\n    // Ported from jquery-ui datepicker formatDate\n    formatDate(date, format) {\n        if (!date) {\n            return '';\n        }\n\n        let iFormat;\n        const lookAhead = (match) => {\n            const matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n            formatNumber = (match, value, len) => {\n                let num = '' + value;\n                if (lookAhead(match)) {\n                    while (num.length < len) {\n                        num = '0' + num;\n                    }\n                }\n                return num;\n            },\n            formatName = (match, value, shortNames, longNames) => {\n                return (lookAhead(match) ? longNames[value] : shortNames[value]);\n            };\n        let output = '';\n        let literal = false;\n\n        if (date) {\n            for (iFormat = 0; iFormat < format.length; iFormat++) {\n                if (literal) {\n                    if (format.charAt(iFormat) === '\\'' && !lookAhead('\\'')) {\n                        literal = false;\n                    } else {\n                        output += format.charAt(iFormat);\n                    }\n                } else {\n                    switch (format.charAt(iFormat)) {\n                        case 'd':\n                            output += formatNumber('d', date.getDate(), 2);\n                            break;\n                        case 'D':\n                            output += formatName('D', date.getDay(), this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                            break;\n                        case 'o':\n                            output += formatNumber('o',\n                            Math.round((\n                                new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -\n                                new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            break;\n                        case 'm':\n                            output += formatNumber('m', date.getMonth() + 1, 2);\n                            break;\n                        case 'M':\n                            output += formatName('M',date.getMonth(), this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                            break;\n                        case 'y':\n                            output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);\n                            break;\n                        case '@':\n                            output += date.getTime();\n                            break;\n                        case '!':\n                            output += date.getTime() * 10000 + this.ticksTo1970;\n                            break;\n                        case '\\'':\n                            if (lookAhead('\\'')) {\n                                output += '\\'';\n                            } else {\n                                literal = true;\n                            }\n                            break;\n                        default:\n                            output += format.charAt(iFormat);\n                    }\n                }\n            }\n        }\n        return output;\n    }\n\n    formatTime(date) {\n        if (!date) {\n            return '';\n        }\n\n        let output = '';\n        let hours = date.getHours();\n        let minutes = date.getMinutes();\n        let seconds = date.getSeconds();\n\n        if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n            hours-=12;\n        }\n\n        if (this.hourFormat == '12') {\n            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;\n        } else {\n            output += (hours < 10) ? '0' + hours : hours;\n        }\n        output += ':';\n        output += (minutes < 10) ? '0' + minutes : minutes;\n\n        if (this.showSeconds) {\n            output += ':';\n            output += (seconds < 10) ? '0' + seconds : seconds;\n        }\n\n        if (this.hourFormat == '12') {\n            output += date.getHours() > 11 ? ' PM' : ' AM';\n        }\n\n        return output;\n    }\n\n    parseTime(value) {\n        let tokens: string[] = value.split(':');\n        let validTokenLength = this.showSeconds ? 3 : 2;\n\n        if (tokens.length !== validTokenLength) {\n            throw \"Invalid time\";\n        }\n\n        let h = parseInt(tokens[0]);\n        let m = parseInt(tokens[1]);\n        let s = this.showSeconds ? parseInt(tokens[2]) : null;\n\n        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n            throw \"Invalid time\";\n        }\n        else {\n            if (this.hourFormat == '12') {\n                if (h !== 12 && this.pm) {\n                    h += 12;\n                }\n                else if (!this.pm && h === 12) {\n                    h -= 12;\n                }\n            }\n\n            return {hour: h, minute: m, second: s};\n        }\n    }\n\n    // Ported from jquery-ui datepicker parseDate\n    parseDate(value, format) {\n        if (format == null || value == null) {\n            throw \"Invalid arguments\";\n        }\n\n        value = (typeof value === \"object\" ? value.toString() : value + \"\");\n        if (value === \"\") {\n            return null;\n        }\n\n        let iFormat, dim, extra,\n        iValue = 0,\n        shortYearCutoff = (typeof this.shortYearCutoff !== \"string\" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)),\n        year = -1,\n        month = -1,\n        day = -1,\n        doy = -1,\n        literal = false,\n        date,\n        lookAhead = (match) => {\n            let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n        getNumber = (match) => {\n            let isDoubled = lookAhead(match),\n                size = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n                (match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\n                minSize = (match === \"y\" ? size : 1),\n                digits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"),\n                num = value.substring(iValue).match(digits);\n            if (!num) {\n                throw \"Missing number at position \" + iValue;\n            }\n            iValue += num[ 0 ].length;\n            return parseInt(num[ 0 ], 10);\n        },\n        getName = (match, shortNames, longNames) => {\n            let index = -1;\n            let arr = lookAhead(match) ? longNames : shortNames;\n            let names = [];\n\n            for (let i = 0; i < arr.length; i++) {\n                names.push([i,arr[i]]);\n            }\n            names.sort((a,b) => {\n                return -(a[ 1 ].length - b[ 1 ].length);\n            });\n\n            for (let i = 0; i < names.length; i++) {\n                let name = names[i][1];\n                if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n                    index = names[i][0];\n                    iValue += name.length;\n                    break;\n                }\n            }\n\n            if (index !== -1) {\n                return index + 1;\n            } else {\n                throw \"Unknown name at position \" + iValue;\n            }\n        },\n        checkLiteral = () => {\n            if (value.charAt(iValue) !== format.charAt(iFormat)) {\n                throw \"Unexpected literal at position \" + iValue;\n            }\n            iValue++;\n        };\n\n        if (this.view === 'month') {\n            day = 1;\n        }\n\n        for (iFormat = 0; iFormat < format.length; iFormat++) {\n            if (literal) {\n                if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n                    literal = false;\n                } else {\n                    checkLiteral();\n                }\n            } else {\n                switch (format.charAt(iFormat)) {\n                    case \"d\":\n                        day = getNumber(\"d\");\n                        break;\n                    case \"D\":\n                        getName(\"D\", this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                        break;\n                    case \"o\":\n                        doy = getNumber(\"o\");\n                        break;\n                    case \"m\":\n                        month = getNumber(\"m\");\n                        break;\n                    case \"M\":\n                        month = getName(\"M\", this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                        break;\n                    case \"y\":\n                        year = getNumber(\"y\");\n                        break;\n                    case \"@\":\n                        date = new Date(getNumber(\"@\"));\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"!\":\n                        date = new Date((getNumber(\"!\") - this.ticksTo1970) / 10000);\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"'\":\n                        if (lookAhead(\"'\")) {\n                            checkLiteral();\n                        } else {\n                            literal = true;\n                        }\n                        break;\n                    default:\n                        checkLiteral();\n                }\n            }\n        }\n\n        if (iValue < value.length) {\n            extra = value.substr(iValue);\n            if (!/^\\s+/.test(extra)) {\n                throw \"Extra/unparsed characters found in date: \" + extra;\n            }\n        }\n\n        if (year === -1) {\n            year = new Date().getFullYear();\n        } else if (year < 100) {\n            year += new Date().getFullYear() - new Date().getFullYear() % 100 +\n                (year <= shortYearCutoff ? 0 : -100);\n        }\n\n        if (doy > -1) {\n            month = 1;\n            day = doy;\n            do {\n                dim = this.getDaysCountInMonth(year, month - 1);\n                if (day <= dim) {\n                    break;\n                }\n                month++;\n                day -= dim;\n            } while (true);\n        }\n\n        date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n                if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n                    throw \"Invalid date\"; // E.g. 31/02/00\n                }\n\n        return date;\n    }\n\n    daylightSavingAdjust(date) {\n        if (!date) {\n            return null;\n        }\n\n        date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\n        return date;\n    }\n\n    updateFilledState() {\n        this.filled = this.inputFieldValue && this.inputFieldValue != '';\n    }\n\n    onTodayButtonClick(event) {\n        let date: Date = new Date();\n        let dateMeta = {day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, today: true, selectable: true};\n\n        this.onDateSelect(event, dateMeta);\n        this.onTodayClick.emit(event);\n    }\n\n    onClearButtonClick(event) {\n        this.updateModel(null);\n        this.updateInputfield();\n        this.hideOverlay();\n        this.onClearClick.emit(event);\n    }\n\n    createResponsiveStyle() {\n        if (this.numberOfMonths > 1 && this.responsiveOptions) {\n            if (!this.responsiveStyleElement) {\n                this.responsiveStyleElement = document.createElement('style');\n                this.responsiveStyleElement.type = 'text/css';\n                document.body.appendChild(this.responsiveStyleElement);\n            }\n\n            let innerHTML = '';\n            if (this.responsiveOptions) {\n                let responsiveOptions = [...this.responsiveOptions]\n                    .filter(o => !!(o.breakpoint && o.numMonths))\n                    .sort((o1, o2) => -1 * o1.breakpoint.localeCompare(o2.breakpoint, undefined, { numeric: true }));\n\n                for (let i = 0; i < responsiveOptions.length; i++) {\n                    let { breakpoint, numMonths } = responsiveOptions[i];\n                    let styles = `\n                        .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${numMonths}) .p-datepicker-next {\n                            display: inline-flex !important;\n                        }\n                    `;\n\n                    for (let j = numMonths; j < this.numberOfMonths; j++) {\n                        styles += `\n                            .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${j + 1}) {\n                                display: none !important;\n                            }\n                        `\n                    }\n\n                    innerHTML += `\n                        @media screen and (max-width: ${breakpoint}) {\n                            ${styles}\n                        }\n                    `\n                }\n            }\n\n            this.responsiveStyleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyResponsiveStyleElement() {\n        if (this.responsiveStyleElement) {\n            this.responsiveStyleElement.remove();\n            this.responsiveStyleElement = null;\n        }\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.zone.runOutsideAngular(() => {\n                const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n                this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', (event) => {\n                    if (this.isOutsideClicked(event) && this.overlayVisible) {\n                        this.zone.run(() => {\n                            this.hideOverlay();\n                            this.onClickOutside.emit(event);\n\n                            this.cd.markForCheck();\n                        });\n                    }\n\n                });\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        if (!this.documentResizeListener && !this.touchUI) {\n            this.documentResizeListener = this.onWindowResize.bind(this);\n            window.addEventListener('resize', this.documentResizeListener);\n        }\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hideOverlay();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    isOutsideClicked(event: Event) {\n        return !(this.el.nativeElement.isSameNode(event.target) || this.isNavIconClicked(event) || \n                this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(<Node> event.target)));\n    }\n\n    isNavIconClicked(event: Event) {\n        return (DomHandler.hasClass(event.target, 'p-datepicker-prev') || DomHandler.hasClass(event.target, 'p-datepicker-prev-icon')\n                || DomHandler.hasClass(event.target, 'p-datepicker-next') || DomHandler.hasClass(event.target, 'p-datepicker-next-icon'));\n    }\n\n    onWindowResize() {\n        if (this.overlayVisible && !DomHandler.isAndroid()) {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayHide() {\n        this.currentView = this.view;\n\n        if (this.mask) {\n            this.destroyMask();\n        }\n\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n\n        if (this.overlay && this.autoZIndex) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.destroyResponsiveStyleElement();\n        this.clearTimePickerTimer();\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,SharedModule,RippleModule],\n    exports: [Calendar,ButtonModule,SharedModule],\n    declarations: [Calendar]\n})\nexport class CalendarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MAYa,uBAAuB,GAAQ;IACxC,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC;IACvC,KAAK,EAAE,IAAI;EACb;MA8LW,QAAQ;IA6YjB,YAAmB,EAAc,EAAS,QAAmB,EAAS,EAAqB,EAAU,IAAY,EAAU,MAAqB,EAAS,cAA8B;QAApK,OAAE,GAAF,EAAE,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAW;QAAS,OAAE,GAAF,EAAE,CAAmB;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAe;QAAS,mBAAc,GAAd,cAAc,CAAgB;QArX9K,sBAAiB,GAAW,GAAG,CAAC;QAEhC,mBAAc,GAAW,GAAG,CAAC;QAE7B,WAAM,GAAY,KAAK,CAAC;QAExB,oBAAe,GAAY,IAAI,CAAC;QAMhC,SAAI,GAAW,gBAAgB,CAAC;QAMhC,oBAAe,GAAQ,KAAK,CAAC;QAM7B,eAAU,GAAW,IAAI,CAAC;QAI1B,aAAQ,GAAW,CAAC,CAAC;QAErB,eAAU,GAAW,CAAC,CAAC;QAEvB,eAAU,GAAW,CAAC,CAAC;QAEvB,gBAAW,GAAY,KAAK,CAAC;QAI7B,gBAAW,GAAY,IAAI,CAAC;QAE5B,aAAQ,GAAY,KAAK,CAAC;QAE1B,aAAQ,GAAW,MAAM,CAAC;QAE1B,kBAAa,GAAW,QAAQ,CAAC;QAMjC,0BAAqB,GAAW,eAAe,CAAC;QAEhD,0BAAqB,GAAW,eAAe,CAAC;QAEhD,eAAU,GAAY,IAAI,CAAC;QAE3B,eAAU,GAAW,CAAC,CAAC;QAMvB,gBAAW,GAAY,KAAK,CAAC;QAE7B,yBAAoB,GAAY,IAAI,CAAC;QAIrC,kBAAa,GAAW,GAAG,CAAC;QAE5B,cAAS,GAAY,IAAI,CAAC;QAE1B,mBAAc,GAAW,CAAC,CAAC;QAE3B,0BAAqB,GAAW,iCAAiC,CAAC;QAElE,0BAAqB,GAAW,YAAY,CAAC;QAE5C,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,kBAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEtD,iBAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,mBAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEvD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QA0DzD,kBAAa,GAAa,SAAQ,CAAC;QAEnC,mBAAc,GAAa,SAAQ,CAAC;QAoBpC,oBAAe,GAAW,IAAI,CAAC;QAoC/B,oBAAe,GAAQ,IAAI,CAAC;QAgB5B,oBAAe,GAAW,CAAC,CAAC;QAE5B,UAAK,GAAW,MAAM,CAAC;QA47CvB,oBAAe,GAAG,UAAU,KAAa,EAAE,EAAW;YAClD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBACzB,IAAI,KAAK,KAAK,EAAE,EAAE;oBACd,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;iBACxB;qBAAM;oBACH,QAAQ,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE;iBACpC;aACJ;YACD,OAAO,KAAK,CAAC;SAChB,CAAA;KAxzC0L;IAzQ3L,IAAoD,OAAO,CAAE,OAAmB;QAC5E,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAEhC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aAChC;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC5B;aACJ;SACJ;KACJ;;IAkHD,IAAa,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;;IAED,IAAI,IAAI,CAAC,IAAY;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;KACjC;IAGD,IAAa,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;;IAED,IAAI,WAAW,CAAC,WAAiB;QAC7B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,IAAI,GAAG,WAAW,IAAE,IAAI,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAID,IAAa,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAI,OAAO,CAAC,IAAU;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACjF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,IAAa,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAI,OAAO,CAAC,IAAU;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAK,IAAI,CAAC,WAAW,EAAE;YAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,IAAa,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,aAAa,CAAC,aAAqB;QACnC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAK,IAAI,CAAC,WAAW,EAAE;YAElF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,IAAa,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IAAI,YAAY,CAAC,YAAsB;QACnC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAK,IAAI,CAAC,WAAW,EAAE;YAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,IAAa,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,SAAiB;QAC3B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,SAAS,EAAE;YACX,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;SAChD;KACJ;IAED,IAAa,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,QAAiB;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE1B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAE,IAAI,IAAI,EAAE,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC3B;IAED,IAAI,MAAM;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAED,IAAa,iBAAiB;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAClC;;IAED,IAAI,iBAAiB,CAAC,iBAAwB;QAC1C,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAE5C,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;IAGD,IAAa,cAAc;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,cAAc,CAAC,cAAsB;QACrC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;IAED,IACI,MAAM,CAAC,SAAyB;QAChC,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;KAC5E;IAID,QAAQ;QACJ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAE,IAAI,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;SAC9I;QAED,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC;YACrE,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAQ,IAAI,CAAC,OAAO,EAAE;gBAClB,KAAK,MAAM;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,cAAc;oBACf,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC9C,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN;oBACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,eAAe;QACX,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAEtG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;oBAC3B,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;iBAC5H;aACJ;SACJ;KACJ;IAED,cAAc,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;KAC7C;IAED,mBAAmB,CAAC,KAAK,EAAE,GAAG;QAC1B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC5B;KACJ;IAED,cAAc;QACV,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACnC,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,QAAQ,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;SAC/C;KACJ;IAED,iBAAiB;QACb,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;YAC1B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5E;QAED,OAAO,iBAAiB,CAAC;KAC5B;IAED,gBAAgB;QACZ,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,IAAK,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;SACnC;QAED,OAAO,gBAAgB,CAAC;KAC3B;IAED,YAAY,CAAC,KAAa,EAAE,IAAY;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,GAAG,EAAE,EAAE;gBACR,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACf,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;aAChB;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC5C;KACJ;IAED,aAAa,CAAC,IAAU;QACpB,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,IAAK,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAE,CAAC,CAAC;QACzE,IAAI,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/B,SAAS,CAAC,QAAQ,CAAE,CAAC,CAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAE,CAAC,CAAE,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAE,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC;KAC/E;IAED,WAAW,CAAC,KAAa,EAAE,IAAY;QACnC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC;QAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAChC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,IAAI,CAAC,IAAI,CAAC,EAAE;gBACR,KAAK,IAAI,CAAC,IAAI,mBAAmB,GAAG,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC9E,IAAI,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI;wBAC/D,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;iBACjI;gBAED,IAAI,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;wBACvF,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC;oBACnE,KAAK,EAAE,CAAC;iBACX;aACJ;iBACI;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxB,IAAI,KAAK,GAAG,UAAU,EAAE;wBACpB,IAAI,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBACjD,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI;4BAC5E,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;4BACrE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAC,CAAC,CAAC;qBAClG;yBACI;wBACD,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;4BAC3F,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC;qBAClE;oBAED,KAAK,EAAE,CAAC;iBACX;aACJ;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC5F;YAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpB;QAED,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,WAAW;SAC3B,CAAC;KACL;IAED,QAAQ,CAAC,IAAU;QACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC1C;aACI,IAAI,IAAI,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;SAC1B;KACJ;IAED,WAAW,CAAC,KAAK;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACV;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,UAAU,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC;SACT;aACI,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,UAAU,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC;SACT;aACI;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE;gBACzB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;iBACI;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,UAAU,CAAC,KAAK;QACZ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACV;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,UAAU,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC;SACT;aACI,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,UAAU,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC;SACT;aACI;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE;gBAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;iBACI;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;YAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC;YAChF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;KACJ;IAED,aAAa;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;SAC1H;KACJ;IAED,eAAe;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KAC5C;IAED,eAAe;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KAC5C;IAED,aAAa;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACxF,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;SAC1H;KACJ;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,KAAK;QAClB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,YAAY,CAAC,KAAK,EAAE,QAAQ;QACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YACvC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aAC7C,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAChC;aACI;YACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC7B;SACJ;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE;YACvD,UAAU,CAAC;gBACP,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEnB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACX,IAAI,CAAC,eAAe,EAAE,CAAC;iBAC1B;gBAED,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;aAC1B,EAAE,GAAG,CAAC,CAAC;SACX;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,QAAQ;QACrB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;;YAEnG,OAAO,IAAI,CAAC;KACnB;IAED,aAAa,CAAC,KAAK,EAAE,KAAK;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;SAC9F;aACI;YACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC;SACnF;KACJ;IAED,YAAY,CAAC,KAAK,EAAE,IAAI;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;SAC9E;aACI;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,CAAC;SAClF;KACJ;IAED,gBAAgB;QACZ,IAAI,cAAc,GAAG,EAAE,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC1B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpD;iBACI,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,cAAc,IAAI,YAAY,CAAC;oBAC/B,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;wBAC/B,cAAc,IAAI,IAAI,CAAC,iBAAiB,GAAC,GAAG,CAAC;qBAChD;iBACJ;aACJ;iBACI,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC9B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACjC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAE5B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;oBAChD,IAAI,OAAO,EAAE;wBACT,cAAc,IAAI,GAAG,GAAC,IAAI,CAAC,cAAc,GAAE,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;qBACjF;iBACJ;aACJ;SACJ;QAED,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YACpE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;SACvE;KACJ;IAED,cAAc,CAAC,IAAI;QACf,IAAI,cAAc,GAAG,IAAI,CAAC;QAC1B,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC1C;iBACI;gBACD,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,cAAc,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACjD;aACJ;SACJ;QAED,OAAO,cAAc,CAAC;KACzB;IAED,gBAAgB,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;YACrB,IAAI,KAAK,IAAI,EAAE,EAAE;gBACb,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;aACtD;iBACI;gBACD,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;aAChD;SACJ;aACI;YACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC5B;KACJ;IAED,UAAU,CAAC,QAAQ;QACf,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBACzB,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE;oBACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;oBAEhC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;aACzE;iBACI;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnC;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACvC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;SAC1C;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC1B;aACI,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE;aACI,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjC,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE5B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE;oBACnD,OAAO,GAAG,IAAI,CAAC;iBAClB;qBACI;oBACD,SAAS,GAAG,IAAI,CAAC;oBACjB,OAAO,GAAG,IAAI,CAAC;iBAClB;gBAED,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;aAC1C;iBACI;gBACD,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aAClC;SACJ;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAClC;aACI,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;YAChC,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACvD;iBACI;gBACD,IAAI,cAAc,GAAG,IAAI,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;iBACtE;gBACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;aACtC;SACJ;KACJ;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY;QAC/C,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACf,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpD,OAAO,QAAQ,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;KAClD;IAED,mBAAmB,CAAC,KAAa,EAAE,IAAY;QAC3C,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAC9E;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY;QAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,uBAAuB,CAAC,KAAa,EAAE,IAAY;QAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,IAAI,KAAK,KAAK,CAAC,EAAE;YACb,CAAC,GAAG,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;SAChB;aACI;YACD,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACd,CAAC,GAAG,IAAI,CAAC;SACZ;QAED,OAAO,EAAC,OAAO,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,CAAC;KAC/B;IAED,mBAAmB,CAAC,KAAa,EAAE,IAAY;QAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,IAAI,KAAK,KAAK,EAAE,EAAE;YACd,CAAC,GAAG,CAAC,CAAC;YACN,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;SAChB;aACI;YACD,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;YACd,CAAC,GAAG,IAAI,CAAC;SACZ;QAED,OAAO,EAAC,OAAO,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,CAAC;KAC/B;IAED,cAAc;QACV,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;KAChE;IAED,UAAU,CAAC,QAAQ;QACf,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAClD;iBACI,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBACzB,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC7C,IAAI,QAAQ,EAAE;wBACV,MAAM;qBACT;iBACJ;gBAED,OAAO,QAAQ,CAAC;aACnB;iBACI,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;;oBAE9J,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;aACxD;SACJ;aACI;YACD,OAAO,KAAK,CAAC;SAChB;KACJ;IAED,YAAY;QACR,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;KAC/D;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;SACzH;QAED,OAAO,KAAK,CAAC;KAChB;IAED,cAAc,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAEjE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC;SAC/E;QAED,OAAO,KAAK,CAAC;KAChB;IAED,YAAY,CAAC,KAAK,EAAE,QAAQ;QACxB,IAAI,KAAK;YACL,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC;;YAExH,OAAO,KAAK,CAAC;KACpB;IAED,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ;QAC9B,IAAI,OAAO,GAAa,KAAK,CAAC;QAC9B,IAAI,KAAK,IAAI,GAAG,EAAE;YACd,IAAI,IAAI,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;SAC/E;QAED,OAAO,OAAO,CAAC;KAClB;IAED,iBAAiB;QACb,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC;KAC1C;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC;KACzC;IAED,mBAAmB;QACf,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,CAAC;KAC5C;IAED,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;QAC3B,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;KAChG;IAED,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACvC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACb,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE;gBACnC,QAAQ,GAAG,KAAK,CAAC;aACpB;iBACI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;gBAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE;oBACjC,QAAQ,GAAG,KAAK,CAAC;iBACpB;qBACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;oBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE;wBAC9B,QAAQ,GAAG,KAAK,CAAC;qBACpB;iBACJ;aACJ;SACL;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACb,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE;gBACnC,QAAQ,GAAG,KAAK,CAAC;aACpB;iBACI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;gBAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE;oBACjC,QAAQ,GAAG,KAAK,CAAC;iBACpB;qBACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;oBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE;wBAC9B,QAAQ,GAAG,KAAK,CAAC;qBACpB;iBACJ;aACJ;SACL;QAED,IAAI,IAAI,CAAC,aAAa,EAAE;YACrB,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAC,KAAK,EAAC,IAAI,CAAC,CAAC;SACnD;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACpB,QAAQ,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAC,KAAK,EAAC,IAAI,CAAC,CAAA;SAChD;QAED,OAAO,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC;KACxD;IAED,cAAc,CAAC,GAAU,EAAE,KAAY,EAAE,IAAW;QAChD,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,KAAK,IAAI,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;gBACzC,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;oBAC5G,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;KAChB;IAED,aAAa,CAAC,GAAU,EAAE,KAAY,EAAE,IAAW;QAC/C,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;SAC1D;QACD,OAAO,KAAK,CAAC;KAChB;IAED,YAAY,CAAC,KAAY;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAED,YAAY;QACR,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;IAED,WAAW,CAAC,KAAY;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAED,aAAa,CAAC,KAAK,EAAE,UAAU;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;aACI;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;IAED,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YACpB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;SAChC,CAAC,CAAC;KACN;IAED,YAAY,CAAC,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;KAC1D;IAGD,wBAAwB;QACpB,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;KACnD;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,iBAAiB,CAAC,KAAK;QACnB,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,wBAAwB,CAAC,KAAK;QAC1B,QAAQ,KAAK,CAAC,KAAK;;YAEhB,KAAK,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iBACzB;gBACN,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM;YAEN;;gBAEA,MAAM;SACR;KACL;IAEA,cAAc,CAAC,KAAK;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACzB;aACI,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;SACJ;aACI,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;YAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;SACJ;aACI,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACnD,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;YACvG,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC/B;SACJ;KACJ;IAED,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU;QACrC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC;QACxC,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC;QAEvC,QAAQ,KAAK,CAAC,KAAK;;YAEf,KAAK,EAAE,EAAE;gBACL,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;gBACpD,IAAI,OAAO,EAAE;oBACT,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;wBAC9C,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC;wBACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;qBAC1B;yBACI;wBACD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACnD;iBACJ;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC;oBACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC;gBACxD,IAAI,OAAO,EAAE;oBACT,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;wBAC9C,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;wBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBAC3B;yBACI;wBACD,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;qBACrB;iBACJ;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBAC3C,IAAI,QAAQ,EAAE;oBACV,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC,EAAE;wBACzH,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBAC1C;yBACI;wBACD,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;qBACrB;iBACJ;qBACI;oBACD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;iBAC1C;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvC,IAAI,QAAQ,EAAE;oBACV,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;wBAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;qBAC3C;yBACI;wBACD,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;qBACrB;iBACJ;qBACI;oBACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iBAC3C;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;;YAID,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,CAAC,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iBACzB;gBACD,MAAM;aACT;YAED;;gBAEA,MAAM;SACT;KACJ;IAED,kBAAkB,CAAC,KAAK,EAAE,KAAK;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,QAAQ,KAAK,CAAC,KAAK;;YAEf,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAE,CAAC,CAAC,CAAC;gBACxE,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBAC3C,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvC,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC;oBACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;;YAID,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,CAAC,EAAE;gBACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iBACzB;gBACD,MAAM;aACT;YAED;;gBAEA,MAAM;SACT;KACJ;IAGD,iBAAiB,CAAC,KAAK,EAAE,KAAK;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QAEjC,QAAQ,KAAK,CAAC,KAAK;;YAEf,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACxC,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,GAAE,CAAC,CAAC,CAAC;gBACxE,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBAC3C,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvC,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;qBACI;oBACD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC;oBACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBAED,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;;YAID,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,EAAE,EAAE;gBACL,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;aACT;;YAGD,KAAK,CAAC,EAAE;gBACJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;aACT;YAED;;gBAEA,MAAM;SACT;KACJ;IAED,eAAe,CAAC,IAAI,EAAE,UAAU;QAC5B,IAAI,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC,EAAE;gBACjD,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;gBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC3B;iBACI;gBACD,IAAI,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE,6DAA6D,CAAC,CAAC;gBAC/G,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxC,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;aACrB;SACJ;aACI;YACD,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,KAAK,UAAU,KAAK,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE;gBACvE,IAAI,CAAC,eAAe,GAAG,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC;gBACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B;iBACI;gBACD,IAAI,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,kBAAkB,EAAE,6DAA6D,CAAC,CAAC;gBACzH,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACzB,SAAS,CAAC,KAAK,EAAE,CAAC;aACrB;SACJ;KACJ;IAED,WAAW;QACP,IAAI,IAAI,CAAC;QAET,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAEzB,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ;oBAC7B,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;;oBAEzF,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;aAChG;iBACI;gBACD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;oBAC/B,IAAI,KAAK,CAAC;oBAEV,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;wBAC9B,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,sDAAsD,CAAC,CAAC;qBACxH;yBACI,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;wBAClC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;qBACrH;yBACI;wBACD,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;qBAC/H;oBAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAClC;iBACJ;qBACI;oBACD,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;wBAC9B,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,sDAAsD,CAAC,CAAC;qBAC7H;yBACI,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;wBAClC,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;qBAC1H;yBACI;wBACD,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;qBACpI;iBACJ;gBAED,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACpB,IAAI,CAAC,KAAK,EAAE,CAAC;iBAChB;aACJ;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;aACI;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;KACJ;IAED,iBAAiB;QACb,IAAI,IAAI,CAAC;QAET,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;YAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,sDAAsD,CAAC,CAAC;YACzH,IAAI,YAAY,GAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,iDAAiD,CAAC,CAAC;YAChI,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,IAAI,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,gEAAgE,CAAC,CAAC;gBAC3I,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;aACrD;SACJ;aACI,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;YAClC,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;YACtH,IAAI,YAAY,GAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,8CAA8C,CAAC,CAAC;YAC7H,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,IAAI,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;gBACxI,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;aACrD;SACJ;aACI;YACD,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;YACtF,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,yDAAyD,CAAC,CAAC;gBACtI,IAAI,SAAS;oBACT,IAAI,GAAG,SAAS,CAAC;;oBAEjB,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;aACxI;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YAEpB,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;gBAC/E,UAAU,CAAC;oBACP,IAAI,CAAC,KAAK,EAAE,CAAC;iBAChB,EAAE,CAAC,CAAC,CAAC;aACT;YAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;KACJ;IAED,SAAS,CAAC,KAAK;QACX,IAAI,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAE7F,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnD,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE;gBACnD,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;aAChC;iBACI;gBACD,IAAI,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAE/F,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAChB,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;wBAC1C,IAAI,IAAI,CAAC,SAAS,EAAC;4BACf,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;yBAC3D;6BACI;4BACD,IAAI,YAAY,KAAK,CAAC,CAAC;gCACnB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;iCACzB,IAAI,YAAY,KAAK,CAAC;gCACvB,OAAO;yBACd;qBACJ;yBACI;wBACD,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC/C;iBACJ;qBACI;oBACD,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;wBACvE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,CAAC,CAAC;4BACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;;4BAE1B,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACpC;yBACI;wBACD,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC/C;iBACJ;aACJ;SACJ;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,qBAAqB,CAAC,CAAS;QAC3B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC1D;IAED,oBAAoB,CAAC,CAAS;QAC1B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC1D;IAaD,YAAY,CAAC,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,EAAW;QAClE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1C;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC7C;QACD,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;QAC5D,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,eAAe,EAAE;YACpF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,aAAa,EAAE;gBACzC,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;gBAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;oBACpC,OAAO,KAAK,CAAC;iBAChB;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;oBACtC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;wBACpC,OAAO,KAAK,CAAC;qBAChB;iBACJ;aACJ;SACJ;QAEH,IAAI,IAAI,CAAC,OAAO,IAAI,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,eAAe,EAAE;YAClF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,aAAa,EAAE;gBACzC,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,aAAa,EAAE;gBAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;oBACpC,OAAO,KAAK,CAAC;iBAChB;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;oBACxC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE;wBACpC,OAAO,KAAK,CAAC;qBAChB;iBACF;aACJ;SACJ;QACD,OAAO,IAAI,CAAC;KACf;IAGD,aAAa,CAAC,KAAK;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;YACvB,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,GAAG,EAAE,IAAI,OAAO,CAAC;aACpD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;;YAE9B,IAAI,QAAQ,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,EAAE;gBAC/B,KAAK,GAAE,CAAC,IAAI,CAAC,EAAE,CAAC;aACnB;YACD,OAAO,GAAG,CAAC,OAAO,IAAI,EAAE,KAAK,OAAO,GAAG,EAAE,IAAI,OAAO,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YAC7E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;SACjB;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,4BAA4B,CAAC,KAAY,EAAE,IAAY,EAAE,SAAiB;QACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;KACJ;IAED,0BAA0B,CAAC,KAAY;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;KACJ;IAED,6BAA6B;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;YACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;KACJ;IAED,MAAM,CAAC,KAAY,EAAE,QAAgB,EAAE,IAAY,EAAE,SAAiB;QAClE,IAAI,CAAC,GAAG,QAAQ,IAAE,GAAG,CAAC;QAEtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;SAC1B,EAAE,CAAC,CAAC,CAAC;QAEN,QAAO,IAAI;YACP,KAAK,CAAC;gBACF,IAAI,SAAS,KAAK,CAAC;oBACf,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;oBAE1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM;YAEN,KAAK,CAAC;gBACF,IAAI,SAAS,KAAK,CAAC;oBACf,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;oBAE5B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM;YAEN,KAAK,CAAC;gBACF,IAAI,SAAS,KAAK,CAAC;oBACf,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;oBAE5B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,MAAM;SACT;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC3B;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;KACJ;IAED,aAAa,CAAC,KAAK;QACf,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAA;QAEnB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;YACvB,OAAO,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC;aAClD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;;YAE9B,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE;gBACzB,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aACpB;YACD,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,IAAI,OAAO,CAAC;SACvD;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YAC7E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;SACjB;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,SAAS,GAAG,CAAC,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1D,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YAC7E,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC;QACzD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YAC7E,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,SAAS,GAAG,CAAC,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1D,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YAC7E,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,SAAS,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC;QACzD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE;YAC7E,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,UAAU;QACN,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1C;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC7C;QACD,KAAK,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE;gBACvB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;gBAEjC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1E;aACI;YACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACpC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YACzB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;;gBAE/B,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAC;YAC3B,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;SAC/C;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC3B;IAED,UAAU,CAAC,KAAK;QACZ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YACtF,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,WAAW,CAAC,KAAK;;QAEb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,OAAO;SACV;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI;YACA,IAAI,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;aACnB;SACJ;QACD,OAAM,GAAG,EAAE;;YAEP,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAED,gBAAgB,CAAC,KAAK;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE;gBACnF,OAAO,GAAG,KAAK,CAAC;aACnB;SACJ;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE;YAC/F,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBACzB,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;aACpE;SACJ;QACD,OAAO,OAAO,CAAC;KAClB;IAED,oBAAoB,CAAC,IAAY;QAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,KAAU,CAAC;QAEf,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC1B,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACpC;aACI,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YACjC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChD,KAAK,GAAG,EAAE,CAAC;YACX,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aAChD;SACJ;aACI,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAC,IAAI,CAAC,cAAc,GAAE,GAAG,CAAC,CAAC;YACtD,KAAK,GAAG,EAAE,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aACnD;SACJ;QAED,OAAO,KAAK,CAAC;KAChB;IAED,aAAa,CAAC,IAAI;QACd,IAAI,IAAU,CAAC;QACf,IAAI,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C;aACI;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBACxD,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBAE7B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;aAC7C;iBACI;gBACA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;aAC5C;SACJ;QAED,OAAO,IAAI,CAAC;KACf;IAED,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI;QAChC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;YAClC,MAAM,cAAc,CAAC;SACxB;QAED,IAAI,CAAC,EAAE,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;QAC3C,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjC;IAED,QAAQ;QACJ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAE,IAAI,CAAC,WAAW,IAAE,IAAI,IAAI,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAC;YACnB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAChB;QAED,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,QAAQ,IAAE,IAAI,CAAC,QAAQ,EAAE;YAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;SACzC;KACJ;IAED,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC5B;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;KACJ;IAED,WAAW;QACP,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,eAAe,EAAE,CAAC;SAC1B;QAED,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,MAAM;QACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAC;YACb,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;aAClD;iBACI;gBACD,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;SACJ;KACJ;IAED,uBAAuB,CAAC,KAAqB;QACzC,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,SAAS,CAAC;YACf,KAAK,gBAAgB;gBACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;oBACtD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI,IAAI,CAAC,UAAU,EAAE;wBACjB,IAAI,IAAI,CAAC,OAAO;4BACZ,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;4BAEpF,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBAC/F;oBAED,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC3B;gBACL,MAAM;YAEN,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM;SACT;KACJ;IAED,sBAAsB,CAAC,KAAqB;QACxC,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,SAAS,CAAC;YACf,KAAK,gBAAgB;gBACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;iBAC7B;gBACL,MAAM;YAEN,KAAK,MAAM;gBACP,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;iBACpC;gBACL,MAAK;SACR;KACJ;IAED,aAAa;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAExC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC3D;KACJ;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnD;KACJ;IAED,YAAY;QACR,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrC;aACI,IAAG,IAAI,CAAC,OAAO,EAAE;YAClB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;oBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;oBACzE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;iBACzG;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;iBACtG;gBAED,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;aACrF;iBACG;gBACA,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;aACrF;SACJ;KACJ;IAED,cAAc,CAAC,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,cAAc,GAAG,qHAAqH,CAAC;YAC3I,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAElE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,KAAU;gBAChE,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;SAC3D;KACJ;IAED,eAAe;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;YAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACzE;KACJ;IAED,WAAW;QACP,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC1C,IAAI,eAAwB,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE;gBACnE,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,CAAC,eAAe,EAAE;YAClB,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;SAC9D;QAED,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACpB;IAED,uBAAuB;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACvC;KACE;IAED,0BAA0B;QACtB,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACzE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpC;KACJ;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,gBAAgB,CAAC,EAAY;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,CAAC,EAAY;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,GAAY;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,IAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;KAC7D;;IAGD,UAAU,CAAC,IAAI,EAAE,MAAM;QACnB,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,EAAE,CAAC;SACb;QAED,IAAI,OAAO,CAAC;QACZ,MAAM,SAAS,GAAG,CAAC,KAAK;YACpB,MAAM,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACtF,IAAI,OAAO,EAAE;gBACT,OAAO,EAAE,CAAC;aACb;YACD,OAAO,OAAO,CAAC;SAClB,EACG,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG;YAC7B,IAAI,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;YACrB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;gBAClB,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;oBACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;iBACnB;aACJ;YACD,OAAO,GAAG,CAAC;SACd,EACD,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS;YAC7C,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;SACpE,CAAC;QACN,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,IAAI,EAAE;YACN,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBAClD,IAAI,OAAO,EAAE;oBACT,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBACrD,OAAO,GAAG,KAAK,CAAC;qBACnB;yBAAM;wBACH,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBACpC;iBACJ;qBAAM;oBACH,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;wBAC1B,KAAK,GAAG;4BACJ,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC/C,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;4BAC/I,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,YAAY,CAAC,GAAG,EAC1B,IAAI,CAAC,KAAK,CAAC,CACP,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;gCACvE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;4BAClE,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BACpD,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,UAAU,CAAC,GAAG,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;4BACpJ,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC;4BACxH,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BACzB,MAAM;wBACV,KAAK,GAAG;4BACJ,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;4BACpD,MAAM;wBACV,KAAK,IAAI;4BACL,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;gCACjB,MAAM,IAAI,IAAI,CAAC;6BAClB;iCAAM;gCACH,OAAO,GAAG,IAAI,CAAC;6BAClB;4BACD,MAAM;wBACV;4BACI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBACxC;iBACJ;aACJ;SACJ;QACD,OAAO,MAAM,CAAC;KACjB;IAED,UAAU,CAAC,IAAI;QACX,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,EAAE,CAAC;SACb;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE;YACtD,KAAK,IAAE,EAAE,CAAC;SACb;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB,MAAM,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;SACnE;aAAM;YACH,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;SAChD;QACD,MAAM,IAAI,GAAG,CAAC;QACd,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;QAEnD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,IAAI,GAAG,CAAC;YACd,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;SACtD;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YACzB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;SAClD;QAED,OAAO,MAAM,CAAC;KACjB;IAED,SAAS,CAAC,KAAK;QACX,IAAI,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,EAAE;YACpC,MAAM,cAAc,CAAC;SACxB;QAED,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAEtD,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;YAC/H,MAAM,cAAc,CAAC;SACxB;aACI;YACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBACzB,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;oBACrB,CAAC,IAAI,EAAE,CAAC;iBACX;qBACI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;oBAC3B,CAAC,IAAI,EAAE,CAAC;iBACX;aACJ;YAED,OAAO,EAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC;SAC1C;KACJ;;IAGD,SAAS,CAAC,KAAK,EAAE,MAAM;QACnB,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;YACjC,MAAM,mBAAmB,CAAC;SAC7B;QAED,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,EAAE,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EACvB,MAAM,GAAG,CAAC,EACV,eAAe,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,EACzJ,IAAI,GAAG,CAAC,CAAC,EACT,KAAK,GAAG,CAAC,CAAC,EACV,GAAG,GAAG,CAAC,CAAC,EACR,GAAG,GAAG,CAAC,CAAC,EACR,OAAO,GAAG,KAAK,EACf,IAAI,EACJ,SAAS,GAAG,CAAC,KAAK;YACd,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACpF,IAAI,OAAO,EAAE;gBACT,OAAO,EAAE,CAAC;aACb;YACD,OAAO,OAAO,CAAC;SAClB,EACD,SAAS,GAAG,CAAC,KAAK;YACd,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAC5B,IAAI,IAAI,KAAK,KAAK,GAAG,GAAG,EAAE,IAAI,KAAK,KAAK,GAAG,GAAG,EAAE;iBAC/C,KAAK,KAAK,GAAG,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,OAAO,IAAI,KAAK,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EACpC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,EACzD,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,EAAE;gBACN,MAAM,6BAA6B,GAAG,MAAM,CAAC;aAChD;YACD,MAAM,IAAI,GAAG,CAAE,CAAC,CAAE,CAAC,MAAM,CAAC;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAE,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;SACjC,EACD,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS;YACnC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;YACf,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC;YACpD,IAAI,KAAK,GAAG,EAAE,CAAC;YAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1B;YACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC;gBACX,OAAO,EAAE,CAAC,CAAE,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC;aAC3C,CAAC,CAAC;YAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;oBACxE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;oBACtB,MAAM;iBACT;aACJ;YAED,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,OAAO,KAAK,GAAG,CAAC,CAAC;aACpB;iBAAM;gBACH,MAAM,2BAA2B,GAAG,MAAM,CAAC;aAC9C;SACJ,EACD,YAAY,GAAG;YACX,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBACjD,MAAM,iCAAiC,GAAG,MAAM,CAAC;aACpD;YACD,MAAM,EAAE,CAAC;SACZ,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,GAAG,GAAG,CAAC,CAAC;SACX;QAED,KAAK,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAClD,IAAI,OAAO,EAAE;gBACT,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;oBACnD,OAAO,GAAG,KAAK,CAAC;iBACnB;qBAAM;oBACH,YAAY,EAAE,CAAC;iBAClB;aACJ;iBAAM;gBACH,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC1B,KAAK,GAAG;wBACJ,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACrB,MAAM;oBACV,KAAK,GAAG;wBACJ,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;wBACnH,MAAM;oBACV,KAAK,GAAG;wBACJ,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACrB,MAAM;oBACV,KAAK,GAAG;wBACJ,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACvB,MAAM;oBACV,KAAK,GAAG;wBACJ,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;wBAC/H,MAAM;oBACV,KAAK,GAAG;wBACJ,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;wBACtB,MAAM;oBACV,KAAK,GAAG;wBACJ,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC1B,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;wBAC5B,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBACrB,MAAM;oBACV,KAAK,GAAG;wBACJ,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;wBAC7D,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC1B,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;wBAC5B,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;wBACrB,MAAM;oBACV,KAAK,GAAG;wBACJ,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;4BAChB,YAAY,EAAE,CAAC;yBAClB;6BAAM;4BACH,OAAO,GAAG,IAAI,CAAC;yBAClB;wBACD,MAAM;oBACV;wBACI,YAAY,EAAE,CAAC;iBACtB;aACJ;SACJ;QAED,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACrB,MAAM,2CAA2C,GAAG,KAAK,CAAC;aAC7D;SACJ;QAED,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;YACb,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACnC;aAAM,IAAI,IAAI,GAAG,GAAG,EAAE;YACnB,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,GAAG;iBAC5D,IAAI,IAAI,eAAe,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC5C;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;YACV,KAAK,GAAG,CAAC,CAAC;YACV,GAAG,GAAG,GAAG,CAAC;YACV,GAAG;gBACC,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,GAAG,IAAI,GAAG,EAAE;oBACZ,MAAM;iBACT;gBACD,KAAK,EAAE,CAAC;gBACR,GAAG,IAAI,GAAG,CAAC;aACd,QAAQ,IAAI,EAAE;SAClB;QAED,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE;YACxF,MAAM,cAAc,CAAC;SACxB;QAET,OAAO,IAAI,CAAC;KACf;IAED,oBAAoB,CAAC,IAAI;QACrB,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC;KACf;IAED,iBAAiB;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;KACpE;IAED,kBAAkB,CAAC,KAAK;QACpB,IAAI,IAAI,GAAS,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,EAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC;QAEpN,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,kBAAkB,CAAC,KAAK;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,qBAAqB;QACjB,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC9B,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,UAAU,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;aAC1D;YAED,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;qBAC9C,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;qBAC5C,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAErG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;oBACrD,IAAI,MAAM,GAAG;wCACO,IAAI,CAAC,iBAAiB,mCAAmC,SAAS;;;qBAGrF,CAAC;oBAEF,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;wBAClD,MAAM,IAAI;4CACU,IAAI,CAAC,iBAAiB,mCAAmC,CAAC,GAAG,CAAC;;;yBAGjF,CAAA;qBACJ;oBAED,SAAS,IAAI;wDACuB,UAAU;8BACpC,MAAM;;qBAEf,CAAA;iBACJ;aACJ;YAED,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,SAAS,CAAC;SACrD;KACJ;IAED,6BAA6B;QACzB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;KACJ;IAED,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBACxB,MAAM,cAAc,GAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,GAAG,UAAU,CAAC;gBAEvF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,KAAK;oBACjF,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;wBACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;4BACV,IAAI,CAAC,WAAW,EAAE,CAAC;4BACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAEhC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;yBAC1B,CAAC,CAAC;qBACN;iBAEJ,CAAC,CAAC;aACN,CAAC,CAAC;SACN;KACJ;IAED,2BAA2B;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACrC;KACJ;IAED,0BAA0B;QACtB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAClE;KACJ;IAED,4BAA4B;QACxB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAC1F,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;iBACtB;aACJ,CAAC,CAAC;SACN;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;KAC3C;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;SAC7C;KACJ;IAED,gBAAgB,CAAC,KAAY;QACzB,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAC/E,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAQ,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACzH;IAED,gBAAgB,CAAC,KAAY;QACzB,QAAQ,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC;eAClH,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE;KACrI;IAED,cAAc;QACV,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE;YAChD,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;IAED,aAAa;QACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;QAED,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACvB;IAED,WAAW;QACP,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;SAC9C;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;YACjC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnC;QAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;;qGAzuFQ,QAAQ;yFAAR,QAAQ,ktEALN,CAAC,uBAAuB,CAAC,oDAiInB,aAAa,8UAzSnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwIV,qkFACW;QACR,OAAO,CAAC,kBAAkB,EAAE;YACxB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;gBAC1B,SAAS,EAAE,sBAAsB;gBACjC,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;YACH,UAAU,CAAC,iBAAiB,EAAE;gBAC1B,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC;gBAC7C,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;aAC7E,CAAC;YACF,UAAU,CAAC,iBAAiB,EAAE;gBAC1B,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7D,CAAC;YACF,UAAU,CAAC,wBAAwB,EAAE;gBACjC,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,uCAAuC,EAAC,CAAC;gBACvE,OAAO,CAAC,0BAA0B,CAAC;aACtC,CAAC;YACF,UAAU,CAAC,wBAAwB,EAAE;gBACjC,OAAO,EAAE,0BAA0B,GACnC,KAAK,CAAC;oBACF,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,uCAAuC;iBACrD,CAAC,CAAC;aACN,CAAC;SACL,CAAC;KACL;2FAWQ,QAAQ;kBA/KpB,SAAS;+BACI,YAAY,YACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwIV,cACW;wBACR,OAAO,CAAC,kBAAkB,EAAE;4BACxB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;gCAC1B,SAAS,EAAE,sBAAsB;gCACjC,OAAO,EAAE,CAAC;6BACb,CAAC,CAAC;4BACH,UAAU,CAAC,iBAAiB,EAAE;gCAC1B,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC;gCAC7C,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;6BAC7E,CAAC;4BACF,UAAU,CAAC,iBAAiB,EAAE;gCAC1B,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BAC7D,CAAC;4BACF,UAAU,CAAC,wBAAwB,EAAE;gCACjC,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,uCAAuC,EAAC,CAAC;gCACvE,OAAO,CAAC,0BAA0B,CAAC;6BACtC,CAAC;4BACF,UAAU,CAAC,wBAAwB,EAAE;gCACjC,OAAO,EAAE,0BAA0B,GACnC,KAAK,CAAC;oCACF,OAAO,EAAE,CAAC;oCACV,SAAS,EAAE,uCAAuC;iCACrD,CAAC,CAAC;6BACN,CAAC;yBACL,CAAC;qBACL,QACK;wBACF,OAAO,EAAE,0BAA0B;wBACnC,+BAA+B,EAAE,QAAQ;wBACzC,8BAA8B,EAAE,OAAO;qBAC1C,aACU,CAAC,uBAAuB,CAAC,mBACnB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;uOAK5B,KAAK;sBAAb,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,iBAAiB;sBAAzB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,MAAM;sBAAd,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,iBAAiB;sBAAzB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,IAAI;sBAAZ,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,QAAQ;sBAAhB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,YAAY;sBAApB,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,eAAe;sBAAvB,KAAK;gBAEG,UAAU;sBAAlB,KAAK;gBAEG,WAAW;sBAAnB,KAAK;gBAEG,oBAAoB;sBAA5B,KAAK;gBAEG,OAAO;sBAAf,KAAK;gBAEG,aAAa;sBAArB,KAAK;gBAEG,SAAS;sBAAjB,KAAK;gBAEG,cAAc;sBAAtB,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEG,qBAAqB;sBAA7B,KAAK;gBAEI,OAAO;sBAAhB,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEG,OAAO;sBAAhB,MAAM;gBAEG,QAAQ;sBAAjB,MAAM;gBAEG,OAAO;sBAAhB,MAAM;gBAEG,YAAY;sBAArB,MAAM;gBAEG,YAAY;sBAArB,MAAM;gBAEG,aAAa;sBAAtB,MAAM;gBAEG,YAAY;sBAArB,MAAM;gBAEG,cAAc;sBAAvB,MAAM;gBAEG,MAAM;sBAAf,MAAM;gBAEyB,SAAS;sBAAxC,eAAe;uBAAC,aAAa;gBAErB,QAAQ;sBAAhB,KAAK;gBAEqC,kBAAkB;sBAA5D,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAEG,mBAAmB;sBAA9D,SAAS;uBAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAEU,OAAO;sBAA1D,SAAS;uBAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAgIjC,IAAI;sBAAhB,KAAK;gBAUO,WAAW;sBAAvB,KAAK;gBAkBO,OAAO;sBAAnB,KAAK;gBAYO,OAAO;sBAAnB,KAAK;gBAYO,aAAa;sBAAzB,KAAK;gBAYO,YAAY;sBAAxB,KAAK;gBAYO,SAAS;sBAArB,KAAK;gBAgBO,QAAQ;sBAApB,KAAK;gBAiBO,iBAAiB;sBAA7B,KAAK;gBAYO,cAAc;sBAA1B,KAAK;gBAYF,MAAM;sBADT,KAAK;;MAy2EG,cAAc;;2GAAd,cAAc;4GAAd,cAAc,iBAjvFd,QAAQ,aA6uFP,YAAY,EAAC,YAAY,EAAC,YAAY,EAAC,YAAY,aA7uFpD,QAAQ,EA8uFE,YAAY,EAAC,YAAY;4GAGnC,cAAc,YAJd,CAAC,YAAY,EAAC,YAAY,EAAC,YAAY,EAAC,YAAY,CAAC,EAC3C,YAAY,EAAC,YAAY;2FAGnC,cAAc;kBAL1B,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,EAAC,YAAY,EAAC,YAAY,CAAC;oBAC9D,OAAO,EAAE,CAAC,QAAQ,EAAC,YAAY,EAAC,YAAY,CAAC;oBAC7C,YAAY,EAAE,CAAC,QAAQ,CAAC;iBAC3B;;;AC97FD;;;;;;"}
         | 
| 1 | 
            +
            {"version":3,"file":"primeng-calendar.mjs","sources":["../../src/app/components/calendar/calendar.ts","../../src/app/components/calendar/primeng-calendar.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,OnDestroy,OnInit,Input,Output,EventEmitter,forwardRef,Renderer2,\n        ViewChild,ChangeDetectorRef,TemplateRef,ContentChildren,QueryList,NgZone,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {trigger,state,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {CommonModule} from '@angular/common';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {SharedModule,PrimeTemplate,PrimeNGConfig,TranslationKeys, OverlayService} from 'primeng/api';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {UniqueComponentId, ZIndexUtils} from 'primeng/utils';\n\nexport const CALENDAR_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => Calendar),\n    multi: true\n};\n\nexport interface LocaleSettings {\n    firstDayOfWeek?: number;\n    dayNames?: string[];\n    dayNamesShort?: string[];\n    dayNamesMin?: string[];\n    monthNames?: string[];\n    monthNamesShort?: string[];\n    today?: string;\n    clear?: string;\n    dateFormat?: string;\n    weekHeader?: string;\n}\n\n@Component({\n    selector: 'p-calendar',\n    template:  `\n        <span #container [ngClass]=\"{'p-calendar':true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled':disabled, 'p-focus': focus}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <ng-template [ngIf]=\"!inline\">\n                <input #inputfield type=\"text\" [attr.id]=\"inputId\" [attr.name]=\"name\" [attr.required]=\"required\" [attr.aria-required]=\"required\" [value]=\"inputFieldValue\" (focus)=\"onInputFocus($event)\" (keydown)=\"onInputKeydown($event)\" (click)=\"onInputClick()\" (blur)=\"onInputBlur($event)\"\n                    [readonly]=\"readonlyInput\" (input)=\"onUserInput($event)\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [placeholder]=\"placeholder||''\" [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" [attr.inputmode]=\"touchUI ? 'off' : null\"\n                    [ngClass]=\"'p-inputtext p-component'\" autocomplete=\"off\" [attr.aria-labelledby]=\"ariaLabelledBy\"\n                    ><button type=\"button\" [attr.aria-label]=\"iconAriaLabel\" [icon]=\"icon\" pButton pRipple *ngIf=\"showIcon\" (click)=\"onButtonClick($event,inputfield)\" class=\"p-datepicker-trigger\"\n                    [disabled]=\"disabled\" tabindex=\"0\"></button>\n            </ng-template>\n            <div #contentWrapper [class]=\"panelStyleClass\" [ngStyle]=\"panelStyle\" [ngClass]=\"{'p-datepicker p-component': true, 'p-datepicker-inline':inline,\n                'p-disabled':disabled,'p-datepicker-timeonly':timeOnly,'p-datepicker-multiple-month': this.numberOfMonths > 1, 'p-datepicker-monthpicker': (view === 'month'), 'p-datepicker-touch-ui': touchUI}\"\n                [@overlayAnimation]=\"touchUI ? {value: 'visibleTouchUI', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}:\n                                            {value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\"\n                                            [@.disabled]=\"inline === true\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationDone($event)\" (click)=\"onOverlayClick($event)\" *ngIf=\"inline || overlayVisible\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ng-container *ngIf=\"!timeOnly\">\n                    <div class=\"p-datepicker-group-container\">\n                        <div class=\"p-datepicker-group\" *ngFor=\"let month of months; let i = index;\">\n                            <div class=\"p-datepicker-header\">\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-prev p-link\" (click)=\"onPrevButtonClick($event)\" *ngIf=\"i === 0\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-prev-icon pi pi-chevron-left\"></span>\n                                </button>\n                                <div class=\"p-datepicker-title\">\n                                    <button type=\"button\" (click)=\"switchToMonthView($event)\" (keydown)=\"onContainerButtonKeydown($event)\" *ngIf=\"currentView === 'date'\" class=\"p-datepicker-month p-link\" [disabled]=\"switchViewButtonDisabled()\">\n                                        {{getMonthName(month.month)}}\n                                    </button>\n                                    <button type=\"button\" (click)=\"switchToYearView($event)\" (keydown)=\"onContainerButtonKeydown($event)\" *ngIf=\"currentView !== 'year'\" class=\"p-datepicker-year p-link\" [disabled]=\"switchViewButtonDisabled()\">\n                                        {{month.year}}\n                                    </button>\n                                    <span class=\"p-datepicker-decade\" *ngIf=\"currentView === 'year'\">\n                                        <ng-container *ngIf=\"!decadeTemplate\">{{yearPickerValues()[0]}} - {{yearPickerValues()[yearPickerValues().length - 1]}}</ng-container>\n                                        <ng-container *ngTemplateOutlet=\"decadeTemplate; context: {$implicit: yearPickerValues}\"></ng-container>\n                                    </span>\n                                </div>\n                                <button (keydown)=\"onContainerButtonKeydown($event)\" class=\"p-datepicker-next p-link\" (click)=\"onNextButtonClick($event)\" [style.display]=\"numberOfMonths === 1 ? 'inline-flex' : (i === numberOfMonths -1) ? 'inline-flex' : 'none'\" type=\"button\" pRipple>\n                                    <span class=\"p-datepicker-next-icon pi pi-chevron-right\"></span>\n                                </button>\n                            </div>\n                            <div class=\"p-datepicker-calendar-container\" *ngIf=\"currentView ==='date'\">\n                                <table class=\"p-datepicker-calendar\">\n                                    <thead>\n                                        <tr>\n                                            <th *ngIf=\"showWeek\" class=\"p-datepicker-weekheader p-disabled\">\n                                                <span>{{getTranslation('weekHeader')}}</span>\n                                            </th>\n                                            <th scope=\"col\" *ngFor=\"let weekDay of weekDays;let begin = first; let end = last\">\n                                                <span>{{weekDay}}</span>\n                                            </th>\n                                        </tr>\n                                    </thead>\n                                    <tbody>\n                                        <tr *ngFor=\"let week of month.dates; let j = index;\">\n                                            <td *ngIf=\"showWeek\" class=\"p-datepicker-weeknumber\">\n                                                <span class=\"p-disabled\">\n                                                    {{month.weekNumbers[j]}}\n                                                </span>\n                                            </td>\n                                            <td *ngFor=\"let date of week\" [ngClass]=\"{'p-datepicker-other-month': date.otherMonth,'p-datepicker-today':date.today}\">\n                                                <ng-container *ngIf=\"date.otherMonth ? showOtherMonths : true\">\n                                                    <span [ngClass]=\"{'p-highlight':isSelected(date), 'p-disabled': !date.selectable}\"\n                                                        (click)=\"onDateSelect($event,date)\" draggable=\"false\" (keydown)=\"onDateCellKeydown($event,date,i)\" pRipple>\n                                                        <ng-container *ngIf=\"!dateTemplate\">{{date.day}}</ng-container>\n                                                        <ng-container *ngTemplateOutlet=\"dateTemplate; context: {$implicit: date}\"></ng-container>\n                                                    </span>\n                                                </ng-container>\n                                            </td>\n                                        </tr>\n                                    </tbody>\n                                </table>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"p-monthpicker\" *ngIf=\"currentView === 'month'\">\n                        <span *ngFor=\"let m of monthPickerValues(); let i = index\" (click)=\"onMonthSelect($event, i)\" (keydown)=\"onMonthCellKeydown($event,i)\" class=\"p-monthpicker-month\" [ngClass]=\"{'p-highlight': isMonthSelected(i), 'p-disabled':!isSelectable(1, i, this.currentYear, false)}\" pRipple>\n                            {{m}}\n                        </span>\n                    </div>\n                    <div class=\"p-yearpicker\" *ngIf=\"currentView === 'year'\">\n                        <span *ngFor=\"let y of yearPickerValues()\" (click)=\"onYearSelect($event, y)\" (keydown)=\"onYearCellKeydown($event,y)\" class=\"p-yearpicker-year\" [ngClass]=\"{'p-highlight': isYearSelected(y)}\" pRipple>\n                            {{y}}\n                        </span>\n                    </div>\n                </ng-container>\n                <div class=\"p-timepicker\" *ngIf=\"showTime||timeOnly\">\n                    <div class=\"p-hour-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementHour($event)\" (keydown.space)=\"incrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentHour < 10\">0</ng-container>{{currentHour}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementHour($event)\" (keydown.space)=\"decrementHour($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 0, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-minute-picker\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementMinute($event)\" (keydown.space)=\"incrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentMinute < 10\">0</ng-container>{{currentMinute}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementMinute($event)\" (keydown.space)=\"decrementMinute($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 1, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-separator\" *ngIf=\"showSeconds\">\n                        <span>{{timeSeparator}}</span>\n                    </div>\n                    <div class=\"p-second-picker\" *ngIf=\"showSeconds\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"incrementSecond($event)\" (keydown.space)=\"incrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, 1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span><ng-container *ngIf=\"currentSecond < 10\">0</ng-container>{{currentSecond}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (keydown.enter)=\"decrementSecond($event)\" (keydown.space)=\"decrementSecond($event)\" (mousedown)=\"onTimePickerElementMouseDown($event, 2, -1)\" (mouseup)=\"onTimePickerElementMouseUp($event)\" (keyup.enter)=\"onTimePickerElementMouseUp($event)\" (keyup.space)=\"onTimePickerElementMouseUp($event)\" (mouseleave)=\"onTimePickerElementMouseLeave()\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                    <div class=\"p-ampm-picker\" *ngIf=\"hourFormat=='12'\">\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-up\"></span>\n                        </button>\n                        <span>{{pm ? 'PM' : 'AM'}}</span>\n                        <button class=\"p-link\" type=\"button\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"toggleAMPM($event)\" (keydown.enter)=\"toggleAMPM($event)\" pRipple>\n                            <span class=\"pi pi-chevron-down\"></span>\n                        </button>\n                    </div>\n                </div>\n                <div class=\"p-datepicker-buttonbar\" *ngIf=\"showButtonBar\">\n                    <button type=\"button\" [label]=\"getTranslation('today')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onTodayButtonClick($event)\" pButton pRipple [ngClass]=\"[todayButtonStyleClass]\"></button>\n                    <button type=\"button\" [label]=\"getTranslation('clear')\" (keydown)=\"onContainerButtonKeydown($event)\" (click)=\"onClearButtonClick($event)\" pButton pRipple [ngClass]=\"[clearButtonStyleClass]\"></button>\n                </div>\n                <ng-content select=\"p-footer\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            state('visibleTouchUI', style({\n                transform: 'translate(-50%,-50%)',\n                opacity: 1\n            })),\n            transition('void => visible', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))\n            ]),\n            transition('visible => void', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n            ]),\n            transition('void => visibleTouchUI', [\n                style({opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)'}),\n                animate('{{showTransitionParams}}')\n            ]),\n            transition('visibleTouchUI => void', [\n                animate(('{{hideTransitionParams}}'),\n                style({\n                    opacity: 0,\n                    transform: 'translate3d(-50%, -40%, 0) scale(0.9)'\n                }))\n            ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focus'\n    },\n    providers: [CALENDAR_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./calendar.css']\n})\nexport class Calendar implements OnInit,OnDestroy,ControlValueAccessor {\n\n    @Input() style: any;\n\n    @Input() styleClass: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputId: string;\n\n    @Input() name: string;\n\n    @Input() inputStyleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() iconAriaLabel: string;\n\n    @Input() disabled: any;\n\n    @Input() dateFormat: string;\n\n    @Input() multipleSeparator: string = ',';\n\n    @Input() rangeSeparator: string = '-';\n\n    @Input() inline: boolean = false;\n\n    @Input() showOtherMonths: boolean = true;\n\n    @Input() selectOtherMonths: boolean;\n\n    @Input() showIcon: boolean;\n\n    @Input() icon: string = 'pi pi-calendar';\n\n    @Input() appendTo: any;\n\n    @Input() readonlyInput: boolean;\n\n    @Input() shortYearCutoff: any = '+10';\n\n    @Input() monthNavigator: boolean;\n\n    @Input() yearNavigator: boolean;\n\n    @Input() hourFormat: string = '24';\n\n    @Input() timeOnly: boolean;\n\n    @Input() stepHour: number = 1;\n\n    @Input() stepMinute: number = 1;\n\n    @Input() stepSecond: number = 1;\n\n    @Input() showSeconds: boolean = false;\n\n    @Input() required: boolean;\n\n    @Input() showOnFocus: boolean = true;\n\n    @Input() showWeek: boolean = false;\n\n    @Input() dataType: string = 'date';\n\n    @Input() selectionMode: string = 'single';\n\n    @Input() maxDateCount: number;\n\n    @Input() showButtonBar: boolean;\n\n    @Input() todayButtonStyleClass: string = 'p-button-text';\n\n    @Input() clearButtonStyleClass: string = 'p-button-text';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() panelStyleClass: string;\n\n    @Input() panelStyle: any;\n\n    @Input() keepInvalid: boolean = false;\n\n    @Input() hideOnDateTimeSelect: boolean = true;\n\n    @Input() touchUI: boolean;\n\n    @Input() timeSeparator: string = \":\";\n\n    @Input() focusTrap: boolean = true;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClose: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onTodayClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClearClick: EventEmitter<any> = new EventEmitter();\n\n    @Output() onMonthChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onYearChange: EventEmitter<any> = new EventEmitter();\n\n    @Output() onClickOutside: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Input() tabindex: number;\n\n    @ViewChild('container', { static: false }) containerViewChild: ElementRef;\n\n    @ViewChild('inputfield', { static: false }) inputfieldViewChild: ElementRef;\n\n    @ViewChild('contentWrapper', { static: false }) set content (content: ElementRef) {\n        this.contentViewChild = content;\n\n        if (this.contentViewChild) {\n            if (this.isMonthNavigate) {\n                Promise.resolve(null).then(() => this.updateFocus());\n                this.isMonthNavigate = false;\n            }\n            else {\n                if (!this.focus) {\n                    this.initFocusableCell();\n                }\n            }\n        }\n    };\n\n    contentViewChild: ElementRef;\n\n    value: any;\n\n    dates: any[];\n\n    months: any[];\n\n    weekDays: string[];\n\n    currentMonth: number;\n\n    currentYear: number;\n\n    currentHour: number;\n\n    currentMinute: number;\n\n    currentSecond: number;\n\n    pm: boolean;\n\n    mask: HTMLDivElement;\n\n    maskClickListener: Function;\n\n    overlay: HTMLDivElement;\n\n    responsiveStyleElement: any;\n\n    overlayVisible: boolean;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    calendarElement: any;\n\n    timePickerTimer:any;\n\n    documentClickListener: any;\n\n    animationEndListener: any;\n\n    ticksTo1970: number;\n\n    yearOptions: number[];\n\n    focus: boolean;\n\n    isKeydown: boolean;\n\n    filled: boolean;\n\n    inputFieldValue: string = null;\n\n    _minDate: Date;\n\n    _maxDate: Date;\n\n    _showTime: boolean;\n\n    _yearRange: string;\n\n    preventDocumentListener: boolean;\n\n    dateTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    disabledDateTemplate: TemplateRef<any>;\n\n    decadeTemplate: TemplateRef<any>;\n\n    _disabledDates: Array<Date>;\n\n    _disabledDays: Array<number>;\n\n    selectElement: any;\n\n    todayElement: any;\n\n    focusElement: any;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    navigationState: any = null;\n\n    isMonthNavigate: boolean;\n\n    initialized: boolean;\n\n    translationSubscription: Subscription;\n\n    _locale: LocaleSettings;\n\n    _responsiveOptions: any[];\n\n    currentView: string;\n\n    attributeSelector: string;\n\n    _numberOfMonths: number = 1;\n\n    _firstDayOfWeek: number;\n\n    _view: string = 'date';\n\n    preventFocus: boolean;\n\n    @Input() get view(): string {\n        return this._view;\n    };\n\n    set view(view: string) {\n        this._view = view;\n        this.currentView = this._view;\n    }\n\n\n    @Input() get defaultDate(): Date {\n        return this._defaultDate;\n    };\n\n    set defaultDate(defaultDate: Date) {\n        this._defaultDate = defaultDate;\n\n        if (this.initialized) {\n            const date = defaultDate||new Date();\n            this.currentMonth = date.getMonth();\n            this.currentYear = date.getFullYear();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    _defaultDate: Date;\n\n    @Input() get minDate(): Date {\n        return this._minDate;\n    }\n\n    set minDate(date: Date) {\n        this._minDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get maxDate(): Date {\n        return this._maxDate;\n    }\n\n    set maxDate(date: Date) {\n        this._maxDate = date;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDates(): Date[] {\n        return this._disabledDates;\n    }\n\n    set disabledDates(disabledDates: Date[]) {\n        this._disabledDates = disabledDates;\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get disabledDays(): number[] {\n        return this._disabledDays;\n    }\n\n    set disabledDays(disabledDays: number[]) {\n        this._disabledDays = disabledDays;\n\n        if (this.currentMonth != undefined && this.currentMonth != null  && this.currentYear) {\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    @Input() get yearRange(): string {\n        return this._yearRange;\n    }\n\n    set yearRange(yearRange: string) {\n        this._yearRange = yearRange;\n\n        if (yearRange) {\n            const years = yearRange.split(':');\n            const yearStart = parseInt(years[0]);\n            const yearEnd = parseInt(years[1]);\n\n            this.populateYearOptions(yearStart, yearEnd);\n        }\n    }\n\n    @Input() get showTime(): boolean {\n        return this._showTime;\n    }\n\n    set showTime(showTime: boolean) {\n        this._showTime = showTime;\n\n        if (this.currentHour === undefined) {\n            this.initTime(this.value||new Date());\n        }\n        this.updateInputfield();\n    }\n\n    get locale() {\n       return this._locale;\n    }\n\n    @Input() get responsiveOptions(): any[] {\n        return this._responsiveOptions;\n    };\n\n    set responsiveOptions(responsiveOptions: any[]) {\n        this._responsiveOptions = responsiveOptions;\n\n        this.destroyResponsiveStyleElement();\n        this.createResponsiveStyle();\n    }\n\n\n    @Input() get numberOfMonths(): number {\n        return this._numberOfMonths;\n    }\n\n    set numberOfMonths(numberOfMonths: number) {\n        this._numberOfMonths = numberOfMonths;\n\n        this.destroyResponsiveStyleElement();\n        this.createResponsiveStyle();\n    }\n\n    @Input() get firstDayOfWeek(): number {\n        return this._numberOfMonths;\n    }\n\n    set firstDayOfWeek(firstDayOfWeek: number) {\n        this._firstDayOfWeek = firstDayOfWeek;\n\n        this.createWeekDays();\n    }\n\n    @Input()\n    set locale(newLocale: LocaleSettings) {\n        console.warn(\"Locale property has no effect, use new i18n API instead.\");\n    }\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, private zone: NgZone, private config: PrimeNGConfig, public overlayService: OverlayService) {}\n\n    ngOnInit() {\n        this.attributeSelector = UniqueComponentId();\n        const date = this.defaultDate||new Date();\n        this.createResponsiveStyle();\n        this.currentMonth = date.getMonth();\n        this.currentYear = date.getFullYear();\n        this.currentView = this.view;\n\n        if (this.view === 'date') {\n            this.createWeekDays();\n            this.initTime(date);\n            this.createMonths(this.currentMonth, this.currentYear);\n            this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);\n        }\n\n        this.translationSubscription = this.config.translationObserver.subscribe(() => {\n            this.createWeekDays();\n        });\n\n        this.initialized = true;\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'date':\n                    this.dateTemplate = item.template;\n                break;\n\n                case 'decade':\n                    this.decadeTemplate = item.template;\n                break;\n\n                case 'disabledDate':\n                    this.disabledDateTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.dateTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        if (this.inline) {\n            this.contentViewChild && this.contentViewChild.nativeElement.setAttribute(this.attributeSelector, '');\n\n            if (!this.disabled) {\n                this.initFocusableCell();\n                if (this.numberOfMonths === 1) {\n                    this.contentViewChild.nativeElement.style.width = DomHandler.getOuterWidth(this.containerViewChild.nativeElement) + 'px';\n                }\n            }\n        }\n    }\n\n    getTranslation(option: string) {\n        return this.config.getTranslation(option);\n    }\n\n    populateYearOptions(start, end) {\n        this.yearOptions = [];\n\n        for (let i = start; i <= end; i++) {\n            this.yearOptions.push(i);\n        }\n    }\n\n    createWeekDays() {\n        this.weekDays = [];\n        let dayIndex = this.getFirstDateOfWeek();\n        let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);\n        for (let i = 0; i < 7; i++) {\n            this.weekDays.push(dayLabels[dayIndex]);\n            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;\n        }\n    }\n\n    monthPickerValues() {\n        let monthPickerValues = [];\n        for (let i = 0; i <= 11; i++) {\n            monthPickerValues.push(this.config.getTranslation('monthNamesShort')[i]);\n        }\n\n        return monthPickerValues;\n    }\n\n    yearPickerValues() {\n        let yearPickerValues = [];\n        let base = this.currentYear -  (this.currentYear % 10);\n        for (let i = 0; i < 10; i++) {\n            yearPickerValues.push(base + i);\n        }\n\n        return yearPickerValues;\n    }\n\n    createMonths(month: number, year: number) {\n        this.months = this.months = [];\n        for (let i = 0 ; i < this.numberOfMonths; i++) {\n            let m = month + i;\n            let y = year;\n            if (m > 11) {\n                m = m % 11 - 1;\n                y = year + 1;\n            }\n\n            this.months.push(this.createMonth(m, y));\n        }\n    }\n\n    getWeekNumber(date: Date) {\n        let checkDate = new Date(date.getTime());\n\t\tcheckDate.setDate(checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ));\n\t\tlet time = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 );\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round((time - checkDate.getTime()) / 86400000 ) / 7 ) + 1;\n    }\n\n    createMonth(month: number, year: number) {\n        let dates = [];\n        let firstDay = this.getFirstDayOfMonthIndex(month, year);\n        let daysLength = this.getDaysCountInMonth(month, year);\n        let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n        let dayNo = 1;\n        let today = new Date();\n        let weekNumbers = [];\n        let monthRows = Math.ceil((daysLength + firstDay) / 7);\n\n        for (let i = 0; i < monthRows; i++) {\n            let week = [];\n\n            if (i == 0) {\n                for (let j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {\n                    let prev = this.getPreviousMonthAndYear(month, year);\n                    week.push({day: j, month: prev.month, year: prev.year, otherMonth: true,\n                            today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year, true)});\n                }\n\n                let remainingDaysLength = 7 - week.length;\n                for (let j = 0; j < remainingDaysLength; j++) {\n                    week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    dayNo++;\n                }\n            }\n            else {\n                for (let j = 0; j < 7; j++) {\n                    if (dayNo > daysLength) {\n                        let next = this.getNextMonthAndYear(month, year);\n                        week.push({day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,\n                                    today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n                                    selectable: this.isSelectable((dayNo - daysLength), next.month, next.year, true)});\n                    }\n                    else {\n                        week.push({day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year, false)});\n                    }\n\n                    dayNo++;\n                }\n            }\n\n            if (this.showWeek) {\n                weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));\n            }\n\n            dates.push(week);\n        }\n\n        return {\n            month: month,\n            year: year,\n            dates: dates,\n            weekNumbers: weekNumbers\n        };\n    }\n\n    initTime(date: Date) {\n        this.pm = date.getHours() > 11;\n\n        if (this.showTime) {\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n            this.setCurrentHourPM(date.getHours());\n        }\n        else if (this.timeOnly) {\n            this.currentMinute = 0;\n            this.currentHour = 0;\n            this.currentSecond = 0;\n        }\n    }\n\n    navBackward(event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.currentView === 'month') {\n            this.decrementYear();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else if (this.currentView === 'year') {\n            this.decrementDecade();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else {\n            if (this.currentMonth === 0) {\n                this.currentMonth = 11;\n                this.decrementYear();\n            }\n            else {\n                this.currentMonth--;\n            }\n\n            this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    navForward(event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n\n        this.isMonthNavigate = true;\n\n        if (this.currentView === 'month') {\n            this.incrementYear();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else if (this.currentView === 'year') {\n            this.incrementDecade();\n            setTimeout(() => {\n                this.updateFocus();\n            }, 1);\n        }\n        else {\n            if (this.currentMonth === 11) {\n                this.currentMonth = 0;\n                this.incrementYear();\n            }\n            else {\n                this.currentMonth++;\n            }\n\n            this.onMonthChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n            this.createMonths(this.currentMonth, this.currentYear);\n        }\n    }\n\n    decrementYear() {\n        this.currentYear--;\n\n        if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);\n        }\n    }\n\n    decrementDecade() {\n        this.currentYear = this.currentYear - 10;\n    }\n\n    incrementDecade() {\n        this.currentYear = this.currentYear + 10;\n    }\n\n    incrementYear() {\n        this.currentYear++;\n\n        if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n            let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];\n            this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);\n        }\n    }\n\n    switchToMonthView(event) {\n        this.currentView = 'month';\n        event.preventDefault();\n    }\n\n    switchToYearView(event) {\n        this.currentView = 'year';\n        event.preventDefault();\n    }\n\n    onDateSelect(event, dateMeta) {\n        if (this.disabled || !dateMeta.selectable) {\n            event.preventDefault();\n            return;\n        }\n\n        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n            this.value = this.value.filter((date, i) => {\n                return !this.isDateEquals(date, dateMeta);\n            });\n            if (this.value.length === 0) {\n                this.value = null;\n            }\n            this.updateModel(this.value);\n        }\n        else {\n            if (this.shouldSelectDate(dateMeta)) {\n                this.selectDate(dateMeta);\n            }\n        }\n\n        if (this.isSingleSelection() && this.hideOnDateTimeSelect) {\n            setTimeout(() => {\n                event.preventDefault();\n                this.hideOverlay();\n\n                if (this.mask) {\n                    this.disableModality();\n                }\n\n                this.cd.markForCheck();\n            }, 150);\n        }\n\n        this.updateInputfield();\n        event.preventDefault();\n    }\n\n    shouldSelectDate(dateMeta) {\n        if (this.isMultipleSelection())\n            return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;\n        else\n            return true;\n    }\n\n    onMonthSelect(event, index) {\n        if (this.view === 'month') {\n            this.onDateSelect(event, {year: this.currentYear, month: index, day: 1, selectable: true});\n        }\n        else {\n            this.currentMonth = index;\n            this.currentView = 'date';\n            this.createMonths(this.currentMonth, this.currentYear);\n            this.cd.markForCheck();\n            this.onMonthChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n        }\n    }\n\n    onYearSelect(event, year) {\n        if (this.view === 'year') {\n            this.onDateSelect(event, {year: year, month: 0, day: 1, selectable: true});\n        }\n        else {\n            this.currentYear = year;\n            this.currentView = 'month';\n            this.onYearChange.emit({month: this.currentMonth + 1, year: this.currentYear});\n        }\n    }\n\n    updateInputfield() {\n        let formattedValue = '';\n\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                formattedValue = this.formatDateTime(this.value);\n            }\n            else if (this.isMultipleSelection()) {\n                for (let i = 0; i < this.value.length; i++) {\n                    let dateAsString = this.formatDateTime(this.value[i]);\n                    formattedValue += dateAsString;\n                    if (i !== (this.value.length - 1)) {\n                        formattedValue += this.multipleSeparator+' ';\n                    }\n                }\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value && this.value.length) {\n                    let startDate = this.value[0];\n                    let endDate = this.value[1];\n\n                    formattedValue = this.formatDateTime(startDate);\n                    if (endDate) {\n                        formattedValue += ' '+this.rangeSeparator +' ' + this.formatDateTime(endDate);\n                    }\n                }\n            }\n        }\n\n        this.inputFieldValue = formattedValue;\n        this.updateFilledState();\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n        }\n    }\n\n    formatDateTime(date) {\n        let formattedValue = null;\n        if (date) {\n            if (this.timeOnly) {\n                formattedValue = this.formatTime(date);\n            }\n            else {\n                formattedValue = this.formatDate(date, this.getDateFormat());\n                if (this.showTime) {\n                    formattedValue += ' ' + this.formatTime(date);\n                }\n            }\n        }\n\n        return formattedValue;\n    }\n\n    setCurrentHourPM(hours: number) {\n        if (this.hourFormat == '12') {\n            this.pm = hours > 11;\n            if (hours >= 12) {\n                this.currentHour = (hours == 12) ? 12 : hours - 12;\n            }\n            else {\n                this.currentHour = (hours == 0) ? 12 : hours;\n            }\n        }\n        else {\n            this.currentHour = hours;\n        }\n    }\n\n    selectDate(dateMeta) {\n        let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n\n        if (this.showTime) {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    date.setHours(this.pm ? 12 : 0);\n                else\n                    date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                date.setHours(this.currentHour);\n            }\n\n            date.setMinutes(this.currentMinute);\n            date.setSeconds(this.currentSecond);\n        }\n\n        if (this.minDate && this.minDate > date) {\n            date = this.minDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.maxDate && this.maxDate < date) {\n            date = this.maxDate;\n            this.setCurrentHourPM(date.getHours());\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n\n        if (this.isSingleSelection()) {\n            this.updateModel(date);\n        }\n        else if (this.isMultipleSelection()) {\n            this.updateModel(this.value ? [...this.value, date] : [date]);\n        }\n        else if (this.isRangeSelection()) {\n            if (this.value && this.value.length) {\n                let startDate = this.value[0];\n                let endDate = this.value[1];\n\n                if (!endDate && date.getTime() >= startDate.getTime()) {\n                    endDate = date;\n                }\n                else {\n                    startDate = date;\n                    endDate = null;\n                }\n\n                this.updateModel([startDate, endDate]);\n            }\n            else {\n                this.updateModel([date, null]);\n            }\n        }\n\n        this.onSelect.emit(date);\n    }\n\n    updateModel(value) {\n        this.value = value;\n\n        if (this.dataType == 'date') {\n            this.onModelChange(this.value);\n        }\n        else if (this.dataType == 'string') {\n            if (this.isSingleSelection()) {\n                this.onModelChange(this.formatDateTime(this.value));\n            }\n            else {\n                let stringArrValue = null;\n                if (this.value) {\n                    stringArrValue = this.value.map(date => this.formatDateTime(date));\n                }\n                this.onModelChange(stringArrValue);\n            }\n        }\n    }\n\n    getFirstDayOfMonthIndex(month: number, year: number) {\n        let day = new Date();\n        day.setDate(1);\n        day.setMonth(month);\n        day.setFullYear(year);\n\n        let dayIndex = day.getDay() + this.getSundayIndex();\n        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n    }\n\n    getDaysCountInMonth(month: number, year: number) {\n        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n    }\n\n    getDaysCountInPrevMonth(month: number, year: number) {\n        let prev = this.getPreviousMonthAndYear(month, year);\n        return this.getDaysCountInMonth(prev.month, prev.year);\n    }\n\n    getPreviousMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 0) {\n            m = 11;\n            y = year - 1;\n        }\n        else {\n            m = month - 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getNextMonthAndYear(month: number, year: number) {\n        let m, y;\n\n        if (month === 11) {\n            m = 0;\n            y = year + 1;\n        }\n        else {\n            m = month + 1;\n            y = year;\n        }\n\n        return {'month':m,'year':y};\n    }\n\n    getSundayIndex() {\n        let firstDayOfWeek = this.getFirstDateOfWeek();\n\n        return firstDayOfWeek > 0 ? 7 - firstDayOfWeek : 0;\n    }\n\n    isSelected(dateMeta): boolean {\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                return this.isDateEquals(this.value, dateMeta);\n            }\n            else if (this.isMultipleSelection()) {\n                let selected = false;\n                for (let date of this.value) {\n                    selected = this.isDateEquals(date, dateMeta);\n                    if (selected) {\n                        break;\n                    }\n                }\n\n                return selected;\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value[1])\n                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);\n                else\n                    return this.isDateEquals(this.value[0], dateMeta)\n            }\n        }\n        else {\n            return false;\n        }\n    }\n\n    isComparable() {\n        return this.value != null && typeof this.value !== 'string';\n    }\n\n    isMonthSelected(month) {\n        if (this.isComparable()) {\n            let value = this.isRangeSelection() ? this.value[0] : this.value;\n\n            return !this.isMultipleSelection() ? (value.getMonth() === month && value.getFullYear() === this.currentYear) : false;\n        }\n\n        return false;\n    }\n\n    isYearSelected(year) {\n        if (this.isComparable()) {\n            let value = this.isRangeSelection() ? this.value[0] : this.value;\n\n            return !this.isMultipleSelection() ? (value.getFullYear() === year) : false;\n        }\n\n        return false;\n    }\n\n    isDateEquals(value, dateMeta) {\n        if (value)\n            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n        else\n            return false;\n    }\n\n    isDateBetween(start, end, dateMeta) {\n        let between : boolean = false;\n        if (start && end) {\n            let date: Date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n        }\n\n        return between;\n    }\n\n    isSingleSelection(): boolean {\n        return this.selectionMode === 'single';\n    }\n\n    isRangeSelection(): boolean {\n        return this.selectionMode === 'range';\n    }\n\n    isMultipleSelection(): boolean {\n        return this.selectionMode === 'multiple';\n    }\n\n    isToday(today, day, month, year): boolean {\n        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n    }\n\n    isSelectable(day, month, year, otherMonth): boolean {\n        let validMin = true;\n        let validMax = true;\n        let validDate = true;\n        let validDay = true;\n\n        if (otherMonth && !this.selectOtherMonths) {\n            return false;\n        }\n\n        if (this.minDate) {\n             if (this.minDate.getFullYear() > year) {\n                 validMin = false;\n             }\n             else if (this.minDate.getFullYear() === year) {\n                 if (this.minDate.getMonth() > month) {\n                     validMin = false;\n                 }\n                 else if (this.minDate.getMonth() === month) {\n                     if (this.minDate.getDate() > day) {\n                         validMin = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.maxDate) {\n             if (this.maxDate.getFullYear() < year) {\n                 validMax = false;\n             }\n             else if (this.maxDate.getFullYear() === year) {\n                 if (this.maxDate.getMonth() < month) {\n                     validMax = false;\n                 }\n                 else if (this.maxDate.getMonth() === month) {\n                     if (this.maxDate.getDate() < day) {\n                         validMax = false;\n                     }\n                 }\n             }\n        }\n\n        if (this.disabledDates) {\n           validDate = !this.isDateDisabled(day,month,year);\n        }\n\n        if (this.disabledDays) {\n           validDay = !this.isDayDisabled(day,month,year)\n        }\n\n        return validMin && validMax && validDate && validDay;\n    }\n\n    isDateDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDates) {\n            for (let disabledDate of this.disabledDates) {\n                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    isDayDisabled(day:number, month:number, year:number):boolean {\n        if (this.disabledDays) {\n            let weekday = new Date(year, month, day);\n            let weekdayNumber = weekday.getDay();\n            return this.disabledDays.indexOf(weekdayNumber) !== -1;\n        }\n        return false;\n    }\n\n    onInputFocus(event: Event) {\n        this.focus = true;\n        if (this.showOnFocus) {\n            this.showOverlay();\n        }\n        this.onFocus.emit(event);\n    }\n\n    onInputClick() {\n        if (this.showOnFocus && !this.overlayVisible) {\n            this.showOverlay();\n        }\n    }\n\n    onInputBlur(event: Event) {\n        this.focus = false;\n        this.onBlur.emit(event);\n        if (!this.keepInvalid) {\n            this.updateInputfield();\n        }\n        this.onModelTouched();\n    }\n\n    onButtonClick(event, inputfield) {\n        if (!this.overlayVisible) {\n            inputfield.focus();\n            this.showOverlay();\n        }\n        else {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    getMonthName(index) {\n        return this.config.getTranslation('monthNames')[index];\n    }\n\n\n    switchViewButtonDisabled() {\n        return this.numberOfMonths > 1 || this.disabled;\n    }\n\n    onPrevButtonClick(event) {\n        this.navigationState = {backward: true, button: true};\n        this.navBackward(event);\n    }\n\n    onNextButtonClick(event) {\n        this.navigationState = {backward: false, button: true};\n        this.navForward(event);\n    }\n\n    onContainerButtonKeydown(event) {\n        switch (event.which) {\n           //tab\n           case 9:\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n           break;\n\n           //escape\n           case 27:\n               this.overlayVisible = false;\n               event.preventDefault();\n           break;\n\n           default:\n               //Noop\n           break;\n        }\n   }\n\n    onInputKeydown(event) {\n        this.isKeydown = true;\n        if (event.keyCode === 40 && this.contentViewChild) {\n            this.trapFocus(event);\n        }\n        else if (event.keyCode === 27) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 13) {\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n                event.preventDefault();\n            }\n        }\n        else if (event.keyCode === 9 && this.contentViewChild) {\n            DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach(el => el.tabIndex = '-1');\n            if (this.overlayVisible) {\n                this.overlayVisible = false;\n            }\n        }\n    }\n\n    onDateCellKeydown(event, date, groupIndex) {\n        const cellContent = event.currentTarget;\n        const cell = cellContent.parentElement;\n\n        switch (event.which) {\n            //down arrow\n            case 40: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let nextRow = cell.parentElement.nextElementSibling;\n                if (nextRow) {\n                    let focusCell = nextRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: false};\n                        this.navForward(event);\n                    }\n                    else {\n                        nextRow.children[cellIndex].children[0].tabIndex = '0';\n                        nextRow.children[cellIndex].children[0].focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //up arrow\n            case 38: {\n                cellContent.tabIndex = '-1';\n                let cellIndex = DomHandler.index(cell);\n                let prevRow = cell.parentElement.previousElementSibling;\n                if (prevRow) {\n                    let focusCell = prevRow.children[cellIndex].children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigationState = {backward: true};\n                        this.navBackward(event);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cellContent.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    let focusCell = prevCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {\n                        this.navigateToMonth(true, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(true, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cellContent.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    let focusCell = nextCell.children[0];\n                    if (DomHandler.hasClass(focusCell, 'p-disabled')) {\n                        this.navigateToMonth(false, groupIndex);\n                    }\n                    else {\n                        focusCell.tabIndex = '0';\n                        focusCell.focus();\n                    }\n                }\n                else {\n                    this.navigateToMonth(false, groupIndex);\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.onDateSelect(event, date);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    onMonthCellKeydown(event, index) {\n        const cell = event.currentTarget;\n        switch (event.which) {\n            //arrows\n            case 38:\n            case 40: {\n                cell.tabIndex = '-1';\n                var cells = cell.parentElement.children;\n                var cellIndex = DomHandler.index(cell);\n                let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex -3];\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cell.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    prevCell.tabIndex = '0';\n                    prevCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cell.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            case 13: {\n                this.onMonthSelect(event, index);\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                if (!this.inline) {\n                    this.trapFocus(event);\n                }\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n\n    onYearCellKeydown(event, index) {\n        const cell = event.currentTarget;\n\n        switch (event.which) {\n            //arrows\n            case 38:\n            case 40: {\n                cell.tabIndex = '-1';\n                var cells = cell.parentElement.children;\n                var cellIndex = DomHandler.index(cell);\n                let nextCell = cells[event.which === 40 ? cellIndex + 2 : cellIndex -2];\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                event.preventDefault();\n                break;\n            }\n\n            //left arrow\n            case 37: {\n                cell.tabIndex = '-1';\n                let prevCell = cell.previousElementSibling;\n                if (prevCell) {\n                    prevCell.tabIndex = '0';\n                    prevCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: true};\n                    this.navBackward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //right arrow\n            case 39: {\n                cell.tabIndex = '-1';\n                let nextCell = cell.nextElementSibling;\n                if (nextCell) {\n                    nextCell.tabIndex = '0';\n                    nextCell.focus();\n                }\n                else {\n                    this.navigationState = {backward: false};\n                    this.navForward(event);\n                }\n\n                event.preventDefault();\n                break;\n            }\n\n            //enter\n            //space\n            case 13:\n            case 32: {\n                this.onYearSelect(event, index);\n                event.preventDefault();\n                break;\n            }\n\n            //escape\n            case 27: {\n                this.overlayVisible = false;\n                event.preventDefault();\n                break;\n            }\n\n            //tab\n            case 9: {\n                this.trapFocus(event);\n                break;\n            }\n\n            default:\n                //no op\n            break;\n        }\n    }\n\n    navigateToMonth(prev, groupIndex) {\n        if (prev) {\n            if (this.numberOfMonths === 1 || (groupIndex === 0)) {\n                this.navigationState = {backward: true};\n                this.navBackward(event);\n            }\n            else {\n                let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];\n                let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                let focusCell = cells[cells.length - 1];\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n        else {\n            if (this.numberOfMonths === 1 || (groupIndex === this.numberOfMonths - 1)) {\n                this.navigationState = {backward: false};\n                this.navForward(event);\n            }\n            else {\n                let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];\n                let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                focusCell.tabIndex = '0';\n                focusCell.focus();\n            }\n        }\n    }\n\n    updateFocus() {\n        let cell;\n\n        if (this.navigationState) {\n            if (this.navigationState.button) {\n                this.initFocusableCell();\n\n                if (this.navigationState.backward)\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();\n                else\n                    DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();\n            }\n            else {\n                if (this.navigationState.backward) {\n                    let cells;\n\n                    if (this.currentView === 'month') {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n                    }\n                    else if (this.currentView === 'year') {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n                    }\n                    else {\n                        cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                    }\n\n                    if (cells && cells.length > 0) {\n                        cell = cells[cells.length - 1];\n                    }\n                }\n                else {\n                    if (this.currentView === 'month') {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n                    }\n                    else if (this.currentView === 'year') {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n                    }\n                    else {\n                        cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n                    }\n                }\n\n                if (cell) {\n                    cell.tabIndex = '0';\n                    cell.focus();\n                }\n            }\n\n            this.navigationState = null;\n        }\n        else {\n            this.initFocusableCell();\n        }\n    }\n\n    initFocusableCell() {\n        let cell;\n\n        if (this.currentView === 'month') {\n            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');\n            let selectedCell= DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-highlight');\n            cells.forEach(cell => cell.tabIndex = -1);\n            cell = selectedCell || cells[0];\n\n            if (cells.length === 0) {\n                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = \"0\"]');\n                disabledCells.forEach(cell => cell.tabIndex = -1);\n            }\n        }\n        else if (this.currentView === 'year') {\n            let cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');\n            let selectedCell= DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year.p-highlight');\n            cells.forEach(cell => cell.tabIndex = -1);\n            cell = selectedCell || cells[0];\n\n            if (cells.length === 0) {\n                let disabledCells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year.p-disabled[tabindex = \"0\"]');\n                disabledCells.forEach(cell => cell.tabIndex = -1);\n            }\n        }\n        else {\n            cell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'span.p-highlight');\n            if (!cell) {\n                let todayCell = DomHandler.findSingle(this.contentViewChild.nativeElement, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');\n                if (todayCell)\n                    cell = todayCell;\n                else\n                    cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');\n            }\n        }\n\n        if (cell) {\n            cell.tabIndex = '0';\n\n            if (!this.preventFocus && (!this.navigationState || !this.navigationState.button)) {\n                setTimeout(() => {\n                    cell.focus();\n                }, 1);\n            }\n\n            this.preventFocus = false;\n        }\n    }\n\n    trapFocus(event) {\n        let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);\n\n        if (focusableElements && focusableElements.length > 0) {\n            if (!focusableElements[0].ownerDocument.activeElement) {\n                focusableElements[0].focus();\n            }\n            else {\n                let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);\n\n                if (event.shiftKey) {\n                    if (focusedIndex == -1 || focusedIndex === 0) {\n                        if (this.focusTrap){\n                            focusableElements[focusableElements.length - 1].focus();\n                        }\n                        else {\n                            if (focusedIndex === -1)\n                                return this.hideOverlay();\n                            else if (focusedIndex === 0)\n                                return;\n                        }\n                    }\n                    else {\n                        focusableElements[focusedIndex - 1].focus();\n                    }\n                }\n                else {\n                    if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1)) {\n                        if (!this.focusTrap && focusedIndex != -1)\n                            return this.hideOverlay();\n                        else\n                            focusableElements[0].focus();\n                    }\n                    else {\n                        focusableElements[focusedIndex + 1].focus();\n                    }\n                }\n            }\n        }\n\n        event.preventDefault();\n    }\n\n    onMonthDropdownChange(m: string) {\n        this.currentMonth = parseInt(m);\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    onYearDropdownChange(y: string) {\n        this.currentYear = parseInt(y);\n        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonths(this.currentMonth, this.currentYear);\n    }\n\n    convertTo24Hour = function (hours: number, pm: boolean) {\n        if (this.hourFormat == '12') {\n            if (hours === 12) {\n                return (pm ? 12 : 0);\n            } else {\n                return (pm ? hours + 12 : hours);\n            }\n        }\n        return hours;\n    }\n\n    validateTime(hour: number, minute: number, second: number, pm: boolean) {\n        let value = this.value;\n        const convertedHour = this.convertTo24Hour(hour, pm);\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        const valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getHours() > convertedHour) {\n                return false;\n            }\n            if (this.minDate.getHours() === convertedHour) {\n                if (this.minDate.getMinutes() > minute) {\n                    return false;\n                }\n                if (this.minDate.getMinutes() === minute) {\n                    if (this.minDate.getSeconds() > second) {\n                        return false;\n                    }\n                }\n            }\n        }\n\n      if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getHours() < convertedHour) {\n                return false;\n            }\n            if (this.maxDate.getHours() === convertedHour) {\n                if (this.maxDate.getMinutes() < minute) {\n                    return false;\n                }\n                if (this.maxDate.getMinutes() === minute) {\n                  if (this.maxDate.getSeconds() < second) {\n                      return false;\n                  }\n                }\n            }\n        }\n        return true;\n    }\n\n\n    incrementHour(event) {\n        const prevHour = this.currentHour;\n        let newHour = this.currentHour + this.stepHour;\n        let newPM = this.pm;\n\n        if (this.hourFormat == '24')\n            newHour = (newHour >= 24) ? (newHour - 24) : newHour;\n        else if (this.hourFormat == '12') {\n            // Before the AM/PM break, now after\n            if (prevHour < 12 && newHour > 11) {\n                newPM= !this.pm;\n            }\n            newHour = (newHour >= 13) ? (newHour - 12) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n        event.preventDefault();\n    }\n\n    onTimePickerElementMouseDown(event: Event, type: number, direction: number) {\n        if (!this.disabled) {\n            this.repeat(event, null, type, direction);\n            event.preventDefault();\n        }\n    }\n\n    onTimePickerElementMouseUp(event: Event) {\n        if (!this.disabled) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    onTimePickerElementMouseLeave() {\n        if (!this.disabled && this.timePickerTimer) {\n            this.clearTimePickerTimer();\n            this.updateTime();\n        }\n    }\n\n    repeat(event: Event, interval: number, type: number, direction: number) {\n        let i = interval||500;\n\n        this.clearTimePickerTimer();\n        this.timePickerTimer = setTimeout(() => {\n            this.repeat(event, 100, type, direction);\n            this.cd.markForCheck();\n        }, i);\n\n        switch(type) {\n            case 0:\n                if (direction === 1)\n                    this.incrementHour(event);\n                else\n                    this.decrementHour(event);\n            break;\n\n            case 1:\n                if (direction === 1)\n                    this.incrementMinute(event);\n                else\n                    this.decrementMinute(event);\n            break;\n\n            case 2:\n                if (direction === 1)\n                    this.incrementSecond(event);\n                else\n                    this.decrementSecond(event);\n            break;\n        }\n\n        this.updateInputfield();\n    }\n\n    clearTimePickerTimer() {\n        if (this.timePickerTimer) {\n            clearTimeout(this.timePickerTimer);\n            this.timePickerTimer = null;\n        }\n    }\n\n    decrementHour(event) {\n        let newHour = this.currentHour - this.stepHour;\n        let newPM = this.pm\n\n        if (this.hourFormat == '24')\n            newHour = (newHour < 0) ? (24 + newHour) : newHour;\n        else if (this.hourFormat == '12') {\n            // If we were at noon/midnight, then switch\n            if (this.currentHour === 12) {\n                newPM = !this.pm;\n            }\n            newHour = (newHour <= 0) ? (12 + newHour) : newHour;\n        }\n\n        if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.currentHour = newHour;\n          this.pm = newPM;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementMinute(event) {\n        let newMinute = this.currentMinute + this.stepMinute;\n        newMinute = (newMinute > 59) ? newMinute - 60 : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementMinute(event) {\n        let newMinute = this.currentMinute - this.stepMinute;\n        newMinute = (newMinute < 0) ? 60 + newMinute : newMinute;\n        if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {\n            this.currentMinute = newMinute;\n        }\n\n        event.preventDefault();\n    }\n\n    incrementSecond(event) {\n        let newSecond = this.currentSecond + this.stepSecond;\n        newSecond = (newSecond > 59) ? newSecond - 60 : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    decrementSecond(event) {\n        let newSecond = this.currentSecond - this.stepSecond;\n        newSecond = (newSecond < 0) ? 60 + newSecond : newSecond;\n        if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {\n            this.currentSecond = newSecond;\n        }\n\n        event.preventDefault();\n    }\n\n    updateTime() {\n        let value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        value = value ? new Date(value.getTime()) : new Date();\n\n        if (this.hourFormat == '12') {\n            if (this.currentHour === 12)\n                value.setHours(this.pm ? 12 : 0);\n            else\n                value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n        }\n        else {\n            value.setHours(this.currentHour);\n        }\n\n        value.setMinutes(this.currentMinute);\n        value.setSeconds(this.currentSecond);\n        if (this.isRangeSelection()) {\n            if (this.value[1])\n                value = [this.value[0], value];\n            else\n                value = [value, null];\n        }\n\n        if (this.isMultipleSelection()){\n            value = [...this.value.slice(0, -1), value];\n        }\n\n        this.updateModel(value);\n        this.onSelect.emit(value);\n        this.updateInputfield();\n    }\n\n    toggleAMPM(event) {\n        const newPM = !this.pm;\n        if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {\n          this.pm = newPM;\n          this.updateTime();\n        }\n        event.preventDefault();\n    }\n\n    onUserInput(event) {\n        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n        if (!this.isKeydown) {\n            return;\n        }\n        this.isKeydown = false;\n\n        let val = event.target.value;\n        try {\n            let value = this.parseValueFromString(val);\n            if (this.isValidSelection(value)) {\n                this.updateModel(value);\n                this.updateUI();\n            }\n        }\n        catch(err) {\n            //invalid date\n            this.updateModel(null);\n        }\n\n        this.filled = val != null && val.length;\n        this.onInput.emit(event);\n    }\n\n    isValidSelection(value): boolean {\n        let isValid = true;\n        if (this.isSingleSelection()) {\n            if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {\n                isValid = false;\n            }\n        } else if (value.every(v => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {\n            if (this.isRangeSelection()) {\n                isValid = value.length > 1 && value[1] > value[0] ? true : false;\n            }\n        }\n        return isValid;\n    }\n\n    parseValueFromString(text: string): Date | Date[]{\n        if (!text || text.trim().length === 0) {\n            return null;\n        }\n\n        let value: any;\n\n        if (this.isSingleSelection()) {\n            value = this.parseDateTime(text);\n        }\n        else if (this.isMultipleSelection()) {\n            let tokens = text.split(this.multipleSeparator);\n            value = [];\n            for (let token of tokens) {\n                value.push(this.parseDateTime(token.trim()));\n            }\n        }\n        else if (this.isRangeSelection()) {\n            let tokens = text.split(' '+this.rangeSeparator +' ');\n            value = [];\n            for (let i = 0; i < tokens.length; i++) {\n                value[i] = this.parseDateTime(tokens[i].trim());\n            }\n        }\n\n        return value;\n    }\n\n    parseDateTime(text): Date {\n        let date: Date;\n        let parts: string[] = text.split(' ');\n\n        if (this.timeOnly) {\n            date = new Date();\n            this.populateTime(date, parts[0], parts[1]);\n        }\n        else {\n            const dateFormat = this.getDateFormat();\n            if (this.showTime) {\n                let ampm = this.hourFormat == '12' ? parts.pop() : null;\n                let timeString = parts.pop();\n\n                date = this.parseDate(parts.join(' '), dateFormat);\n                this.populateTime(date, timeString, ampm);\n            }\n            else {\n                 date = this.parseDate(text, dateFormat);\n            }\n        }\n\n        return date;\n    }\n\n    populateTime(value, timeString, ampm) {\n        if (this.hourFormat == '12' && !ampm) {\n            throw 'Invalid Time';\n        }\n\n        this.pm = (ampm === 'PM' || ampm === 'pm');\n        let time = this.parseTime(timeString);\n        value.setHours(time.hour);\n        value.setMinutes(time.minute);\n        value.setSeconds(time.second);\n    }\n\n    updateUI() {\n        let val = this.value||this.defaultDate||new Date();\n        if (Array.isArray(val)){\n            val = val[0];\n        }\n\n        this.currentMonth = val.getMonth();\n        this.currentYear = val.getFullYear();\n        this.createMonths(this.currentMonth, this.currentYear);\n\n        if (this.showTime||this.timeOnly) {\n            this.setCurrentHourPM(val.getHours());\n            this.currentMinute = val.getMinutes();\n            this.currentSecond = val.getSeconds();\n        }\n    }\n\n    showOverlay() {\n        if (!this.overlayVisible) {\n            this.updateUI();\n\n            if (!this.touchUI) {\n                this.preventFocus = true;\n            }\n\n            this.overlayVisible = true;\n        }\n    }\n\n    hideOverlay() {\n        this.overlayVisible = false;\n        this.clearTimePickerTimer();\n\n        if (this.touchUI) {\n            this.disableModality();\n        }\n\n        this.cd.markForCheck();\n    }\n\n    toggle() {\n        if (!this.inline){\n            if (!this.overlayVisible) {\n                this.showOverlay();\n                this.inputfieldViewChild.nativeElement.focus();\n            }\n            else {\n                this.hideOverlay();\n            }\n        }\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.overlay = event.element;\n                    this.overlay.setAttribute(this.attributeSelector, '');\n                    this.appendOverlay();\n                    this.updateFocus();\n                    if (this.autoZIndex) {\n                        if (this.touchUI)\n                            ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);\n                        else\n                            ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);\n                    }\n\n                    this.alignOverlay();\n                    this.onShow.emit(event);\n                }\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n                this.onClose.emit(event);\n            break;\n        }\n    }\n\n    onOverlayAnimationDone(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n            case 'visibleTouchUI':\n                if (!this.inline) {\n                    this.bindDocumentClickListener();\n                    this.bindDocumentResizeListener();\n                    this.bindScrollListener();\n                }\n            break;\n\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break\n        }\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n        }\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.touchUI) {\n            this.enableModality(this.overlay);\n        }\n        else if(this.overlay) {\n            if (this.appendTo) {\n                if (this.view === 'date') {\n                    this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';\n                    this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n                }\n                else {\n                    this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';\n                }\n\n                DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n            }\n            else{\n                DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);\n            }\n        }\n    }\n\n    enableModality(element) {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(element.style.zIndex) - 1);\n            let maskStyleClass = 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';\n            DomHandler.addMultipleClasses(this.mask, maskStyleClass);\n\n\t\t\tthis.maskClickListener = this.renderer.listen(this.mask, 'click', (event: any) => {\n                this.disableModality();\n            });\n            document.body.appendChild(this.mask);\n            DomHandler.addClass(document.body, 'p-overflow-hidden');\n        }\n    }\n\n    disableModality() {\n        if (this.mask) {\n            DomHandler.addClass(this.mask, 'p-component-overlay-leave');\n            this.animationEndListener = this.destroyMask.bind(this);\n            this.mask.addEventListener('animationend', this.animationEndListener);\n        }\n    }\n\n    destroyMask() {\n        document.body.removeChild(this.mask);\n        let bodyChildren = document.body.children;\n        let hasBlockerMasks: boolean;\n        for (let i = 0; i < bodyChildren.length; i++) {\n            let bodyChild = bodyChildren[i];\n            if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {\n                hasBlockerMasks = true;\n                break;\n            }\n        }\n\n        if (!hasBlockerMasks) {\n            DomHandler.removeClass(document.body, 'p-overflow-hidden');\n        }\n\n        this.unbindAnimationEndListener();\n        this.unbindMaskClickListener();\n        this.mask = null;\n    }\n\n    unbindMaskClickListener() {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n\t\t}\n    }\n\n    unbindAnimationEndListener() {\n        if (this.animationEndListener && this.mask) {\n            this.mask.removeEventListener('animationend', this.animationEndListener);\n            this.animationEndListener = null;\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        if (this.value && typeof this.value === 'string') {\n            this.value = this.parseValueFromString(this.value);\n        }\n\n        this.updateInputfield();\n        this.updateUI();\n        this.cd.markForCheck();\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    getDateFormat() {\n        return this.dateFormat||this.getTranslation('dateFormat');\n    }\n\n    getFirstDateOfWeek() {\n        return this._firstDayOfWeek||this.getTranslation(TranslationKeys.FIRST_DAY_OF_WEEK);\n    }\n\n    // Ported from jquery-ui datepicker formatDate\n    formatDate(date, format) {\n        if (!date) {\n            return '';\n        }\n\n        let iFormat;\n        const lookAhead = (match) => {\n            const matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n            formatNumber = (match, value, len) => {\n                let num = '' + value;\n                if (lookAhead(match)) {\n                    while (num.length < len) {\n                        num = '0' + num;\n                    }\n                }\n                return num;\n            },\n            formatName = (match, value, shortNames, longNames) => {\n                return (lookAhead(match) ? longNames[value] : shortNames[value]);\n            };\n        let output = '';\n        let literal = false;\n\n        if (date) {\n            for (iFormat = 0; iFormat < format.length; iFormat++) {\n                if (literal) {\n                    if (format.charAt(iFormat) === '\\'' && !lookAhead('\\'')) {\n                        literal = false;\n                    } else {\n                        output += format.charAt(iFormat);\n                    }\n                } else {\n                    switch (format.charAt(iFormat)) {\n                        case 'd':\n                            output += formatNumber('d', date.getDate(), 2);\n                            break;\n                        case 'D':\n                            output += formatName('D', date.getDay(), this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                            break;\n                        case 'o':\n                            output += formatNumber('o',\n                            Math.round((\n                                new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -\n                                new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            break;\n                        case 'm':\n                            output += formatNumber('m', date.getMonth() + 1, 2);\n                            break;\n                        case 'M':\n                            output += formatName('M',date.getMonth(), this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                            break;\n                        case 'y':\n                            output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);\n                            break;\n                        case '@':\n                            output += date.getTime();\n                            break;\n                        case '!':\n                            output += date.getTime() * 10000 + this.ticksTo1970;\n                            break;\n                        case '\\'':\n                            if (lookAhead('\\'')) {\n                                output += '\\'';\n                            } else {\n                                literal = true;\n                            }\n                            break;\n                        default:\n                            output += format.charAt(iFormat);\n                    }\n                }\n            }\n        }\n        return output;\n    }\n\n    formatTime(date) {\n        if (!date) {\n            return '';\n        }\n\n        let output = '';\n        let hours = date.getHours();\n        let minutes = date.getMinutes();\n        let seconds = date.getSeconds();\n\n        if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n            hours-=12;\n        }\n\n        if (this.hourFormat == '12') {\n            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;\n        } else {\n            output += (hours < 10) ? '0' + hours : hours;\n        }\n        output += ':';\n        output += (minutes < 10) ? '0' + minutes : minutes;\n\n        if (this.showSeconds) {\n            output += ':';\n            output += (seconds < 10) ? '0' + seconds : seconds;\n        }\n\n        if (this.hourFormat == '12') {\n            output += date.getHours() > 11 ? ' PM' : ' AM';\n        }\n\n        return output;\n    }\n\n    parseTime(value) {\n        let tokens: string[] = value.split(':');\n        let validTokenLength = this.showSeconds ? 3 : 2;\n\n        if (tokens.length !== validTokenLength) {\n            throw \"Invalid time\";\n        }\n\n        let h = parseInt(tokens[0]);\n        let m = parseInt(tokens[1]);\n        let s = this.showSeconds ? parseInt(tokens[2]) : null;\n\n        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n            throw \"Invalid time\";\n        }\n        else {\n            if (this.hourFormat == '12') {\n                if (h !== 12 && this.pm) {\n                    h += 12;\n                }\n                else if (!this.pm && h === 12) {\n                    h -= 12;\n                }\n            }\n\n            return {hour: h, minute: m, second: s};\n        }\n    }\n\n    // Ported from jquery-ui datepicker parseDate\n    parseDate(value, format) {\n        if (format == null || value == null) {\n            throw \"Invalid arguments\";\n        }\n\n        value = (typeof value === \"object\" ? value.toString() : value + \"\");\n        if (value === \"\") {\n            return null;\n        }\n\n        let iFormat, dim, extra,\n        iValue = 0,\n        shortYearCutoff = (typeof this.shortYearCutoff !== \"string\" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)),\n        year = -1,\n        month = -1,\n        day = -1,\n        doy = -1,\n        literal = false,\n        date,\n        lookAhead = (match) => {\n            let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        },\n        getNumber = (match) => {\n            let isDoubled = lookAhead(match),\n                size = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n                (match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))),\n                minSize = (match === \"y\" ? size : 1),\n                digits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"),\n                num = value.substring(iValue).match(digits);\n            if (!num) {\n                throw \"Missing number at position \" + iValue;\n            }\n            iValue += num[ 0 ].length;\n            return parseInt(num[ 0 ], 10);\n        },\n        getName = (match, shortNames, longNames) => {\n            let index = -1;\n            let arr = lookAhead(match) ? longNames : shortNames;\n            let names = [];\n\n            for (let i = 0; i < arr.length; i++) {\n                names.push([i,arr[i]]);\n            }\n            names.sort((a,b) => {\n                return -(a[ 1 ].length - b[ 1 ].length);\n            });\n\n            for (let i = 0; i < names.length; i++) {\n                let name = names[i][1];\n                if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {\n                    index = names[i][0];\n                    iValue += name.length;\n                    break;\n                }\n            }\n\n            if (index !== -1) {\n                return index + 1;\n            } else {\n                throw \"Unknown name at position \" + iValue;\n            }\n        },\n        checkLiteral = () => {\n            if (value.charAt(iValue) !== format.charAt(iFormat)) {\n                throw \"Unexpected literal at position \" + iValue;\n            }\n            iValue++;\n        };\n\n        if (this.view === 'month') {\n            day = 1;\n        }\n\n        for (iFormat = 0; iFormat < format.length; iFormat++) {\n            if (literal) {\n                if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n                    literal = false;\n                } else {\n                    checkLiteral();\n                }\n            } else {\n                switch (format.charAt(iFormat)) {\n                    case \"d\":\n                        day = getNumber(\"d\");\n                        break;\n                    case \"D\":\n                        getName(\"D\", this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));\n                        break;\n                    case \"o\":\n                        doy = getNumber(\"o\");\n                        break;\n                    case \"m\":\n                        month = getNumber(\"m\");\n                        break;\n                    case \"M\":\n                        month = getName(\"M\", this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));\n                        break;\n                    case \"y\":\n                        year = getNumber(\"y\");\n                        break;\n                    case \"@\":\n                        date = new Date(getNumber(\"@\"));\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"!\":\n                        date = new Date((getNumber(\"!\") - this.ticksTo1970) / 10000);\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"'\":\n                        if (lookAhead(\"'\")) {\n                            checkLiteral();\n                        } else {\n                            literal = true;\n                        }\n                        break;\n                    default:\n                        checkLiteral();\n                }\n            }\n        }\n\n        if (iValue < value.length) {\n            extra = value.substr(iValue);\n            if (!/^\\s+/.test(extra)) {\n                throw \"Extra/unparsed characters found in date: \" + extra;\n            }\n        }\n\n        if (year === -1) {\n            year = new Date().getFullYear();\n        } else if (year < 100) {\n            year += new Date().getFullYear() - new Date().getFullYear() % 100 +\n                (year <= shortYearCutoff ? 0 : -100);\n        }\n\n        if (doy > -1) {\n            month = 1;\n            day = doy;\n            do {\n                dim = this.getDaysCountInMonth(year, month - 1);\n                if (day <= dim) {\n                    break;\n                }\n                month++;\n                day -= dim;\n            } while (true);\n        }\n\n        date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n                if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n                    throw \"Invalid date\"; // E.g. 31/02/00\n                }\n\n        return date;\n    }\n\n    daylightSavingAdjust(date) {\n        if (!date) {\n            return null;\n        }\n\n        date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n\n        return date;\n    }\n\n    updateFilledState() {\n        this.filled = this.inputFieldValue && this.inputFieldValue != '';\n    }\n\n    onTodayButtonClick(event) {\n        let date: Date = new Date();\n        let dateMeta = {day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, today: true, selectable: true};\n\n        this.onDateSelect(event, dateMeta);\n        this.onTodayClick.emit(event);\n    }\n\n    onClearButtonClick(event) {\n        this.updateModel(null);\n        this.updateInputfield();\n        this.hideOverlay();\n        this.onClearClick.emit(event);\n    }\n\n    createResponsiveStyle() {\n        if (this.numberOfMonths > 1 && this.responsiveOptions) {\n            if (!this.responsiveStyleElement) {\n                this.responsiveStyleElement = document.createElement('style');\n                this.responsiveStyleElement.type = 'text/css';\n                document.body.appendChild(this.responsiveStyleElement);\n            }\n\n            let innerHTML = '';\n            if (this.responsiveOptions) {\n                let responsiveOptions = [...this.responsiveOptions]\n                    .filter(o => !!(o.breakpoint && o.numMonths))\n                    .sort((o1, o2) => -1 * o1.breakpoint.localeCompare(o2.breakpoint, undefined, { numeric: true }));\n\n                for (let i = 0; i < responsiveOptions.length; i++) {\n                    let { breakpoint, numMonths } = responsiveOptions[i];\n                    let styles = `\n                        .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${numMonths}) .p-datepicker-next {\n                            display: inline-flex !important;\n                        }\n                    `;\n\n                    for (let j = numMonths; j < this.numberOfMonths; j++) {\n                        styles += `\n                            .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${j + 1}) {\n                                display: none !important;\n                            }\n                        `\n                    }\n\n                    innerHTML += `\n                        @media screen and (max-width: ${breakpoint}) {\n                            ${styles}\n                        }\n                    `\n                }\n            }\n\n            this.responsiveStyleElement.innerHTML = innerHTML;\n        }\n    }\n\n    destroyResponsiveStyleElement() {\n        if (this.responsiveStyleElement) {\n            this.responsiveStyleElement.remove();\n            this.responsiveStyleElement = null;\n        }\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            this.zone.runOutsideAngular(() => {\n                const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n                this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', (event) => {\n                    if (this.isOutsideClicked(event) && this.overlayVisible) {\n                        this.zone.run(() => {\n                            this.hideOverlay();\n                            this.onClickOutside.emit(event);\n\n                            this.cd.markForCheck();\n                        });\n                    }\n\n                });\n            });\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        if (!this.documentResizeListener && !this.touchUI) {\n            this.documentResizeListener = this.onWindowResize.bind(this);\n            window.addEventListener('resize', this.documentResizeListener);\n        }\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hideOverlay();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    isOutsideClicked(event: Event) {\n        return !(this.el.nativeElement.isSameNode(event.target) || this.isNavIconClicked(event) || \n                this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(<Node> event.target)));\n    }\n\n    isNavIconClicked(event: Event) {\n        return (DomHandler.hasClass(event.target, 'p-datepicker-prev') || DomHandler.hasClass(event.target, 'p-datepicker-prev-icon')\n                || DomHandler.hasClass(event.target, 'p-datepicker-next') || DomHandler.hasClass(event.target, 'p-datepicker-next-icon'));\n    }\n\n    onWindowResize() {\n        if (this.overlayVisible && !DomHandler.isAndroid()) {\n            this.hideOverlay();\n        }\n    }\n\n    onOverlayHide() {\n        this.currentView = this.view;\n\n        if (this.mask) {\n            this.destroyMask();\n        }\n\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n    }\n\n    ngOnDestroy() {\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.translationSubscription) {\n            this.translationSubscription.unsubscribe();\n        }\n\n        if (this.overlay && this.autoZIndex) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.destroyResponsiveStyleElement();\n        this.clearTimePickerTimer();\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,ButtonModule,SharedModule,RippleModule],\n    exports: [Calendar,ButtonModule,SharedModule],\n    declarations: [Calendar]\n})\nexport class CalendarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
         |