{"version":3,"file":"tabs.js","sources":["../../packages/material/tabs/ink-bar.js","../../packages/material/tabs/tab-label.js","../../packages/material/tabs/tab.js","../../packages/material/tabs/tab-body.js","../../packages/material/tabs/tab-group.js","../../packages/material/tabs/tab-label-wrapper.js","../../packages/material/tabs/tab-header.js","../../packages/material/tabs/tab-nav-bar/tab-nav-bar.js","../../packages/material/tabs/tabs-module.js","../../packages/material/tabs/index.js"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, Renderer2, ElementRef, NgZone } from '@angular/core';\n/**\n * The ink-bar is used to display and animate the line underneath the current active tab label.\n * \\@docs-private\n */\nexport class MatInkBar {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _ngZone\n */\n constructor(_renderer, _elementRef, _ngZone) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n }\n /**\n * Calculates the styles from the provided element in order to align the ink-bar to that element.\n * Shows the ink bar if previously set as hidden.\n * @param {?} element\n * @return {?}\n */\n alignToElement(element) {\n this.show();\n if (typeof requestAnimationFrame !== 'undefined') {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => this._setStyles(element));\n });\n }\n else {\n this._setStyles(element);\n }\n }\n /**\n * Shows the ink bar.\n * @return {?}\n */\n show() {\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'visible');\n }\n /**\n * Hides the ink bar.\n * @return {?}\n */\n hide() {\n this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'hidden');\n }\n /**\n * Sets the proper styles to the ink bar element.\n * @param {?} element\n * @return {?}\n */\n _setStyles(element) {\n const /** @type {?} */ left = element ? (element.offsetLeft || 0) + 'px' : '0';\n const /** @type {?} */ width = element ? (element.offsetWidth || 0) + 'px' : '0';\n this._renderer.setStyle(this._elementRef.nativeElement, 'left', left);\n this._renderer.setStyle(this._elementRef.nativeElement, 'width', width);\n }\n}\nMatInkBar.decorators = [\n { type: Directive, args: [{\n selector: 'mat-ink-bar',\n host: {\n 'class': 'mat-ink-bar',\n },\n },] },\n];\n/**\n * @nocollapse\n */\nMatInkBar.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: NgZone, },\n];\nfunction MatInkBar_tsickle_Closure_declarations() {\n /** @type {?} */\n MatInkBar.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatInkBar.ctorParameters;\n /** @type {?} */\n MatInkBar.prototype._renderer;\n /** @type {?} */\n MatInkBar.prototype._elementRef;\n /** @type {?} */\n MatInkBar.prototype._ngZone;\n}\n//# sourceMappingURL=ink-bar.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortalDirective } from '@angular/cdk/portal';\n/**\n * Workaround for https://github.com/angular/angular/issues/17849\n */\nexport const _MatTabLabelBaseClass = TemplatePortalDirective;\n/**\n * Used to flag tab labels for use with the portal directive\n */\nexport class MatTabLabel extends _MatTabLabelBaseClass {\n /**\n * @param {?} templateRef\n * @param {?} viewContainerRef\n */\n constructor(templateRef, viewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\nMatTabLabel.decorators = [\n { type: Directive, args: [{\n selector: '[mat-tab-label], [matTabLabel]',\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabLabel.ctorParameters = () => [\n { type: TemplateRef, },\n { type: ViewContainerRef, },\n];\nfunction MatTabLabel_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabLabel.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabLabel.ctorParameters;\n}\n//# sourceMappingURL=tab-label.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, } from '@angular/core';\nimport { mixinDisabled } from '@angular/material/core';\nimport { Subject } from 'rxjs/Subject';\nimport { MatTabLabel } from './tab-label';\n/**\n * \\@docs-private\n */\nexport class MatTabBase {\n}\nexport const /** @type {?} */ _MatTabMixinBase = mixinDisabled(MatTabBase);\nexport class MatTab extends _MatTabMixinBase {\n /**\n * @param {?} _viewContainerRef\n */\n constructor(_viewContainerRef) {\n super();\n this._viewContainerRef = _viewContainerRef;\n /**\n * The plain text label for the tab, used when there is no template label.\n */\n this.textLabel = '';\n /**\n * The portal that will be the hosted content of the tab\n */\n this._contentPortal = null;\n /**\n * Emits whenever the label changes.\n */\n this._labelChange = new Subject();\n /**\n * Emits whenevfer the disable changes\n */\n this._disableChange = new Subject();\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n */\n this.position = null;\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n */\n this.origin = null;\n /**\n * Whether the tab is currently active.\n */\n this.isActive = false;\n }\n /**\n * @return {?}\n */\n get content() { return this._contentPortal; }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('textLabel')) {\n this._labelChange.next();\n }\n if (changes.hasOwnProperty('disabled')) {\n this._disableChange.next();\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._disableChange.complete();\n this._labelChange.complete();\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._contentPortal = new TemplatePortal(this._content, this._viewContainerRef);\n }\n}\nMatTab.decorators = [\n { type: Component, args: [{selector: 'mat-tab',\n template: \"\",\n inputs: ['disabled'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n exportAs: 'matTab',\n },] },\n];\n/**\n * @nocollapse\n */\nMatTab.ctorParameters = () => [\n { type: ViewContainerRef, },\n];\nMatTab.propDecorators = {\n 'templateLabel': [{ type: ContentChild, args: [MatTabLabel,] },],\n '_content': [{ type: ViewChild, args: [TemplateRef,] },],\n 'textLabel': [{ type: Input, args: ['label',] },],\n};\nfunction MatTab_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTab.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTab.ctorParameters;\n /** @type {?} */\n MatTab.propDecorators;\n /**\n * Content for the tab label given by .\n * @type {?}\n */\n MatTab.prototype.templateLabel;\n /**\n * Template inside the MatTab view that contains an .\n * @type {?}\n */\n MatTab.prototype._content;\n /**\n * The plain text label for the tab, used when there is no template label.\n * @type {?}\n */\n MatTab.prototype.textLabel;\n /**\n * The portal that will be the hosted content of the tab\n * @type {?}\n */\n MatTab.prototype._contentPortal;\n /**\n * Emits whenever the label changes.\n * @type {?}\n */\n MatTab.prototype._labelChange;\n /**\n * Emits whenevfer the disable changes\n * @type {?}\n */\n MatTab.prototype._disableChange;\n /**\n * The relatively indexed position where 0 represents the center, negative is left, and positive\n * represents the right.\n * @type {?}\n */\n MatTab.prototype.position;\n /**\n * The initial relatively index origin of the tab if it was created and selected after there\n * was already a selected tab. Provides context of what position the tab should originate from.\n * @type {?}\n */\n MatTab.prototype.origin;\n /**\n * Whether the tab is currently active.\n * @type {?}\n */\n MatTab.prototype.isActive;\n /** @type {?} */\n MatTab.prototype._viewContainerRef;\n}\n//# sourceMappingURL=tab.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ViewChild, Component, Input, Output, EventEmitter, ElementRef, Optional, ViewEncapsulation, ChangeDetectionStrategy, } from '@angular/core';\nimport { trigger, state, style, animate, transition, } from '@angular/animations';\nimport { PortalHostDirective } from '@angular/cdk/portal';\nimport { Directionality } from '@angular/cdk/bidi';\n/**\n * Wrapper for the contents of a tab.\n * \\@docs-private\n */\nexport class MatTabBody {\n /**\n * @param {?} _elementRef\n * @param {?} _dir\n */\n constructor(_elementRef, _dir) {\n this._elementRef = _elementRef;\n this._dir = _dir;\n /**\n * Event emitted when the tab begins to animate towards the center as the active tab.\n */\n this._onCentering = new EventEmitter();\n /**\n * Event emitted when the tab completes its animation towards the center.\n */\n this._onCentered = new EventEmitter(true);\n }\n /**\n * @param {?} position\n * @return {?}\n */\n set position(position) {\n if (position < 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'left' : 'right';\n }\n else if (position > 0) {\n this._position = this._getLayoutDirection() == 'ltr' ? 'right' : 'left';\n }\n else {\n this._position = 'center';\n }\n }\n /**\n * The origin position from which this tab should appear when it is centered into view.\n * @param {?} origin\n * @return {?}\n */\n set origin(origin) {\n if (origin == null) {\n return;\n }\n const /** @type {?} */ dir = this._getLayoutDirection();\n if ((dir == 'ltr' && origin <= 0) || (dir == 'rtl' && origin > 0)) {\n this._origin = 'left';\n }\n else {\n this._origin = 'right';\n }\n }\n /**\n * After initialized, check if the content is centered and has an origin. If so, set the\n * special position states that transition the tab from the left or right before centering.\n * @return {?}\n */\n ngOnInit() {\n if (this._position == 'center' && this._origin) {\n this._position = this._origin == 'left' ? 'left-origin-center' : 'right-origin-center';\n }\n }\n /**\n * After the view has been set, check if the tab content is set to the center and attach the\n * content if it is not already attached.\n * @return {?}\n */\n ngAfterViewChecked() {\n if (this._isCenterPosition(this._position) && !this._portalHost.hasAttached()) {\n this._portalHost.attach(this._content);\n }\n }\n /**\n * @param {?} e\n * @return {?}\n */\n _onTranslateTabStarted(e) {\n if (this._isCenterPosition(e.toState)) {\n this._onCentering.emit(this._elementRef.nativeElement.clientHeight);\n }\n }\n /**\n * @param {?} e\n * @return {?}\n */\n _onTranslateTabComplete(e) {\n // If the end state is that the tab is not centered, then detach the content.\n if (!this._isCenterPosition(e.toState) && !this._isCenterPosition(this._position)) {\n this._portalHost.detach();\n }\n // If the transition to the center is complete, emit an event.\n if (this._isCenterPosition(e.toState) && this._isCenterPosition(this._position)) {\n this._onCentered.emit();\n }\n }\n /**\n * The text direction of the containing app.\n * @return {?}\n */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /**\n * Whether the provided position state is considered center, regardless of origin.\n * @param {?} position\n * @return {?}\n */\n _isCenterPosition(position) {\n return position == 'center' ||\n position == 'left-origin-center' ||\n position == 'right-origin-center';\n }\n}\nMatTabBody.decorators = [\n { type: Component, args: [{selector: 'mat-tab-body',\n template: \"
\",\n styles: [\".mat-tab-body-content{height:100%;overflow:auto}.mat-tab-group-dynamic-height .mat-tab-body-content{overflow:hidden}\"],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-body',\n },\n animations: [\n trigger('translateTab', [\n // Note: transitions to `none` instead of 0, because some browsers might blur the content.\n state('center, void, left-origin-center, right-origin-center', style({ transform: 'none' })),\n state('left', style({ transform: 'translate3d(-100%, 0, 0)' })),\n state('right', style({ transform: 'translate3d(100%, 0, 0)' })),\n transition('* => left, * => right, left => center, right => center', animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')),\n transition('void => left-origin-center', [\n style({ transform: 'translate3d(-100%, 0, 0)' }),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ]),\n transition('void => right-origin-center', [\n style({ transform: 'translate3d(100%, 0, 0)' }),\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')\n ])\n ])\n ]\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabBody.ctorParameters = () => [\n { type: ElementRef, },\n { type: Directionality, decorators: [{ type: Optional },] },\n];\nMatTabBody.propDecorators = {\n '_portalHost': [{ type: ViewChild, args: [PortalHostDirective,] },],\n '_onCentering': [{ type: Output },],\n '_onCentered': [{ type: Output },],\n '_content': [{ type: Input, args: ['content',] },],\n 'position': [{ type: Input, args: ['position',] },],\n 'origin': [{ type: Input, args: ['origin',] },],\n};\nfunction MatTabBody_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabBody.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabBody.ctorParameters;\n /** @type {?} */\n MatTabBody.propDecorators;\n /**\n * The portal host inside of this container into which the tab body content will be loaded.\n * @type {?}\n */\n MatTabBody.prototype._portalHost;\n /**\n * Event emitted when the tab begins to animate towards the center as the active tab.\n * @type {?}\n */\n MatTabBody.prototype._onCentering;\n /**\n * Event emitted when the tab completes its animation towards the center.\n * @type {?}\n */\n MatTabBody.prototype._onCentered;\n /**\n * The tab body content to display.\n * @type {?}\n */\n MatTabBody.prototype._content;\n /**\n * The shifted index position of the tab body, where zero represents the active center tab.\n * @type {?}\n */\n MatTabBody.prototype._position;\n /**\n * The origin position from which this tab should appear when it is centered into view.\n * @type {?}\n */\n MatTabBody.prototype._origin;\n /** @type {?} */\n MatTabBody.prototype._elementRef;\n /** @type {?} */\n MatTabBody.prototype._dir;\n}\n//# sourceMappingURL=tab-body.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subscription } from 'rxjs/Subscription';\nimport { MatTab } from './tab';\nimport { merge } from 'rxjs/observable/merge';\nimport { mixinColor, mixinDisableRipple } from '@angular/material/core';\n/**\n * Used to generate unique ID's for each tab component\n */\nlet nextId = 0;\n/**\n * A simple change event emitted on focus or selection changes.\n */\nexport class MatTabChangeEvent {\n}\nfunction MatTabChangeEvent_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabChangeEvent.prototype.index;\n /** @type {?} */\n MatTabChangeEvent.prototype.tab;\n}\n/**\n * \\@docs-private\n */\nexport class MatTabGroupBase {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n}\nfunction MatTabGroupBase_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabGroupBase.prototype._renderer;\n /** @type {?} */\n MatTabGroupBase.prototype._elementRef;\n}\nexport const /** @type {?} */ _MatTabGroupMixinBase = mixinColor(mixinDisableRipple(MatTabGroupBase), 'primary');\n/**\n * Material design tab-group component. Supports basic tab pairs (label + content) and includes\n * animated ink-bar, keyboard navigation, and screen reader.\n * See: https://www.google.com/design/spec/components/tabs.html\n */\nexport class MatTabGroup extends _MatTabGroupMixinBase {\n /**\n * @param {?} _renderer\n * @param {?} elementRef\n * @param {?} _changeDetectorRef\n */\n constructor(_renderer, elementRef, _changeDetectorRef) {\n super(_renderer, elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n /**\n * Whether this component has been initialized.\n */\n this._isInitialized = false;\n /**\n * The tab index that should be selected after the content has been checked.\n */\n this._indexToSelect = 0;\n /**\n * Snapshot of the height of the tab body wrapper before another tab is activated.\n */\n this._tabBodyWrapperHeight = 0;\n /**\n * Subscription to tabs being added/removed.\n */\n this._tabsSubscription = Subscription.EMPTY;\n /**\n * Subscription to changes in the tab labels.\n */\n this._tabLabelSubscription = Subscription.EMPTY;\n this._dynamicHeight = false;\n this._selectedIndex = null;\n /**\n * Position of the tab header.\n */\n this.headerPosition = 'above';\n /**\n * Output to enable support for two-way binding on `[(selectedIndex)]`\n */\n this.selectedIndexChange = new EventEmitter();\n /**\n * Event emitted when focus has changed within a tab group.\n */\n this.focusChange = new EventEmitter();\n /**\n * Event emitted when the tab selection has changed.\n */\n this.selectedTabChange = new EventEmitter(true);\n /**\n * Event emitted when the tab selection has changed.\n * @deprecated Use `selectedTabChange` instead.\n */\n this.selectChange = this.selectedTabChange;\n this._groupId = nextId++;\n }\n /**\n * Whether the tab group should grow to the size of the active tab.\n * @return {?}\n */\n get dynamicHeight() { return this._dynamicHeight; }\n /**\n * @param {?} value\n * @return {?}\n */\n set dynamicHeight(value) { this._dynamicHeight = coerceBooleanProperty(value); }\n /**\n * @deprecated\n * @return {?}\n */\n get _dynamicHeightDeprecated() { return this._dynamicHeight; }\n /**\n * @param {?} value\n * @return {?}\n */\n set _dynamicHeightDeprecated(value) { this._dynamicHeight = value; }\n /**\n * The index of the active tab.\n * @param {?} value\n * @return {?}\n */\n set selectedIndex(value) { this._indexToSelect = value; }\n /**\n * @return {?}\n */\n get selectedIndex() { return this._selectedIndex; }\n /**\n * Background color of the tab group.\n * @return {?}\n */\n get backgroundColor() { return this._backgroundColor; }\n /**\n * @param {?} value\n * @return {?}\n */\n set backgroundColor(value) {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n this._renderer.removeClass(nativeElement, `mat-background-${this.backgroundColor}`);\n if (value) {\n this._renderer.addClass(nativeElement, `mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /**\n * After the content is checked, this component knows what tabs have been defined\n * and what the selected index should be. This is where we can know exactly what position\n * each tab should be in according to the new selected index, and additionally we know how\n * a new selected tab should transition in (from the left or right).\n * @return {?}\n */\n ngAfterContentChecked() {\n // Clamp the next selected index to the boundsof 0 and the tabs length.\n // Note the `|| 0`, which ensures that values like NaN can't get through\n // and which would otherwise throw the component into an infinite loop\n // (since Math.max(NaN, 0) === NaN).\n let /** @type {?} */ indexToSelect = this._indexToSelect =\n Math.min(this._tabs.length - 1, Math.max(this._indexToSelect || 0, 0));\n // If there is a change in selected index, emit a change event. Should not trigger if\n // the selected index has not yet been initialized.\n if (this._selectedIndex != indexToSelect && this._selectedIndex != null) {\n const /** @type {?} */ tabChangeEvent = this._createChangeEvent(indexToSelect);\n this.selectedTabChange.emit(tabChangeEvent);\n // Emitting this value after change detection has run\n // since the checked content may contain this variable'\n Promise.resolve().then(() => this.selectedIndexChange.emit(indexToSelect));\n }\n // Setup the position for each tab and optionally setup an origin on the next selected tab.\n this._tabs.forEach((tab, index) => {\n tab.position = index - indexToSelect;\n tab.isActive = index === indexToSelect;\n // If there is already a selected tab, then set up an origin for the next selected tab\n // if it doesn't have one already.\n if (this._selectedIndex != null && tab.position == 0 && !tab.origin) {\n tab.origin = indexToSelect - this._selectedIndex;\n }\n });\n if (this._selectedIndex !== indexToSelect) {\n this._selectedIndex = indexToSelect;\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * @return {?}\n */\n ngAfterContentInit() {\n this._subscribeToTabLabels();\n // Subscribe to changes in the amount of tabs, in order to be\n // able to re-render the content as new tabs are added or removed.\n this._tabsSubscription = this._tabs.changes.subscribe(() => {\n this._subscribeToTabLabels();\n this._changeDetectorRef.markForCheck();\n });\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._tabsSubscription.unsubscribe();\n this._tabLabelSubscription.unsubscribe();\n }\n /**\n * Waits one frame for the view to update, then updates the ink bar\n * Note: This must be run outside of the zone or it will create an infinite change detection loop.\n * @return {?}\n */\n ngAfterViewChecked() {\n this._isInitialized = true;\n }\n /**\n * @param {?} index\n * @return {?}\n */\n _focusChanged(index) {\n this.focusChange.emit(this._createChangeEvent(index));\n }\n /**\n * @param {?} index\n * @return {?}\n */\n _createChangeEvent(index) {\n const /** @type {?} */ event = new MatTabChangeEvent;\n event.index = index;\n if (this._tabs && this._tabs.length) {\n event.tab = this._tabs.toArray()[index];\n }\n return event;\n }\n /**\n * Subscribes to changes in the tab labels. This is needed, because the \\@Input for the label is\n * on the MatTab component, whereas the data binding is inside the MatTabGroup. In order for the\n * binding to be updated, we need to subscribe to changes in it and trigger change detection\n * manually.\n * @return {?}\n */\n _subscribeToTabLabels() {\n if (this._tabLabelSubscription) {\n this._tabLabelSubscription.unsubscribe();\n }\n this._tabLabelSubscription = merge(...this._tabs.map(tab => tab._disableChange), ...this._tabs.map(tab => tab._labelChange)).subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n /**\n * Returns a unique id for each tab label element\n * @param {?} i\n * @return {?}\n */\n _getTabLabelId(i) {\n return `mat-tab-label-${this._groupId}-${i}`;\n }\n /**\n * Returns a unique id for each tab content element\n * @param {?} i\n * @return {?}\n */\n _getTabContentId(i) {\n return `mat-tab-content-${this._groupId}-${i}`;\n }\n /**\n * Sets the height of the body wrapper to the height of the activating tab if dynamic\n * height property is true.\n * @param {?} tabHeight\n * @return {?}\n */\n _setTabBodyWrapperHeight(tabHeight) {\n if (!this._dynamicHeight || !this._tabBodyWrapperHeight) {\n return;\n }\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height', this._tabBodyWrapperHeight + 'px');\n // This conditional forces the browser to paint the height so that\n // the animation to the new height can have an origin.\n if (this._tabBodyWrapper.nativeElement.offsetHeight) {\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height', tabHeight + 'px');\n }\n }\n /**\n * Removes the height of the tab body wrapper.\n * @return {?}\n */\n _removeTabBodyWrapperHeight() {\n this._tabBodyWrapperHeight = this._tabBodyWrapper.nativeElement.clientHeight;\n this._renderer.setStyle(this._tabBodyWrapper.nativeElement, 'height', '');\n }\n}\nMatTabGroup.decorators = [\n { type: Component, args: [{selector: 'mat-tab-group',\n exportAs: 'matTabGroup',\n template: \"
{{tab.textLabel}}
\",\n styles: [\".mat-tab-group{display:flex;flex-direction:column}.mat-tab-group.mat-tab-group-inverted-header{flex-direction:column-reverse}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default;pointer-events:none}@media (max-width:600px){.mat-tab-label{padding:0 12px}}@media (max-width:960px){.mat-tab-label{padding:0 12px}}.mat-tab-group[mat-stretch-tabs] .mat-tab-label{flex-basis:0;flex-grow:1}.mat-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height .5s cubic-bezier(.35,0,.25,1)}.mat-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden}.mat-tab-body.mat-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-tab-group.mat-tab-group-dynamic-height .mat-tab-body.mat-tab-body-active{overflow-y:hidden}\"],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n inputs: ['color', 'disableRipple'],\n host: {\n 'class': 'mat-tab-group',\n '[class.mat-tab-group-dynamic-height]': 'dynamicHeight',\n '[class.mat-tab-group-inverted-header]': 'headerPosition === \"below\"',\n },\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabGroup.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: ChangeDetectorRef, },\n];\nMatTabGroup.propDecorators = {\n '_tabs': [{ type: ContentChildren, args: [MatTab,] },],\n '_tabBodyWrapper': [{ type: ViewChild, args: ['tabBodyWrapper',] },],\n 'dynamicHeight': [{ type: Input },],\n '_dynamicHeightDeprecated': [{ type: Input, args: ['mat-dynamic-height',] },],\n 'selectedIndex': [{ type: Input },],\n 'headerPosition': [{ type: Input },],\n 'backgroundColor': [{ type: Input },],\n 'selectedIndexChange': [{ type: Output },],\n 'focusChange': [{ type: Output },],\n 'selectedTabChange': [{ type: Output },],\n 'selectChange': [{ type: Output },],\n};\nfunction MatTabGroup_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabGroup.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabGroup.ctorParameters;\n /** @type {?} */\n MatTabGroup.propDecorators;\n /** @type {?} */\n MatTabGroup.prototype._tabs;\n /** @type {?} */\n MatTabGroup.prototype._tabBodyWrapper;\n /**\n * Whether this component has been initialized.\n * @type {?}\n */\n MatTabGroup.prototype._isInitialized;\n /**\n * The tab index that should be selected after the content has been checked.\n * @type {?}\n */\n MatTabGroup.prototype._indexToSelect;\n /**\n * Snapshot of the height of the tab body wrapper before another tab is activated.\n * @type {?}\n */\n MatTabGroup.prototype._tabBodyWrapperHeight;\n /**\n * Subscription to tabs being added/removed.\n * @type {?}\n */\n MatTabGroup.prototype._tabsSubscription;\n /**\n * Subscription to changes in the tab labels.\n * @type {?}\n */\n MatTabGroup.prototype._tabLabelSubscription;\n /** @type {?} */\n MatTabGroup.prototype._dynamicHeight;\n /** @type {?} */\n MatTabGroup.prototype._selectedIndex;\n /**\n * Position of the tab header.\n * @type {?}\n */\n MatTabGroup.prototype.headerPosition;\n /** @type {?} */\n MatTabGroup.prototype._backgroundColor;\n /**\n * Output to enable support for two-way binding on `[(selectedIndex)]`\n * @type {?}\n */\n MatTabGroup.prototype.selectedIndexChange;\n /**\n * Event emitted when focus has changed within a tab group.\n * @type {?}\n */\n MatTabGroup.prototype.focusChange;\n /**\n * Event emitted when the tab selection has changed.\n * @type {?}\n */\n MatTabGroup.prototype.selectedTabChange;\n /**\n * Event emitted when the tab selection has changed.\n * @deprecated Use `selectedTabChange` instead.\n * @type {?}\n */\n MatTabGroup.prototype.selectChange;\n /** @type {?} */\n MatTabGroup.prototype._groupId;\n /** @type {?} */\n MatTabGroup.prototype._changeDetectorRef;\n}\n//# sourceMappingURL=tab-group.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef } from '@angular/core';\nimport { mixinDisabled } from '@angular/material/core';\n/**\n * \\@docs-private\n */\nexport class MatTabLabelWrapperBase {\n}\nexport const /** @type {?} */ _MatTabLabelWrapperMixinBase = mixinDisabled(MatTabLabelWrapperBase);\n/**\n * Used in the `mat-tab-group` view to display tab labels.\n * \\@docs-private\n */\nexport class MatTabLabelWrapper extends _MatTabLabelWrapperMixinBase {\n /**\n * @param {?} elementRef\n */\n constructor(elementRef) {\n super();\n this.elementRef = elementRef;\n }\n /**\n * Sets focus on the wrapper element\n * @return {?}\n */\n focus() {\n this.elementRef.nativeElement.focus();\n }\n /**\n * @return {?}\n */\n getOffsetLeft() {\n return this.elementRef.nativeElement.offsetLeft;\n }\n /**\n * @return {?}\n */\n getOffsetWidth() {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\nMatTabLabelWrapper.decorators = [\n { type: Directive, args: [{\n selector: '[matTabLabelWrapper]',\n inputs: ['disabled'],\n host: {\n '[class.mat-tab-disabled]': 'disabled'\n }\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabLabelWrapper.ctorParameters = () => [\n { type: ElementRef, },\n];\nfunction MatTabLabelWrapper_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabLabelWrapper.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabLabelWrapper.ctorParameters;\n /** @type {?} */\n MatTabLabelWrapper.prototype.elementRef;\n}\n//# sourceMappingURL=tab-label-wrapper.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport { startWith } from '@angular/cdk/rxjs';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Optional, Output, Renderer2, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { mixinDisableRipple } from '@angular/material/core';\nimport { merge } from 'rxjs/observable/merge';\nimport { of as observableOf } from 'rxjs/observable/of';\nimport { Subscription } from 'rxjs/Subscription';\nimport { MatInkBar } from './ink-bar';\nimport { MatTabLabelWrapper } from './tab-label-wrapper';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\n/**\n * The distance in pixels that will be overshot when scrolling a tab label into view. This helps\n * provide a small affordance to the label next to it.\n */\nconst EXAGGERATED_OVERSCROLL = 60;\n/**\n * \\@docs-private\n */\nexport class MatTabHeaderBase {\n}\nexport const /** @type {?} */ _MatTabHeaderMixinBase = mixinDisableRipple(MatTabHeaderBase);\n/**\n * The header of the tab group which displays a list of all the tabs in the tab group. Includes\n * an ink bar that follows the currently selected tab. When the tabs list's width exceeds the\n * width of the header container, then arrows will be displayed to allow the user to scroll\n * left and right across the header.\n * \\@docs-private\n */\nexport class MatTabHeader extends _MatTabHeaderMixinBase {\n /**\n * @param {?} _elementRef\n * @param {?} _renderer\n * @param {?} _changeDetectorRef\n * @param {?} _viewportRuler\n * @param {?} _dir\n */\n constructor(_elementRef, _renderer, _changeDetectorRef, _viewportRuler, _dir) {\n super();\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._changeDetectorRef = _changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n this._dir = _dir;\n /**\n * The tab index that is focused.\n */\n this._focusIndex = 0;\n /**\n * The distance in pixels that the tab labels should be translated to the left.\n */\n this._scrollDistance = 0;\n /**\n * Whether the header should scroll to the selected index after the view has been checked.\n */\n this._selectedIndexChanged = false;\n /**\n * Combines listeners that will re-align the ink bar whenever they're invoked.\n */\n this._realignInkBar = Subscription.EMPTY;\n /**\n * Whether the controls for pagination should be displayed\n */\n this._showPaginationControls = false;\n /**\n * Whether the tab list can be scrolled more towards the end of the tab label list.\n */\n this._disableScrollAfter = true;\n /**\n * Whether the tab list can be scrolled more towards the beginning of the tab label list.\n */\n this._disableScrollBefore = true;\n this._selectedIndex = 0;\n /**\n * Event emitted when the option is selected.\n */\n this.selectFocusedIndex = new EventEmitter();\n /**\n * Event emitted when a label is focused.\n */\n this.indexFocused = new EventEmitter();\n }\n /**\n * The index of the active tab.\n * @return {?}\n */\n get selectedIndex() { return this._selectedIndex; }\n /**\n * @param {?} value\n * @return {?}\n */\n set selectedIndex(value) {\n this._selectedIndexChanged = this._selectedIndex != value;\n this._selectedIndex = value;\n this._focusIndex = value;\n }\n /**\n * @return {?}\n */\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount != this._labelWrappers.length) {\n this._updatePagination();\n this._tabLabelCount = this._labelWrappers.length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex);\n this._checkScrollingControls();\n this._alignInkBarToSelectedTab();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * @param {?} event\n * @return {?}\n */\n _handleKeydown(event) {\n switch (event.keyCode) {\n case RIGHT_ARROW:\n this._focusNextTab();\n break;\n case LEFT_ARROW:\n this._focusPreviousTab();\n break;\n case ENTER:\n case SPACE:\n this.selectFocusedIndex.emit(this.focusIndex);\n event.preventDefault();\n break;\n }\n }\n /**\n * Aligns the ink bar to the selected tab on load.\n * @return {?}\n */\n ngAfterContentInit() {\n const /** @type {?} */ dirChange = this._dir ? this._dir.change : observableOf(null);\n const /** @type {?} */ resize = this._viewportRuler.change(150);\n this._realignInkBar = startWith.call(merge(dirChange, resize), null).subscribe(() => {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n });\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._realignInkBar.unsubscribe();\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n * @return {?}\n */\n _onContentChanges() {\n this._updatePagination();\n this._alignInkBarToSelectedTab();\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Updating the view whether pagination should be enabled or not\n * @return {?}\n */\n _updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /**\n * When the focus index is set, we must manually send focus to the correct label\n * @param {?} value\n * @return {?}\n */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this._focusIndex == value) {\n return;\n }\n this._focusIndex = value;\n this.indexFocused.emit(value);\n this._setTabFocus(value);\n }\n /**\n * Tracks which element has focus; used for keyboard navigation\n * @return {?}\n */\n get focusIndex() { return this._focusIndex; }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n * @param {?} index\n * @return {?}\n */\n _isValidIndex(index) {\n if (!this._labelWrappers) {\n return true;\n }\n const /** @type {?} */ tab = this._labelWrappers ? this._labelWrappers.toArray()[index] : null;\n return !!tab && !tab.disabled;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n * @param {?} tabIndex\n * @return {?}\n */\n _setTabFocus(tabIndex) {\n if (this._showPaginationControls) {\n this._scrollToLabel(tabIndex);\n }\n if (this._labelWrappers && this._labelWrappers.length) {\n this._labelWrappers.toArray()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const /** @type {?} */ containerEl = this._tabListContainer.nativeElement;\n const /** @type {?} */ dir = this._getLayoutDirection();\n if (dir == 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /**\n * Moves the focus towards the beginning or the end of the list depending on the offset provided.\n * Valid offsets are 1 and -1.\n * @param {?} offset\n * @return {?}\n */\n _moveFocus(offset) {\n if (this._labelWrappers) {\n const /** @type {?} */ tabs = this._labelWrappers.toArray();\n for (let /** @type {?} */ i = this.focusIndex + offset; i < tabs.length && i >= 0; i += offset) {\n if (this._isValidIndex(i)) {\n this.focusIndex = i;\n return;\n }\n }\n }\n }\n /**\n * Increment the focus index by 1 until a valid tab is found.\n * @return {?}\n */\n _focusNextTab() {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? 1 : -1);\n }\n /**\n * Decrement the focus index by 1 until a valid tab is found.\n * @return {?}\n */\n _focusPreviousTab() {\n this._moveFocus(this._getLayoutDirection() == 'ltr' ? -1 : 1);\n }\n /**\n * The layout direction of the containing app.\n * @return {?}\n */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /**\n * Performs the CSS transformation on the tab list that will cause the list to scroll.\n * @return {?}\n */\n _updateTabScrollPosition() {\n const /** @type {?} */ scrollDistance = this.scrollDistance;\n const /** @type {?} */ translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n this._renderer.setStyle(this._tabList.nativeElement, 'transform', `translate3d(${translateX}px, 0, 0)`);\n }\n /**\n * Sets the distance in pixels that the tab header should be transformed in the X-axis.\n * @param {?} v\n * @return {?}\n */\n set scrollDistance(v) {\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), v));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n }\n /**\n * @return {?}\n */\n get scrollDistance() { return this._scrollDistance; }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @param {?} scrollDir\n * @return {?}\n */\n _scrollHeader(scrollDir) {\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n this.scrollDistance += (scrollDir == 'before' ? -1 : 1) * viewLength / 3;\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @param {?} labelIndex\n * @return {?}\n */\n _scrollToLabel(labelIndex) {\n const /** @type {?} */ selectedLabel = this._labelWrappers ? this._labelWrappers.toArray()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n let /** @type {?} */ labelBeforePos, /** @type {?} */ labelAfterPos;\n if (this._getLayoutDirection() == 'ltr') {\n labelBeforePos = selectedLabel.getOffsetLeft();\n labelAfterPos = labelBeforePos + selectedLabel.getOffsetWidth();\n }\n else {\n labelAfterPos = this._tabList.nativeElement.offsetWidth - selectedLabel.getOffsetLeft();\n labelBeforePos = labelAfterPos - selectedLabel.getOffsetWidth();\n }\n const /** @type {?} */ beforeVisiblePos = this.scrollDistance;\n const /** @type {?} */ afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n _checkPaginationEnabled() {\n const /** @type {?} */ isEnabled = this._tabList.nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this._showPaginationControls) {\n this._changeDetectorRef.markForCheck();\n }\n this._showPaginationControls = isEnabled;\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n _checkScrollingControls() {\n // Check if the pagination arrows should be activated.\n this._disableScrollBefore = this.scrollDistance == 0;\n this._disableScrollAfter = this.scrollDistance == this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n * @return {?}\n */\n _getMaxScrollDistance() {\n const /** @type {?} */ lengthOfTabList = this._tabList.nativeElement.scrollWidth;\n const /** @type {?} */ viewLength = this._tabListContainer.nativeElement.offsetWidth;\n return (lengthOfTabList - viewLength) || 0;\n }\n /**\n * Tells the ink-bar to align itself to the current label wrapper\n * @return {?}\n */\n _alignInkBarToSelectedTab() {\n const /** @type {?} */ selectedLabelWrapper = this._labelWrappers && this._labelWrappers.length ?\n this._labelWrappers.toArray()[this.selectedIndex].elementRef.nativeElement :\n null;\n this._inkBar.alignToElement(selectedLabelWrapper);\n }\n}\nMatTabHeader.decorators = [\n { type: Component, args: [{selector: 'mat-tab-header',\n template: \"
\",\n styles: [\".mat-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-tab-label{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;position:relative}.mat-tab-label:focus{outline:0;opacity:1}.mat-tab-label.mat-tab-disabled{cursor:default;pointer-events:none}@media (max-width:600px){.mat-tab-label{min-width:72px}}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:.5s cubic-bezier(.35,0,.25,1)}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}.mat-tab-header-pagination{position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2}.mat-tab-header-pagination-controls-enabled .mat-tab-header-pagination{display:flex}.mat-tab-header-pagination-before,.mat-tab-header-rtl .mat-tab-header-pagination-after{padding-left:4px}.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-after .mat-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-tab-header-pagination-after,.mat-tab-header-rtl .mat-tab-header-pagination-before{padding-right:4px}.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron,.mat-tab-header-rtl .mat-tab-header-pagination-before .mat-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;content:'';height:8px;width:8px}.mat-tab-header-pagination-disabled{box-shadow:none;cursor:default}.mat-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-tab-list{flex-grow:1;position:relative;transition:transform .5s cubic-bezier(.35,0,.25,1)}.mat-tab-labels{display:flex}\"],\n inputs: ['disableRipple'],\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-tab-header',\n '[class.mat-tab-header-pagination-controls-enabled]': '_showPaginationControls',\n '[class.mat-tab-header-rtl]': \"_getLayoutDirection() == 'rtl'\",\n },\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabHeader.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: ChangeDetectorRef, },\n { type: ViewportRuler, },\n { type: Directionality, decorators: [{ type: Optional },] },\n];\nMatTabHeader.propDecorators = {\n '_labelWrappers': [{ type: ContentChildren, args: [MatTabLabelWrapper,] },],\n '_inkBar': [{ type: ViewChild, args: [MatInkBar,] },],\n '_tabListContainer': [{ type: ViewChild, args: ['tabListContainer',] },],\n '_tabList': [{ type: ViewChild, args: ['tabList',] },],\n 'selectedIndex': [{ type: Input },],\n 'selectFocusedIndex': [{ type: Output },],\n 'indexFocused': [{ type: Output },],\n};\nfunction MatTabHeader_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabHeader.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabHeader.ctorParameters;\n /** @type {?} */\n MatTabHeader.propDecorators;\n /** @type {?} */\n MatTabHeader.prototype._labelWrappers;\n /** @type {?} */\n MatTabHeader.prototype._inkBar;\n /** @type {?} */\n MatTabHeader.prototype._tabListContainer;\n /** @type {?} */\n MatTabHeader.prototype._tabList;\n /**\n * The tab index that is focused.\n * @type {?}\n */\n MatTabHeader.prototype._focusIndex;\n /**\n * The distance in pixels that the tab labels should be translated to the left.\n * @type {?}\n */\n MatTabHeader.prototype._scrollDistance;\n /**\n * Whether the header should scroll to the selected index after the view has been checked.\n * @type {?}\n */\n MatTabHeader.prototype._selectedIndexChanged;\n /**\n * Combines listeners that will re-align the ink bar whenever they're invoked.\n * @type {?}\n */\n MatTabHeader.prototype._realignInkBar;\n /**\n * Whether the controls for pagination should be displayed\n * @type {?}\n */\n MatTabHeader.prototype._showPaginationControls;\n /**\n * Whether the tab list can be scrolled more towards the end of the tab label list.\n * @type {?}\n */\n MatTabHeader.prototype._disableScrollAfter;\n /**\n * Whether the tab list can be scrolled more towards the beginning of the tab label list.\n * @type {?}\n */\n MatTabHeader.prototype._disableScrollBefore;\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n * @type {?}\n */\n MatTabHeader.prototype._tabLabelCount;\n /**\n * Whether the scroll distance has changed and should be applied after the view is checked.\n * @type {?}\n */\n MatTabHeader.prototype._scrollDistanceChanged;\n /** @type {?} */\n MatTabHeader.prototype._selectedIndex;\n /**\n * Event emitted when the option is selected.\n * @type {?}\n */\n MatTabHeader.prototype.selectFocusedIndex;\n /**\n * Event emitted when a label is focused.\n * @type {?}\n */\n MatTabHeader.prototype.indexFocused;\n /** @type {?} */\n MatTabHeader.prototype._elementRef;\n /** @type {?} */\n MatTabHeader.prototype._renderer;\n /** @type {?} */\n MatTabHeader.prototype._changeDetectorRef;\n /** @type {?} */\n MatTabHeader.prototype._viewportRuler;\n /** @type {?} */\n MatTabHeader.prototype._dir;\n}\n//# sourceMappingURL=tab-header.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Platform } from '@angular/cdk/platform';\nimport { takeUntil } from '@angular/cdk/rxjs';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Directive, ElementRef, forwardRef, Inject, Input, NgZone, Optional, Renderer2, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, MatRipple, mixinColor, mixinDisabled, mixinDisableRipple, } from '@angular/material/core';\nimport { merge } from 'rxjs/observable/merge';\nimport { of as observableOf } from 'rxjs/observable/of';\nimport { Subject } from 'rxjs/Subject';\nimport { MatInkBar } from '../ink-bar';\n/**\n * \\@docs-private\n */\nexport class MatTabNavBase {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n }\n}\nfunction MatTabNavBase_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabNavBase.prototype._renderer;\n /** @type {?} */\n MatTabNavBase.prototype._elementRef;\n}\nexport const /** @type {?} */ _MatTabNavMixinBase = mixinDisableRipple(mixinColor(MatTabNavBase, 'primary'));\n/**\n * Navigation component matching the styles of the tab group header.\n * Provides anchored navigation with animated ink bar.\n */\nexport class MatTabNav extends _MatTabNavMixinBase {\n /**\n * @param {?} renderer\n * @param {?} elementRef\n * @param {?} _dir\n * @param {?} _ngZone\n * @param {?} _changeDetectorRef\n * @param {?} _viewportRuler\n */\n constructor(renderer, elementRef, _dir, _ngZone, _changeDetectorRef, _viewportRuler) {\n super(renderer, elementRef);\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._viewportRuler = _viewportRuler;\n /**\n * Subject that emits when the component has been destroyed.\n */\n this._onDestroy = new Subject();\n this._disableRipple = false;\n }\n /**\n * Background color of the tab nav.\n * @return {?}\n */\n get backgroundColor() { return this._backgroundColor; }\n /**\n * @param {?} value\n * @return {?}\n */\n set backgroundColor(value) {\n let /** @type {?} */ nativeElement = this._elementRef.nativeElement;\n this._renderer.removeClass(nativeElement, `mat-background-${this.backgroundColor}`);\n if (value) {\n this._renderer.addClass(nativeElement, `mat-background-${value}`);\n }\n this._backgroundColor = value;\n }\n /**\n * Whether ripples should be disabled for all links or not.\n * @return {?}\n */\n get disableRipple() { return this._disableRipple; }\n /**\n * @param {?} value\n * @return {?}\n */\n set disableRipple(value) {\n this._disableRipple = coerceBooleanProperty(value);\n this._setLinkDisableRipple();\n }\n /**\n * Notifies the component that the active link has been changed.\n * @param {?} element\n * @return {?}\n */\n updateActiveLink(element) {\n this._activeLinkChanged = this._activeLinkElement != element;\n this._activeLinkElement = element;\n if (this._activeLinkChanged) {\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * @return {?}\n */\n ngAfterContentInit() {\n this._ngZone.runOutsideAngular(() => {\n const /** @type {?} */ dirChange = this._dir ? this._dir.change : observableOf(null);\n return takeUntil.call(merge(dirChange, this._viewportRuler.change(10)), this._onDestroy)\n .subscribe(() => this._alignInkBar());\n });\n this._setLinkDisableRipple();\n }\n /**\n * Checks if the active link has been changed and, if so, will update the ink bar.\n * @return {?}\n */\n ngAfterContentChecked() {\n if (this._activeLinkChanged) {\n this._alignInkBar();\n this._activeLinkChanged = false;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n /**\n * Aligns the ink bar to the active link.\n * @return {?}\n */\n _alignInkBar() {\n if (this._activeLinkElement) {\n this._inkBar.alignToElement(this._activeLinkElement.nativeElement);\n }\n }\n /**\n * Sets the `disableRipple` property on each link of the navigation bar.\n * @return {?}\n */\n _setLinkDisableRipple() {\n if (this._tabLinks) {\n this._tabLinks.forEach(link => link.disableRipple = this.disableRipple);\n }\n }\n}\nMatTabNav.decorators = [\n { type: Component, args: [{selector: '[mat-tab-nav-bar]',\n exportAs: 'matTabNavBar, matTabNav',\n inputs: ['color', 'disableRipple'],\n template: \"
\",\n styles: [\".mat-tab-nav-bar{overflow:hidden;position:relative;flex-shrink:0}.mat-tab-links{position:relative}.mat-tab-link{height:48px;padding:0 24px;cursor:pointer;box-sizing:border-box;opacity:.6;min-width:160px;text-align:center;display:inline-flex;justify-content:center;align-items:center;white-space:nowrap;vertical-align:top;text-decoration:none;position:relative;overflow:hidden}.mat-tab-link:focus{outline:0;opacity:1}.mat-tab-link.mat-tab-disabled{cursor:default;pointer-events:none}@media (max-width:600px){.mat-tab-link{min-width:72px}}.mat-ink-bar{position:absolute;bottom:0;height:2px;transition:.5s cubic-bezier(.35,0,.25,1)}.mat-tab-group-inverted-header .mat-ink-bar{bottom:auto;top:0}\"],\n host: { 'class': 'mat-tab-nav-bar' },\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabNav.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: Directionality, decorators: [{ type: Optional },] },\n { type: NgZone, },\n { type: ChangeDetectorRef, },\n { type: ViewportRuler, },\n];\nMatTabNav.propDecorators = {\n '_inkBar': [{ type: ViewChild, args: [MatInkBar,] },],\n '_tabLinks': [{ type: ContentChildren, args: [forwardRef(() => MatTabLink), { descendants: true },] },],\n 'backgroundColor': [{ type: Input },],\n};\nfunction MatTabNav_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabNav.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabNav.ctorParameters;\n /** @type {?} */\n MatTabNav.propDecorators;\n /**\n * Subject that emits when the component has been destroyed.\n * @type {?}\n */\n MatTabNav.prototype._onDestroy;\n /** @type {?} */\n MatTabNav.prototype._activeLinkChanged;\n /** @type {?} */\n MatTabNav.prototype._activeLinkElement;\n /** @type {?} */\n MatTabNav.prototype._inkBar;\n /**\n * Query list of all tab links of the tab navigation.\n * @type {?}\n */\n MatTabNav.prototype._tabLinks;\n /** @type {?} */\n MatTabNav.prototype._backgroundColor;\n /** @type {?} */\n MatTabNav.prototype._disableRipple;\n /** @type {?} */\n MatTabNav.prototype._dir;\n /** @type {?} */\n MatTabNav.prototype._ngZone;\n /** @type {?} */\n MatTabNav.prototype._changeDetectorRef;\n /** @type {?} */\n MatTabNav.prototype._viewportRuler;\n}\nexport class MatTabLinkBase {\n}\nexport const /** @type {?} */ _MatTabLinkMixinBase = mixinDisabled(MatTabLinkBase);\n/**\n * Link inside of a `mat-tab-nav-bar`.\n */\nexport class MatTabLink extends _MatTabLinkMixinBase {\n /**\n * @param {?} _tabNavBar\n * @param {?} _elementRef\n * @param {?} ngZone\n * @param {?} platform\n * @param {?} globalOptions\n */\n constructor(_tabNavBar, _elementRef, ngZone, platform, globalOptions) {\n super();\n this._tabNavBar = _tabNavBar;\n this._elementRef = _elementRef;\n /**\n * Whether the tab link is active or not.\n */\n this._isActive = false;\n /**\n * Whether the ripples for this tab should be disabled or not.\n */\n this._disableRipple = false;\n // Manually create a ripple instance that uses the tab link element as trigger element.\n // Notice that the lifecycle hooks for the ripple config won't be called anymore.\n this._tabLinkRipple = new MatRipple(_elementRef, ngZone, platform, globalOptions);\n }\n /**\n * Whether the link is active.\n * @return {?}\n */\n get active() { return this._isActive; }\n /**\n * @param {?} value\n * @return {?}\n */\n set active(value) {\n this._isActive = value;\n if (value) {\n this._tabNavBar.updateActiveLink(this._elementRef);\n }\n }\n /**\n * Whether ripples should be disabled or not.\n * @return {?}\n */\n get disableRipple() { return this._disableRipple; }\n /**\n * @param {?} value\n * @return {?}\n */\n set disableRipple(value) {\n this._disableRipple = value;\n this._tabLinkRipple.disabled = this.disableRipple;\n this._tabLinkRipple._updateRippleRenderer();\n }\n /**\n * \\@docs-private\n * @return {?}\n */\n get tabIndex() {\n return this.disabled ? -1 : 0;\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n // Manually call the ngOnDestroy lifecycle hook of the ripple instance because it won't be\n // called automatically since its instance is not created by Angular.\n this._tabLinkRipple.ngOnDestroy();\n }\n}\nMatTabLink.decorators = [\n { type: Directive, args: [{\n selector: '[mat-tab-link], [matTabLink]',\n exportAs: 'matTabLink',\n inputs: ['disabled'],\n host: {\n 'class': 'mat-tab-link',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.tabindex]': 'tabIndex',\n '[class.mat-tab-disabled]': 'disabled',\n '[class.mat-tab-label-active]': 'active',\n }\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabLink.ctorParameters = () => [\n { type: MatTabNav, },\n { type: ElementRef, },\n { type: NgZone, },\n { type: Platform, },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_RIPPLE_GLOBAL_OPTIONS,] },] },\n];\nMatTabLink.propDecorators = {\n 'active': [{ type: Input },],\n};\nfunction MatTabLink_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabLink.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabLink.ctorParameters;\n /** @type {?} */\n MatTabLink.propDecorators;\n /**\n * Whether the tab link is active or not.\n * @type {?}\n */\n MatTabLink.prototype._isActive;\n /**\n * Whether the ripples for this tab should be disabled or not.\n * @type {?}\n */\n MatTabLink.prototype._disableRipple;\n /**\n * Reference to the instance of the ripple for the tab link.\n * @type {?}\n */\n MatTabLink.prototype._tabLinkRipple;\n /** @type {?} */\n MatTabLink.prototype._tabNavBar;\n /** @type {?} */\n MatTabLink.prototype._elementRef;\n}\n//# sourceMappingURL=tab-nav-bar.js.map","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollDispatchModule, VIEWPORT_RULER_PROVIDER } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport { MatInkBar } from './ink-bar';\nimport { MatTab } from './tab';\nimport { MatTabBody } from './tab-body';\nimport { MatTabGroup } from './tab-group';\nimport { MatTabHeader } from './tab-header';\nimport { MatTabLabel } from './tab-label';\nimport { MatTabLabelWrapper } from './tab-label-wrapper';\nimport { MatTabLink, MatTabNav } from './tab-nav-bar/tab-nav-bar';\nexport class MatTabsModule {\n}\nMatTabsModule.decorators = [\n { type: NgModule, args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PortalModule,\n MatRippleModule,\n ObserversModule,\n ScrollDispatchModule,\n ],\n // Don't export all components because some are only to be used internally.\n exports: [\n MatCommonModule,\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatTabNav,\n MatTabLink,\n ],\n declarations: [\n MatTabGroup,\n MatTabLabel,\n MatTab,\n MatInkBar,\n MatTabLabelWrapper,\n MatTabNav,\n MatTabLink,\n MatTabBody,\n MatTabHeader\n ],\n providers: [VIEWPORT_RULER_PROVIDER],\n },] },\n];\n/**\n * @nocollapse\n */\nMatTabsModule.ctorParameters = () => [];\nfunction MatTabsModule_tsickle_Closure_declarations() {\n /** @type {?} */\n MatTabsModule.decorators;\n /**\n * @nocollapse\n * @type {?}\n */\n MatTabsModule.ctorParameters;\n}\n//# sourceMappingURL=tabs-module.js.map","/**\n * Generated bundle index. Do not edit.\n */\nexport { MatInkBar, MatTabBody, MatTabHeader, MatTabLabelWrapper, MatTab, MatTabLabel, MatTabNav, MatTabLink, MatTabsModule, MatTabChangeEvent, MatTabGroupBase, _MatTabGroupMixinBase, MatTabGroup } from './public-api';\nexport { MatTabBase as ɵe23, _MatTabMixinBase as ɵf23 } from './tab';\nexport { MatTabHeaderBase as ɵa23, _MatTabHeaderMixinBase as ɵb23 } from './tab-header';\nexport { MatTabLabelWrapperBase as ɵc23, _MatTabLabelWrapperMixinBase as ɵd23 } from './tab-label-wrapper';\nexport { MatTabLinkBase as ɵi23, MatTabNavBase as ɵg23, _MatTabLinkMixinBase as ɵj23, _MatTabNavMixinBase as ɵh23 } from './tab-nav-bar/tab-nav-bar';\n//# sourceMappingURL=index.js.map"],"names":["observableOf"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAQA;;;;AAIA,AAAO,MAAM,SAAS,CAAC;;;;;;IAMnB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC1B;;;;;;;IAOD,cAAc,CAAC,OAAO,EAAE;QACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM;gBACjC,qBAAqB,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;aACzD,CAAC,CAAC;SACN;aACI;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAC5B;KACJ;;;;;IAKD,IAAI,GAAG;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;KACpF;;;;;IAKD,IAAI,GAAG;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;KACnF;;;;;;IAMD,UAAU,CAAC,OAAO,EAAE;QAChB,uBAAuB,IAAI,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;QAC/E,uBAAuB,KAAK,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;QACjF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KAC3E;CACJ;AACD,SAAS,CAAC,UAAU,GAAG;IACnB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACd,QAAQ,EAAE,aAAa;gBACvB,IAAI,EAAE;oBACF,OAAO,EAAE,aAAa;iBACzB;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,SAAS,CAAC,cAAc,GAAG,MAAM;IAC7B,EAAE,IAAI,EAAE,SAAS,GAAG;IACpB,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,MAAM,GAAG;CACpB,CAAC,AACF,AAcC,AACD;;ACxFA;;;AAGA,AAAO,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;;;;AAI7D,AAAO,MAAM,WAAW,SAAS,qBAAqB,CAAC;;;;;IAKnD,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE;QACvC,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;KACxC;CACJ;AACD,WAAW,CAAC,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACd,QAAQ,EAAE,gCAAgC;aAC7C,EAAE,EAAE;CAChB,CAAC;;;;AAIF,WAAW,CAAC,cAAc,GAAG,MAAM;IAC/B,EAAE,IAAI,EAAE,WAAW,GAAG;IACtB,EAAE,IAAI,EAAE,gBAAgB,GAAG;CAC9B,CAAC,AACF,AAQC,AACD;;AClCA;;;AAGA,AAAO,MAAM,UAAU,CAAC;CACvB;AACD,AAAO,MAAuB,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AAC3E,AAAO,MAAM,MAAM,SAAS,gBAAgB,CAAC;;;;IAIzC,WAAW,CAAC,iBAAiB,EAAE;QAC3B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;;;;QAI3C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;;;QAIpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;;;QAI3B,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;;;;QAIlC,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC;;;;;QAKpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;;;;QAKrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;;;QAInB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACzB;;;;IAID,IAAI,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAK7C,WAAW,CAAC,OAAO,EAAE;QACjB,IAAI,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC5B;QACD,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACpC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC9B;KACJ;;;;IAID,WAAW,GAAG;QACV,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAChC;;;;IAID,QAAQ,GAAG;QACP,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACnF;CACJ;AACD,MAAM,CAAC,UAAU,GAAG;IAChB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS;gBAClC,QAAQ,EAAE,sDAAsD;gBAChE,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,mBAAmB,EAAE,KAAK;gBAC1B,QAAQ,EAAE,QAAQ;aACrB,EAAE,EAAE;CAChB,CAAC;;;;AAIF,MAAM,CAAC,cAAc,GAAG,MAAM;IAC1B,EAAE,IAAI,EAAE,gBAAgB,GAAG;CAC9B,CAAC;AACF,MAAM,CAAC,cAAc,GAAG;IACpB,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE;IAChE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE;IACxD,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE;CACpD,CAAC,AACF,AA2DC,AACD;;AC5JA;;;;AAIA,AAAO,MAAM,UAAU,CAAC;;;;;IAKpB,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;;;QAIjB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;;;;QAIvC,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;KAC7C;;;;;IAKD,IAAI,QAAQ,CAAC,QAAQ,EAAE;QACnB,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;SAC3E;aACI,IAAI,QAAQ,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;SAC3E;aACI;YACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC7B;KACJ;;;;;;IAMD,IAAI,MAAM,CAAC,MAAM,EAAE;QACf,IAAI,MAAM,IAAI,IAAI,EAAE;YAChB,OAAO;SACV;QACD,uBAAuB,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxD,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE;YAC/D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACzB;aACI;YACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SAC1B;KACJ;;;;;;IAMD,QAAQ,GAAG;QACP,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;SAC1F;KACJ;;;;;;IAMD,kBAAkB,GAAG;QACjB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;YAC3E,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;KACJ;;;;;IAKD,sBAAsB,CAAC,CAAC,EAAE;QACtB,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;SACvE;KACJ;;;;;IAKD,uBAAuB,CAAC,CAAC,EAAE;;QAEvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC/E,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;SAC7B;;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC7E,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SAC3B;KACJ;;;;;IAKD,mBAAmB,GAAG;QAClB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KACjE;;;;;;IAMD,iBAAiB,CAAC,QAAQ,EAAE;QACxB,OAAO,QAAQ,IAAI,QAAQ;YACvB,QAAQ,IAAI,oBAAoB;YAChC,QAAQ,IAAI,qBAAqB,CAAC;KACzC;CACJ;AACD,UAAU,CAAC,UAAU,GAAG;IACpB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,cAAc;gBACvC,QAAQ,EAAE,8OAA8O;gBACxP,MAAM,EAAE,CAAC,sHAAsH,CAAC;gBAChI,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,mBAAmB,EAAE,KAAK;gBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,IAAI,EAAE;oBACF,OAAO,EAAE,cAAc;iBAC1B;gBACD,UAAU,EAAE;oBACR,OAAO,CAAC,cAAc,EAAE;;wBAEpB,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC5F,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;wBAC/D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,CAAC;wBAC/D,UAAU,CAAC,wDAAwD,EAAE,OAAO,CAAC,sCAAsC,CAAC,CAAC;wBACrH,UAAU,CAAC,4BAA4B,EAAE;4BACrC,KAAK,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;4BAChD,OAAO,CAAC,sCAAsC,CAAC;yBAClD,CAAC;wBACF,UAAU,CAAC,6BAA6B,EAAE;4BACtC,KAAK,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;4BAC/C,OAAO,CAAC,sCAAsC,CAAC;yBAClD,CAAC;qBACL,CAAC;iBACL;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,UAAU,CAAC,cAAc,GAAG,MAAM;IAC9B,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC9D,CAAC;AACF,UAAU,CAAC,cAAc,GAAG;IACxB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,mBAAmB,EAAE,EAAE,EAAE;IACnE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACnC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAClC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE;IAClD,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE;IACnD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE;CAClD,CAAC,AACF,AA4CC,AACD;;ACzMA;;;AAGA,IAAI,MAAM,GAAG,CAAC,CAAC;;;;AAIf,AAAO,MAAM,iBAAiB,CAAC;CAC9B;AACD,AAMA;;;AAGA,AAAO,MAAM,eAAe,CAAC;;;;;IAKzB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAClC;CACJ;AACD,AAMA,AAAO,MAAuB,qBAAqB,GAAG,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;;;;;;AAMjH,AAAO,MAAM,WAAW,SAAS,qBAAqB,CAAC;;;;;;IAMnD,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE;QACnD,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;;;;QAI7C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;;;QAI5B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;;;;QAIxB,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;;;;QAI/B,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC;;;;QAI5C,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;;;QAI3B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;;;;QAI9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;;;;QAI9C,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;;;;QAItC,IAAI,CAAC,iBAAiB,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;;;;;QAKhD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;KAC5B;;;;;IAKD,IAAI,aAAa,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAKnD,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE;;;;;IAKhF,IAAI,wBAAwB,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAK9D,IAAI,wBAAwB,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,EAAE;;;;;;IAMpE,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,EAAE;;;;IAIzD,IAAI,aAAa,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAKnD,IAAI,eAAe,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;;;;;IAKvD,IAAI,eAAe,CAAC,KAAK,EAAE;QACvB,qBAAqB,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SACrE;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;;;;;;;;IAQD,qBAAqB,GAAG;;;;;QAKpB,qBAAqB,aAAa,GAAG,IAAI,CAAC,cAAc;YACpD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;QAG3E,IAAI,IAAI,CAAC,cAAc,IAAI,aAAa,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YACrE,uBAAuB,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC/E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;YAG5C,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SAC9E;;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;YAC/B,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;YACrC,GAAG,CAAC,QAAQ,GAAG,KAAK,KAAK,aAAa,CAAC;;;YAGvC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACjE,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;aACpD;SACJ,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,cAAc,KAAK,aAAa,EAAE;YACvC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;KACJ;;;;IAID,kBAAkB,GAAG;QACjB,IAAI,CAAC,qBAAqB,EAAE,CAAC;;;QAG7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM;YACxD,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C,CAAC,CAAC;KACN;;;;IAID,WAAW,GAAG;QACV,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;KAC5C;;;;;;IAMD,kBAAkB,GAAG;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;;;;;IAKD,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;KACzD;;;;;IAKD,kBAAkB,CAAC,KAAK,EAAE;QACtB,uBAAuB,KAAK,GAAG,IAAI,iBAAiB,CAAC;QACrD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAC3C;QACD,OAAO,KAAK,CAAC;KAChB;;;;;;;;IAQD,qBAAqB,GAAG;QACpB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;SAC5C;QACD,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;YACzI,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C,CAAC,CAAC;KACN;;;;;;IAMD,cAAc,CAAC,CAAC,EAAE;QACd,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAChD;;;;;;IAMD,gBAAgB,CAAC,CAAC,EAAE;QAChB,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAClD;;;;;;;IAOD,wBAAwB,CAAC,SAAS,EAAE;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACrD,OAAO;SACV;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;;;QAGzG,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;SAC3F;KACJ;;;;;IAKD,2BAA2B,GAAG;QAC1B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,CAAC;QAC7E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;KAC7E;CACJ;AACD,WAAW,CAAC,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,eAAe;gBACxC,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,oxCAAoxC;gBAC9xC,MAAM,EAAE,CAAC,giCAAgiC,CAAC;gBAC1iC,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,mBAAmB,EAAE,KAAK;gBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,MAAM,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC;gBAClC,IAAI,EAAE;oBACF,OAAO,EAAE,eAAe;oBACxB,sCAAsC,EAAE,eAAe;oBACvD,uCAAuC,EAAE,4BAA4B;iBACxE;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,WAAW,CAAC,cAAc,GAAG,MAAM;IAC/B,EAAE,IAAI,EAAE,SAAS,GAAG;IACpB,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,iBAAiB,GAAG;CAC/B,CAAC;AACF,WAAW,CAAC,cAAc,GAAG;IACzB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE;IACtD,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE;IACpE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACnC,0BAA0B,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,oBAAoB,EAAE,EAAE,EAAE;IAC7E,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACnC,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACpC,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACrC,qBAAqB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC1C,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAClC,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACxC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;CACtC,CAAC,AACF,AA2EC,AACD;;AC/YA;;;AAGA,AAAO,MAAM,sBAAsB,CAAC;CACnC;AACD,AAAO,MAAuB,4BAA4B,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;;;;;AAKnG,AAAO,MAAM,kBAAkB,SAAS,4BAA4B,CAAC;;;;IAIjE,WAAW,CAAC,UAAU,EAAE;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAChC;;;;;IAKD,KAAK,GAAG;QACJ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACzC;;;;IAID,aAAa,GAAG;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;KACnD;;;;IAID,cAAc,GAAG;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;KACpD;CACJ;AACD,kBAAkB,CAAC,UAAU,GAAG;IAC5B,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACd,QAAQ,EAAE,sBAAsB;gBAChC,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,IAAI,EAAE;oBACF,0BAA0B,EAAE,UAAU;iBACzC;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,kBAAkB,CAAC,cAAc,GAAG,MAAM;IACtC,EAAE,IAAI,EAAE,UAAU,GAAG;CACxB,CAAC,AACF,AAUC,AACD;;ACvDA;;;;AAIA,MAAM,sBAAsB,GAAG,EAAE,CAAC;;;;AAIlC,AAAO,MAAM,gBAAgB,CAAC;CAC7B;AACD,AAAO,MAAuB,sBAAsB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;;;;;;;;AAQ5F,AAAO,MAAM,YAAY,SAAS,sBAAsB,CAAC;;;;;;;;IAQrD,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,IAAI,EAAE;QAC1E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;;;QAIjB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;;QAIrB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;;;;QAIzB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;;;;QAInC,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC;;;;QAIzC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;;;;QAIrC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;;;;QAIhC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;;;;QAIxB,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,EAAE,CAAC;;;;QAI7C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KAC1C;;;;;IAKD,IAAI,aAAa,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAKnD,IAAI,aAAa,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC5B;;;;IAID,qBAAqB,GAAG;;QAEpB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACnD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACjD,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;;;QAGD,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;;;QAGD,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;KACJ;;;;;IAKD,cAAc,CAAC,KAAK,EAAE;QAClB,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,WAAW;gBACZ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM;YACV,KAAK,UAAU;gBACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,MAAM;YACV,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACN,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;SACb;KACJ;;;;;IAKD,kBAAkB,GAAG;QACjB,uBAAuB,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAGA,EAAY,CAAC,IAAI,CAAC,CAAC;QACrF,uBAAuB,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM;YACjF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC,CAAC,CAAC;KACN;;;;IAID,WAAW,GAAG;QACV,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACrC;;;;;IAKD,iBAAiB,GAAG;QAChB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KAC1C;;;;;IAKD,iBAAiB,GAAG;QAChB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACnC;;;;;;IAMD,IAAI,UAAU,CAAC,KAAK,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;YACzD,OAAO;SACV;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC5B;;;;;IAKD,IAAI,UAAU,GAAG,EAAE,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;;;;;IAO7C,aAAa,CAAC,KAAK,EAAE;QACjB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,OAAO,IAAI,CAAC;SACf;QACD,uBAAuB,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC/F,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;KACjC;;;;;;;IAOD,YAAY,CAAC,QAAQ,EAAE;QACnB,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;;;;YAIhD,uBAAuB,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAC1E,uBAAuB,GAAG,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACxD,IAAI,GAAG,IAAI,KAAK,EAAE;gBACd,WAAW,CAAC,UAAU,GAAG,CAAC,CAAC;aAC9B;iBACI;gBACD,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;aAC9E;SACJ;KACJ;;;;;;;IAOD,UAAU,CAAC,MAAM,EAAE;QACf,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,uBAAuB,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5D,KAAK,qBAAqB,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE;gBAC5F,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;oBACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACpB,OAAO;iBACV;aACJ;SACJ;KACJ;;;;;IAKD,aAAa,GAAG;QACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjE;;;;;IAKD,iBAAiB,GAAG;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACjE;;;;;IAKD,mBAAmB,GAAG;QAClB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;KACjE;;;;;IAKD,wBAAwB,GAAG;QACvB,uBAAuB,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC5D,uBAAuB,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,KAAK,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;QAC5G,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;KAC3G;;;;;;IAMD,IAAI,cAAc,CAAC,CAAC,EAAE;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;;;QAG9E,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;;;;IAID,IAAI,cAAc,GAAG,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;;;;;;;;;;;IAWrD,aAAa,CAAC,SAAS,EAAE;QACrB,uBAAuB,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;;QAErF,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;KAC5E;;;;;;;;;IASD,cAAc,CAAC,UAAU,EAAE;QACvB,uBAAuB,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAC9G,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO;SACV;;QAED,uBAAuB,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;QACrF,qBAAqB,cAAc,mBAAmB,aAAa,CAAC;QACpE,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,KAAK,EAAE;YACrC,cAAc,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;YAC/C,aAAa,GAAG,cAAc,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;SACnE;aACI;YACD,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;YACxF,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;SACnE;QACD,uBAAuB,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9D,uBAAuB,eAAe,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QAC1E,IAAI,cAAc,GAAG,gBAAgB,EAAE;;YAEnC,IAAI,CAAC,cAAc,IAAI,gBAAgB,GAAG,cAAc,GAAG,sBAAsB,CAAC;SACrF;aACI,IAAI,aAAa,GAAG,eAAe,EAAE;;YAEtC,IAAI,CAAC,cAAc,IAAI,aAAa,GAAG,eAAe,GAAG,sBAAsB,CAAC;SACnF;KACJ;;;;;;;;;;IAUD,uBAAuB,GAAG;QACtB,uBAAuB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QACxH,IAAI,CAAC,SAAS,EAAE;YACZ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;SAC3B;QACD,IAAI,SAAS,KAAK,IAAI,CAAC,uBAAuB,EAAE;YAC5C,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;KAC5C;;;;;;;;;;;IAWD,uBAAuB,GAAG;;QAEtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/E,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KAC1C;;;;;;;;;IASD,qBAAqB,GAAG;QACpB,uBAAuB,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC;QACjF,uBAAuB,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;QACrF,OAAO,CAAC,eAAe,GAAG,UAAU,KAAK,CAAC,CAAC;KAC9C;;;;;IAKD,yBAAyB,GAAG;QACxB,uBAAuB,oBAAoB,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM;YAC3F,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,aAAa;YAC1E,IAAI,CAAC;QACT,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;KACrD;CACJ;AACD,YAAY,CAAC,UAAU,GAAG;IACtB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,gBAAgB;gBACzC,QAAQ,EAAE,89BAA89B;gBACx+B,MAAM,EAAE,CAAC,mwDAAmwD,CAAC;gBAC7wD,MAAM,EAAE,CAAC,eAAe,CAAC;gBACzB,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,mBAAmB,EAAE,KAAK;gBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,IAAI,EAAE;oBACF,OAAO,EAAE,gBAAgB;oBACzB,oDAAoD,EAAE,yBAAyB;oBAC/E,4BAA4B,EAAE,gCAAgC;iBACjE;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,YAAY,CAAC,cAAc,GAAG,MAAM;IAChC,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,SAAS,GAAG;IACpB,EAAE,IAAI,EAAE,iBAAiB,GAAG;IAC5B,EAAE,IAAI,EAAE,aAAa,GAAG;IACxB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC9D,CAAC;AACF,YAAY,CAAC,cAAc,GAAG;IAC1B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,EAAE;IAC3E,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE;IACrD,mBAAmB,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,EAAE;IACxE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE;IACtD,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACnC,oBAAoB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACzC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;CACtC,CAAC,AACF,AAsFC,AACD;;ACpgBA;;;AAGA,AAAO,MAAM,aAAa,CAAC;;;;;IAKvB,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAClC;CACJ;AACD,AAMA,AAAO,MAAuB,mBAAmB,GAAG,kBAAkB,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;;;;;AAK7G,AAAO,MAAM,SAAS,SAAS,mBAAmB,CAAC;;;;;;;;;IAS/C,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE;QACjF,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;;;;QAIrC,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;;;;;IAKD,IAAI,eAAe,GAAG,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;;;;;IAKvD,IAAI,eAAe,CAAC,KAAK,EAAE;QACvB,qBAAqB,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SACrE;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KACjC;;;;;IAKD,IAAI,aAAa,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAKnD,IAAI,aAAa,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;;;;;;IAMD,gBAAgB,CAAC,OAAO,EAAE;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC;QAC7D,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAClC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;SAC1C;KACJ;;;;IAID,kBAAkB,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM;YACjC,uBAAuB,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAGA,EAAY,CAAC,IAAI,CAAC,CAAC;YACrF,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;iBACnF,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;;;;;IAKD,qBAAqB,GAAG;QACpB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;SACnC;KACJ;;;;IAID,WAAW,GAAG;QACV,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC9B;;;;;IAKD,YAAY,GAAG;QACX,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;SACtE;KACJ;;;;;IAKD,qBAAqB,GAAG;QACpB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;SAC3E;KACJ;CACJ;AACD,SAAS,CAAC,UAAU,GAAG;IACnB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,mBAAmB;gBAC5C,QAAQ,EAAE,yBAAyB;gBACnC,MAAM,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC;gBAClC,QAAQ,EAAE,gIAAgI;gBAC1I,MAAM,EAAE,CAAC,qrBAAqrB,CAAC;gBAC/rB,IAAI,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBACpC,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,mBAAmB,EAAE,KAAK;gBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;aAClD,EAAE,EAAE;CAChB,CAAC;;;;AAIF,SAAS,CAAC,cAAc,GAAG,MAAM;IAC7B,EAAE,IAAI,EAAE,SAAS,GAAG;IACpB,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3D,EAAE,IAAI,EAAE,MAAM,GAAG;IACjB,EAAE,IAAI,EAAE,iBAAiB,GAAG;IAC5B,EAAE,IAAI,EAAE,aAAa,GAAG;CAC3B,CAAC;AACF,SAAS,CAAC,cAAc,GAAG;IACvB,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE;IACrD,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IACvG,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;CACxC,CAAC;AACF,AAuCA,AAAO,MAAM,cAAc,CAAC;CAC3B;AACD,AAAO,MAAuB,oBAAoB,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;;;;AAInF,AAAO,MAAM,UAAU,SAAS,oBAAoB,CAAC;;;;;;;;IAQjD,WAAW,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE;QAClE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;;;;QAI/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;;;;QAIvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;;QAG5B,IAAI,CAAC,cAAc,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;KACrF;;;;;IAKD,IAAI,MAAM,GAAG,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;;;;;IAKvC,IAAI,MAAM,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACtD;KACJ;;;;;IAKD,IAAI,aAAa,GAAG,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE;;;;;IAKnD,IAAI,aAAa,CAAC,KAAK,EAAE;QACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC;KAC/C;;;;;IAKD,IAAI,QAAQ,GAAG;QACX,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACjC;;;;IAID,WAAW,GAAG;;;QAGV,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACrC;CACJ;AACD,UAAU,CAAC,UAAU,GAAG;IACpB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACd,QAAQ,EAAE,8BAA8B;gBACxC,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,IAAI,EAAE;oBACF,OAAO,EAAE,cAAc;oBACvB,sBAAsB,EAAE,qBAAqB;oBAC7C,iBAAiB,EAAE,UAAU;oBAC7B,0BAA0B,EAAE,UAAU;oBACtC,8BAA8B,EAAE,QAAQ;iBAC3C;aACJ,EAAE,EAAE;CAChB,CAAC;;;;AAIF,UAAU,CAAC,cAAc,GAAG,MAAM;IAC9B,EAAE,IAAI,EAAE,SAAS,GAAG;IACpB,EAAE,IAAI,EAAE,UAAU,GAAG;IACrB,EAAE,IAAI,EAAE,MAAM,GAAG;IACjB,EAAE,IAAI,EAAE,QAAQ,GAAG;IACnB,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,yBAAyB,EAAE,EAAE,EAAE,EAAE;CAC/G,CAAC;AACF,UAAU,CAAC,cAAc,GAAG;IACxB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;CAC/B,CAAC,AACF,AA6BC,AACD;;AC1UO,MAAM,aAAa,CAAC;CAC1B;AACD,aAAa,CAAC,UAAU,GAAG;IACvB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACb,OAAO,EAAE;oBACL,YAAY;oBACZ,eAAe;oBACf,YAAY;oBACZ,eAAe;oBACf,eAAe;oBACf,oBAAoB;iBACvB;;gBAED,OAAO,EAAE;oBACL,eAAe;oBACf,WAAW;oBACX,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,UAAU;iBACb;gBACD,YAAY,EAAE;oBACV,WAAW;oBACX,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,kBAAkB;oBAClB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,YAAY;iBACf;gBACD,SAAS,EAAE,CAAC,uBAAuB,CAAC;aACvC,EAAE,EAAE;CAChB,CAAC;;;;AAIF,aAAa,CAAC,cAAc,GAAG,MAAM,EAAE,CAAC,AACxC,AAQC,AACD;;ACrEA;;GAEG,AACH,AACA,AACA,AACA,AACA,AAAqJ,AACrJ;;"}