{ "version": 3, "sources": ["src/app/_services/jumpbar.service.ts", "src/app/metadata-filter/filter-settings.ts", "src/app/_pipes/sort-field.pipe.ts", "src/app/_pipes/filter-field.pipe.ts", "src/app/_pipes/filter-comparison.pipe.ts", "src/app/metadata-filter/_components/metadata-filter-row/metadata-filter-row.component.ts", "src/app/metadata-filter/_components/metadata-filter-row/metadata-filter-row.component.html", "src/app/metadata-filter/_components/metadata-builder/metadata-builder.component.ts", "src/app/metadata-filter/_components/metadata-builder/metadata-builder.component.html", "src/app/metadata-filter/metadata-filter.component.ts", "src/app/metadata-filter/metadata-filter.component.html", "src/app/cards/card-detail-layout/card-detail-layout.component.ts", "src/app/cards/card-detail-layout/card-detail-layout.component.html"], "sourcesContent": ["import { Injectable } from '@angular/core';\r\nimport { JumpKey } from '../_models/jumpbar/jump-key';\r\n\r\nconst keySize = 25; // Height of the JumpBar button\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JumpbarService {\r\n\r\n resumeKeys: {[key: string]: string} = {};\r\n // Used for custom filtered urls\r\n resumeScroll: {[key: string]: number} = {};\r\n\r\n constructor() { }\r\n\r\n\r\n getResumeKey(key: string) {\r\n if (this.resumeKeys.hasOwnProperty(key)) return this.resumeKeys[key];\r\n return '';\r\n }\r\n\r\n getResumePosition(key: string) {\r\n if (this.resumeScroll.hasOwnProperty(key)) return this.resumeScroll[key];\r\n return 0;\r\n }\r\n\r\n saveResumeKey(key: string, value: string) {\r\n this.resumeKeys[key] = value;\r\n }\r\n\r\n saveScrollOffset(key: string, value: number) {\r\n this.resumeScroll[key] = value;\r\n }\r\n\r\n generateJumpBar(jumpBarKeys: Array, currentSize: number) {\r\n const fullSize = (jumpBarKeys.length * keySize);\r\n if (currentSize >= fullSize) {\r\n return [...jumpBarKeys];\r\n }\r\n\r\n const jumpBarKeysToRender: Array = [];\r\n const targetNumberOfKeys = parseInt(Math.floor(currentSize / keySize) + '', 10);\r\n const removeCount = jumpBarKeys.length - targetNumberOfKeys - 3;\r\n if (removeCount <= 0) return [...jumpBarKeys];\r\n\r\n const removalTimes = Math.ceil(removeCount / 2);\r\n const midPoint = Math.floor(jumpBarKeys.length / 2);\r\n jumpBarKeysToRender.push(jumpBarKeys[0]);\r\n this._removeFirstPartOfJumpBar(midPoint, removalTimes, jumpBarKeys, jumpBarKeysToRender);\r\n jumpBarKeysToRender.push(jumpBarKeys[midPoint]);\r\n this._removeSecondPartOfJumpBar(midPoint, removalTimes, jumpBarKeys, jumpBarKeysToRender);\r\n jumpBarKeysToRender.push(jumpBarKeys[jumpBarKeys.length - 1]);\r\n\r\n return jumpBarKeysToRender;\r\n }\r\n\r\n _removeSecondPartOfJumpBar(midPoint: number, numberOfRemovals: number = 1, jumpBarKeys: Array, jumpBarKeysToRender: Array) {\r\n const removedIndexes: Array = [];\r\n for(let removal = 0; removal < numberOfRemovals; removal++) {\r\n let min = 100000000;\r\n let minIndex = -1;\r\n for(let i = midPoint + 1; i < jumpBarKeys.length - 2; i++) {\r\n if (jumpBarKeys[i].size < min && !removedIndexes.includes(i)) {\r\n min = jumpBarKeys[i].size;\r\n minIndex = i;\r\n }\r\n }\r\n removedIndexes.push(minIndex);\r\n }\r\n for(let i = midPoint + 1; i < jumpBarKeys.length - 2; i++) {\r\n if (!removedIndexes.includes(i)) jumpBarKeysToRender.push(jumpBarKeys[i]);\r\n }\r\n }\r\n\r\n _removeFirstPartOfJumpBar(midPoint: number, numberOfRemovals: number = 1, jumpBarKeys: Array, jumpBarKeysToRender: Array) {\r\n const removedIndexes: Array = [];\r\n for(let removal = 0; removal < numberOfRemovals; removal++) {\r\n let min = 100000000;\r\n let minIndex = -1;\r\n for(let i = 1; i < midPoint; i++) {\r\n if (jumpBarKeys[i].size < min && !removedIndexes.includes(i)) {\r\n min = jumpBarKeys[i].size;\r\n minIndex = i;\r\n }\r\n }\r\n removedIndexes.push(minIndex);\r\n }\r\n\r\n for(let i = 1; i < midPoint; i++) {\r\n if (!removedIndexes.includes(i)) jumpBarKeysToRender.push(jumpBarKeys[i]);\r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param data An array of objects\r\n * @param keySelector A method to fetch a string from the object, which is used to classify the JumpKey\r\n * @returns \r\n */\r\n getJumpKeys(data :Array, keySelector: (data: any) => string) {\r\n const keys: {[key: string]: number} = {};\r\n data.forEach(obj => {\r\n let ch = keySelector(obj).charAt(0);\r\n if (/\\d|\\#|!|%|@|\\(|\\)|\\^|\\.|_|\\*/g.test(ch)) {\r\n ch = '#';\r\n }\r\n if (!keys.hasOwnProperty(ch)) {\r\n keys[ch] = 0;\r\n }\r\n keys[ch] += 1;\r\n });\r\n return Object.keys(keys).map(k => {\r\n return {\r\n key: k,\r\n size: keys[k],\r\n title: k.toUpperCase()\r\n }\r\n }).sort((a, b) => {\r\n if (a.key < b.key) return -1;\r\n if (a.key > b.key) return 1;\r\n return 0;\r\n });\r\n }\r\n}\r\n", "import { SeriesFilterV2 } from \"../_models/metadata/v2/series-filter-v2\";\r\n\r\nexport class FilterSettings {\r\n sortDisabled = false;\r\n presetsV2: SeriesFilterV2 | undefined;\r\n /**\r\n * The number of statements that can be on the filter. Set to 1 to disable adding more.\r\n */\r\n statementLimit: number = 0;\r\n saveDisabled: boolean = false;\r\n }\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport {SortField} from \"../_models/metadata/series-filter\";\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'sortField',\r\n standalone: true\r\n})\r\nexport class SortFieldPipe implements PipeTransform {\r\n\r\n constructor(private translocoService: TranslocoService) {\r\n }\r\n\r\n transform(value: SortField): string {\r\n switch (value) {\r\n case SortField.SortName:\r\n return this.translocoService.translate('sort-field-pipe.sort-name');\r\n case SortField.Created:\r\n return this.translocoService.translate('sort-field-pipe.created');\r\n case SortField.LastModified:\r\n return this.translocoService.translate('sort-field-pipe.last-modified');\r\n case SortField.LastChapterAdded:\r\n return this.translocoService.translate('sort-field-pipe.last-chapter-added');\r\n case SortField.TimeToRead:\r\n return this.translocoService.translate('sort-field-pipe.time-to-read');\r\n case SortField.ReleaseYear:\r\n return this.translocoService.translate('sort-field-pipe.release-year');\r\n case SortField.ReadProgress:\r\n return this.translocoService.translate('sort-field-pipe.read-progress');\r\n case SortField.AverageRating:\r\n return this.translocoService.translate('sort-field-pipe.average-rating');\r\n case SortField.Random:\r\n return this.translocoService.translate('sort-field-pipe.random');\r\n }\r\n\r\n }\r\n\r\n}\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FilterField } from 'src/app/_models/metadata/v2/filter-field';\r\nimport {translate} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'filterField',\r\n standalone: true\r\n})\r\nexport class FilterFieldPipe implements PipeTransform {\r\n\r\n transform(value: FilterField): string {\r\n switch (value) {\r\n case FilterField.AgeRating:\r\n return translate('filter-field-pipe.age-rating');\r\n case FilterField.Characters:\r\n return translate('filter-field-pipe.characters');\r\n case FilterField.CollectionTags:\r\n return translate('filter-field-pipe.collection-tags');\r\n case FilterField.Colorist:\r\n return translate('filter-field-pipe.colorist');\r\n case FilterField.CoverArtist:\r\n return translate('filter-field-pipe.cover-artist');\r\n case FilterField.Editor:\r\n return translate('filter-field-pipe.editor');\r\n case FilterField.Formats:\r\n return translate('filter-field-pipe.formats');\r\n case FilterField.Genres:\r\n return translate('filter-field-pipe.genres');\r\n case FilterField.Inker:\r\n return translate('filter-field-pipe.inker');\r\n case FilterField.Imprint:\r\n return translate('filter-field-pipe.imprint');\r\n case FilterField.Team:\r\n return translate('filter-field-pipe.team');\r\n case FilterField.Location:\r\n return translate('filter-field-pipe.location');\r\n case FilterField.Languages:\r\n return translate('filter-field-pipe.languages');\r\n case FilterField.Libraries:\r\n return translate('filter-field-pipe.libraries');\r\n case FilterField.Letterer:\r\n return translate('filter-field-pipe.letterer');\r\n case FilterField.PublicationStatus:\r\n return translate('filter-field-pipe.publication-status');\r\n case FilterField.Penciller:\r\n return translate('filter-field-pipe.penciller');\r\n case FilterField.Publisher:\r\n return translate('filter-field-pipe.publisher');\r\n case FilterField.ReadProgress:\r\n return translate('filter-field-pipe.read-progress');\r\n case FilterField.ReadTime:\r\n return translate('filter-field-pipe.read-time');\r\n case FilterField.ReleaseYear:\r\n return translate('filter-field-pipe.release-year');\r\n case FilterField.SeriesName:\r\n return translate('filter-field-pipe.series-name');\r\n case FilterField.Summary:\r\n return translate('filter-field-pipe.summary');\r\n case FilterField.Tags:\r\n return translate('filter-field-pipe.tags');\r\n case FilterField.Translators:\r\n return translate('filter-field-pipe.translators');\r\n case FilterField.UserRating:\r\n return translate('filter-field-pipe.user-rating');\r\n case FilterField.Writers:\r\n return translate('filter-field-pipe.writers');\r\n case FilterField.Path:\r\n return translate('filter-field-pipe.path');\r\n case FilterField.FilePath:\r\n return translate('filter-field-pipe.file-path');\r\n case FilterField.WantToRead:\r\n return translate('filter-field-pipe.want-to-read');\r\n case FilterField.ReadingDate:\r\n return translate('filter-field-pipe.read-date');\r\n case FilterField.AverageRating:\r\n return translate('filter-field-pipe.average-rating');\r\n default:\r\n throw new Error(`Invalid FilterField value: ${value}`);\r\n }\r\n }\r\n\r\n}\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FilterComparison } from 'src/app/_models/metadata/v2/filter-comparison';\r\nimport {translate} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'filterComparison',\r\n standalone: true\r\n})\r\nexport class FilterComparisonPipe implements PipeTransform {\r\n\r\n transform(value: FilterComparison): string {\r\n switch (value) {\r\n case FilterComparison.BeginsWith:\r\n return translate('filter-comparison-pipe.begins-with');\r\n case FilterComparison.Contains:\r\n return translate('filter-comparison-pipe.contains');\r\n case FilterComparison.Equal:\r\n return translate('filter-comparison-pipe.equal');\r\n case FilterComparison.GreaterThan:\r\n return translate('filter-comparison-pipe.greater-than');\r\n case FilterComparison.GreaterThanEqual:\r\n return translate('filter-comparison-pipe.greater-than-or-equal');\r\n case FilterComparison.LessThan:\r\n return translate('filter-comparison-pipe.less-than');\r\n case FilterComparison.LessThanEqual:\r\n return translate('filter-comparison-pipe.less-than-or-equal');\r\n case FilterComparison.Matches:\r\n return translate('filter-comparison-pipe.matches');\r\n case FilterComparison.NotContains:\r\n return translate('filter-comparison-pipe.does-not-contain');\r\n case FilterComparison.NotEqual:\r\n return translate('filter-comparison-pipe.not-equal');\r\n case FilterComparison.EndsWith:\r\n return translate('filter-comparison-pipe.ends-with');\r\n case FilterComparison.IsBefore:\r\n return translate('filter-comparison-pipe.is-before');\r\n case FilterComparison.IsAfter:\r\n return translate('filter-comparison-pipe.is-after');\r\n case FilterComparison.IsInLast:\r\n return translate('filter-comparison-pipe.is-in-last');\r\n case FilterComparison.IsNotInLast:\r\n return translate('filter-comparison-pipe.is-not-in-last');\r\n case FilterComparison.MustContains:\r\n return translate('filter-comparison-pipe.must-contains');\r\n default:\r\n throw new Error(`Invalid FilterComparison value: ${value}`);\r\n }\r\n }\r\n\r\n}\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {FilterStatement} from '../../../_models/metadata/v2/filter-statement';\r\nimport {BehaviorSubject, distinctUntilChanged, filter, map, Observable, of, startWith, switchMap} from 'rxjs';\r\nimport {MetadataService} from 'src/app/_services/metadata.service';\r\nimport {mangaFormatFilters} from 'src/app/_models/metadata/series-filter';\r\nimport {PersonRole} from 'src/app/_models/metadata/person';\r\nimport {LibraryService} from 'src/app/_services/library.service';\r\nimport {CollectionTagService} from 'src/app/_services/collection-tag.service';\r\nimport {FilterComparison} from 'src/app/_models/metadata/v2/filter-comparison';\r\nimport {allFields, FilterField} from 'src/app/_models/metadata/v2/filter-field';\r\nimport {AsyncPipe, NgForOf, NgIf, NgSwitch, NgSwitchCase, NgTemplateOutlet} from \"@angular/common\";\r\nimport {FilterFieldPipe} from \"../../../_pipes/filter-field.pipe\";\r\nimport {FilterComparisonPipe} from \"../../../_pipes/filter-comparison.pipe\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {Select2Module, Select2Option} from \"ng-select2-component\";\r\nimport {TagBadgeComponent} from \"../../../shared/tag-badge/tag-badge.component\";\r\nimport {\r\n NgbDate,\r\n NgbDateParserFormatter,\r\n NgbDatepicker,\r\n NgbInputDatepicker,\r\n NgbTooltip\r\n} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\nenum PredicateType {\r\n Text = 1,\r\n Number = 2,\r\n Dropdown = 3,\r\n Boolean = 4,\r\n Date = 5\r\n}\r\n\r\nclass FilterRowUi {\r\n unit = '';\r\n tooltip = ''\r\n constructor(unit: string = '', tooltip: string = '') {\r\n this.unit = unit;\r\n this.tooltip = tooltip;\r\n }\r\n}\r\n\r\nconst unitLabels: Map = new Map([\r\n [FilterField.ReadingDate, new FilterRowUi('unit-reading-date')],\r\n [FilterField.AverageRating, new FilterRowUi('unit-average-rating')],\r\n [FilterField.ReadProgress, new FilterRowUi('unit-reading-progress')],\r\n]);\r\n\r\nconst StringFields = [FilterField.SeriesName, FilterField.Summary, FilterField.Path, FilterField.FilePath];\r\nconst NumberFields = [FilterField.ReadTime, FilterField.ReleaseYear, FilterField.ReadProgress, FilterField.UserRating, FilterField.AverageRating];\r\nconst DropdownFields = [FilterField.PublicationStatus, FilterField.Languages, FilterField.AgeRating,\r\n FilterField.Translators, FilterField.Characters, FilterField.Publisher,\r\n FilterField.Editor, FilterField.CoverArtist, FilterField.Letterer,\r\n FilterField.Colorist, FilterField.Inker, FilterField.Penciller,\r\n FilterField.Writers, FilterField.Genres, FilterField.Libraries,\r\n FilterField.Formats, FilterField.CollectionTags, FilterField.Tags,\r\n FilterField.Imprint, FilterField.Team, FilterField.Location\r\n];\r\nconst BooleanFields = [FilterField.WantToRead];\r\nconst DateFields = [FilterField.ReadingDate];\r\n\r\nconst DropdownFieldsWithoutMustContains = [\r\n FilterField.Libraries, FilterField.Formats, FilterField.AgeRating, FilterField.PublicationStatus\r\n];\r\nconst DropdownFieldsThatIncludeNumberComparisons = [\r\n FilterField.AgeRating\r\n];\r\nconst NumberFieldsThatIncludeDateComparisons = [\r\n FilterField.ReleaseYear\r\n];\r\n\r\nconst StringComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.BeginsWith,\r\n FilterComparison.EndsWith,\r\n FilterComparison.Matches];\r\nconst DateComparisons = [\r\n FilterComparison.IsBefore,\r\n FilterComparison.IsAfter,\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,];\r\nconst NumberComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.LessThan,\r\n FilterComparison.LessThanEqual,\r\n FilterComparison.GreaterThan,\r\n FilterComparison.GreaterThanEqual];\r\nconst DropdownComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.Contains,\r\n FilterComparison.NotContains,\r\n FilterComparison.MustContains];\r\nconst BooleanComparisons = [\r\n FilterComparison.Equal\r\n]\r\n\r\n@Component({\r\n selector: 'app-metadata-row-filter',\r\n templateUrl: './metadata-filter-row.component.html',\r\n styleUrls: ['./metadata-filter-row.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n AsyncPipe,\r\n FilterFieldPipe,\r\n FilterComparisonPipe,\r\n NgSwitch,\r\n NgSwitchCase,\r\n NgForOf,\r\n NgIf,\r\n Select2Module,\r\n NgTemplateOutlet,\r\n TagBadgeComponent,\r\n NgbTooltip,\r\n TranslocoDirective,\r\n NgbDatepicker,\r\n NgbInputDatepicker\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MetadataFilterRowComponent implements OnInit {\r\n\r\n @Input() index: number = 0; // This is only for debugging\r\n /**\r\n * Slightly misleading as this is the initial state and will be updated on the filterStatement event emitter\r\n */\r\n @Input() preset!: FilterStatement;\r\n @Input() availableFields: Array = allFields;\r\n @Output() filterStatement = new EventEmitter();\r\n\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly dateParser = inject(NgbDateParserFormatter);\r\n\r\n formGroup: FormGroup = new FormGroup({\r\n 'comparison': new FormControl(FilterComparison.Equal, []),\r\n 'filterValue': new FormControl('', []),\r\n });\r\n validComparisons$: BehaviorSubject = new BehaviorSubject([FilterComparison.Equal] as FilterComparison[]);\r\n predicateType$: BehaviorSubject = new BehaviorSubject(PredicateType.Text as PredicateType);\r\n dropdownOptions$ = of([]);\r\n\r\n loaded: boolean = false;\r\n protected readonly PredicateType = PredicateType;\r\n\r\n get UiLabel(): FilterRowUi | null {\r\n const field = parseInt(this.formGroup.get('input')!.value, 10) as FilterField;\r\n if (!unitLabels.has(field)) return null;\r\n return unitLabels.get(field) as FilterRowUi;\r\n }\r\n\r\n get MultipleDropdownAllowed() {\r\n const comp = parseInt(this.formGroup.get('comparison')?.value, 10) as FilterComparison;\r\n return comp === FilterComparison.Contains || comp === FilterComparison.NotContains || comp === FilterComparison.MustContains;\r\n }\r\n\r\n constructor(private readonly metadataService: MetadataService, private readonly libraryService: LibraryService,\r\n private readonly collectionTagService: CollectionTagService) {}\r\n\r\n ngOnInit() {\r\n this.formGroup.addControl('input', new FormControl(FilterField.SeriesName, []));\r\n\r\n this.formGroup.get('input')?.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe((val: string) => this.handleFieldChange(val));\r\n this.populateFromPreset();\r\n\r\n this.formGroup.get('filterValue')?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\r\n\r\n // Dropdown dynamic option selection\r\n this.dropdownOptions$ = this.formGroup.get('input')!.valueChanges.pipe(\r\n startWith(this.preset.value),\r\n distinctUntilChanged(),\r\n filter(() => {\r\n const inputVal = parseInt(this.formGroup.get('input')?.value, 10) as FilterField;\r\n return DropdownFields.includes(inputVal);\r\n }),\r\n switchMap((_) => this.getDropdownObservable()),\r\n takeUntilDestroyed(this.destroyRef)\r\n );\r\n\r\n\r\n this.formGroup!.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe(_ => {\r\n this.propagateFilterUpdate();\r\n });\r\n\r\n this.loaded = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n propagateFilterUpdate() {\r\n const stmt = {\r\n comparison: parseInt(this.formGroup.get('comparison')?.value, 10) as FilterComparison,\r\n field: parseInt(this.formGroup.get('input')?.value, 10) as FilterField,\r\n value: this.formGroup.get('filterValue')?.value!\r\n };\r\n\r\n if (typeof stmt.value === 'object' && DateFields.includes(stmt.field)) {\r\n stmt.value = this.dateParser.format(stmt.value);\r\n }\r\n\r\n // Some ids can get through and be numbers, convert them to strings for the backend\r\n if (typeof stmt.value === 'number' && !Number.isNaN(stmt.value)) {\r\n stmt.value = stmt.value + '';\r\n }\r\n\r\n if (typeof stmt.value === 'boolean') {\r\n stmt.value = stmt.value + '';\r\n }\r\n\r\n if (!stmt.value && (![FilterField.SeriesName, FilterField.Summary].includes(stmt.field) && !BooleanFields.includes(stmt.field))) return;\r\n this.filterStatement.emit(stmt);\r\n }\r\n\r\n populateFromPreset() {\r\n const val = this.preset.value === \"undefined\" || !this.preset.value ? '' : this.preset.value;\r\n this.formGroup.get('comparison')?.patchValue(this.preset.comparison);\r\n this.formGroup.get('input')?.patchValue(this.preset.field);\r\n\r\n if (StringFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else if (BooleanFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else if (DateFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(this.dateParser.parse(val));\r\n }\r\n else if (DropdownFields.includes(this.preset.field)) {\r\n if (this.MultipleDropdownAllowed || val.includes(',')) {\r\n this.formGroup.get('filterValue')?.patchValue(val.split(',').map(d => parseInt(d, 10)));\r\n } else {\r\n if (this.preset.field === FilterField.Languages) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else {\r\n this.formGroup.get('filterValue')?.patchValue(parseInt(val, 10));\r\n }\r\n }\r\n } else {\r\n this.formGroup.get('filterValue')?.patchValue(parseInt(val, 10));\r\n }\r\n\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n getDropdownObservable(): Observable {\r\n const filterField = parseInt(this.formGroup.get('input')?.value, 10) as FilterField;\r\n switch (filterField) {\r\n case FilterField.PublicationStatus:\r\n return this.metadataService.getAllPublicationStatus().pipe(map(pubs => pubs.map(pub => {\r\n return {value: pub.value, label: pub.title}\r\n })));\r\n case FilterField.AgeRating:\r\n return this.metadataService.getAllAgeRatings().pipe(map(ratings => ratings.map(rating => {\r\n return {value: rating.value, label: rating.title}\r\n })));\r\n case FilterField.Genres:\r\n return this.metadataService.getAllGenres().pipe(map(genres => genres.map(genre => {\r\n return {value: genre.id, label: genre.title}\r\n })));\r\n case FilterField.Languages:\r\n return this.metadataService.getAllLanguages().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.isoCode, label: status.title + ` (${status.isoCode})`}\r\n })));\r\n case FilterField.Formats:\r\n return of(mangaFormatFilters).pipe(map(statuses => statuses.map(status => {\r\n return {value: status.value, label: status.title}\r\n })));\r\n case FilterField.Libraries:\r\n return this.libraryService.getLibraries().pipe(map(libs => libs.map(lib => {\r\n return {value: lib.id, label: lib.name}\r\n })));\r\n case FilterField.Tags:\r\n return this.metadataService.getAllTags().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.id, label: status.title}\r\n })));\r\n case FilterField.CollectionTags:\r\n return this.collectionTagService.allCollections().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.id, label: status.title}\r\n })));\r\n case FilterField.Characters: return this.getPersonOptions(PersonRole.Character);\r\n case FilterField.Colorist: return this.getPersonOptions(PersonRole.Colorist);\r\n case FilterField.CoverArtist: return this.getPersonOptions(PersonRole.CoverArtist);\r\n case FilterField.Editor: return this.getPersonOptions(PersonRole.Editor);\r\n case FilterField.Inker: return this.getPersonOptions(PersonRole.Inker);\r\n case FilterField.Letterer: return this.getPersonOptions(PersonRole.Letterer);\r\n case FilterField.Penciller: return this.getPersonOptions(PersonRole.Penciller);\r\n case FilterField.Publisher: return this.getPersonOptions(PersonRole.Publisher);\r\n case FilterField.Imprint: return this.getPersonOptions(PersonRole.Imprint);\r\n case FilterField.Team: return this.getPersonOptions(PersonRole.Team);\r\n case FilterField.Location: return this.getPersonOptions(PersonRole.Location);\r\n case FilterField.Translators: return this.getPersonOptions(PersonRole.Translator);\r\n case FilterField.Writers: return this.getPersonOptions(PersonRole.Writer);\r\n }\r\n return of([]);\r\n }\r\n\r\n getPersonOptions(role: PersonRole) {\r\n return this.metadataService.getAllPeopleByRole(role).pipe(map(people => people.map(person => {\r\n return {value: person.id, label: person.name}\r\n })));\r\n }\r\n\r\n\r\n handleFieldChange(val: string) {\r\n const inputVal = parseInt(val, 10) as FilterField;\r\n\r\n if (StringFields.includes(inputVal)) {\r\n this.validComparisons$.next(StringComparisons);\r\n this.predicateType$.next(PredicateType.Text);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue('');\r\n this.formGroup.get('comparison')?.patchValue(StringComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (NumberFields.includes(inputVal)) {\r\n const comps = [...NumberComparisons];\r\n if (NumberFieldsThatIncludeDateComparisons.includes(inputVal)) {\r\n comps.push(...DateComparisons);\r\n }\r\n this.validComparisons$.next(comps);\r\n this.predicateType$.next(PredicateType.Number);\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(0);\r\n this.formGroup.get('comparison')?.patchValue(NumberComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (DateFields.includes(inputVal)) {\r\n this.validComparisons$.next(DateComparisons);\r\n this.predicateType$.next(PredicateType.Date);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(false);\r\n this.formGroup.get('comparison')?.patchValue(DateComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (BooleanFields.includes(inputVal)) {\r\n this.validComparisons$.next(BooleanComparisons);\r\n this.predicateType$.next(PredicateType.Boolean);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(false);\r\n this.formGroup.get('comparison')?.patchValue(BooleanComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (DropdownFields.includes(inputVal)) {\r\n let comps = [...DropdownComparisons];\r\n if (DropdownFieldsThatIncludeNumberComparisons.includes(inputVal)) {\r\n comps.push(...NumberComparisons);\r\n }\r\n if (DropdownFieldsWithoutMustContains.includes(inputVal)) {\r\n comps = comps.filter(c => c !== FilterComparison.MustContains);\r\n }\r\n this.validComparisons$.next(comps);\r\n this.predicateType$.next(PredicateType.Dropdown);\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(0);\r\n this.formGroup.get('comparison')?.patchValue(comps[0]);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n\r\n\r\n onDateSelect(event: NgbDate) {\r\n this.propagateFilterUpdate();\r\n }\r\n updateIfDateFilled() {\r\n this.propagateFilterUpdate();\r\n }\r\n\r\n}\r\n", "\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n {{t(UiLabel.unit)}}\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport {MetadataService} from 'src/app/_services/metadata.service';\r\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\r\nimport {SeriesFilterV2} from 'src/app/_models/metadata/v2/series-filter-v2';\r\nimport {NgForOf, NgIf, UpperCasePipe} from \"@angular/common\";\r\nimport {MetadataFilterRowComponent} from \"../metadata-filter-row/metadata-filter-row.component\";\r\nimport {FilterStatement} from \"../../../_models/metadata/v2/filter-statement\";\r\nimport {CardActionablesComponent} from \"../../../_single-module/card-actionables/card-actionables.component\";\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {FilterCombination} from \"../../../_models/metadata/v2/filter-combination\";\r\nimport {FilterUtilitiesService} from \"../../../shared/_services/filter-utilities.service\";\r\nimport {allFields} from \"../../../_models/metadata/v2/filter-field\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {distinctUntilChanged, tap} from \"rxjs/operators\";\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-metadata-builder',\r\n templateUrl: './metadata-builder.component.html',\r\n styleUrls: ['./metadata-builder.component.scss'],\r\n standalone: true,\r\n imports: [\r\n NgIf,\r\n MetadataFilterRowComponent,\r\n NgForOf,\r\n CardActionablesComponent,\r\n FormsModule,\r\n NgbTooltip,\r\n UpperCasePipe,\r\n ReactiveFormsModule,\r\n TranslocoDirective\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MetadataBuilderComponent implements OnInit {\r\n\r\n @Input({required: true}) filter!: SeriesFilterV2;\r\n /**\r\n * The number of statements that can be. 0 means unlimited. -1 means none.\r\n */\r\n @Input() statementLimit = 0;\r\n @Input() availableFilterFields = allFields;\r\n @Output() update: EventEmitter = new EventEmitter();\r\n @Output() apply: EventEmitter = new EventEmitter();\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly metadataService = inject(MetadataService);\r\n protected readonly utilityService = inject(UtilityService);\r\n protected readonly filterUtilityService = inject(FilterUtilitiesService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n protected readonly Breakpoint = Breakpoint;\r\n\r\n formGroup: FormGroup = new FormGroup({});\r\n\r\n groupOptions: Array<{value: FilterCombination, title: string}> = [\r\n {value: FilterCombination.Or, title: translate('metadata-builder.or')},\r\n {value: FilterCombination.And, title: translate('metadata-builder.and')},\r\n ];\r\n\r\n ngOnInit() {\r\n this.formGroup.addControl('comparison', new FormControl(this.filter?.combination || FilterCombination.Or, []));\r\n this.formGroup.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef), tap(values => {\r\n this.filter.combination = parseInt(this.formGroup.get('comparison')?.value, 10) as FilterCombination;\r\n this.update.emit(this.filter);\r\n })).subscribe();\r\n }\r\n\r\n addFilter() {\r\n this.filter.statements = [this.metadataService.createDefaultFilterStatement(), ...this.filter.statements];\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n removeFilter(index: number) {\r\n this.filter.statements = this.filter.statements.slice(0, index).concat(this.filter.statements.slice(index + 1))\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n updateFilter(index: number, filterStmt: FilterStatement) {\r\n this.metadataService.updateFilter(this.filter.statements, index, filterStmt);\r\n this.update.emit(this.filter);\r\n }\r\n\r\n}\r\n", "\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgbCollapse, NgbModal, NgbRating, NgbTooltip} from '@ng-bootstrap/ng-bootstrap';\r\nimport {Breakpoint, UtilityService} from '../shared/_services/utility.service';\r\nimport {Library} from '../_models/library/library';\r\nimport {allSortFields, FilterEvent, FilterItem, SortField} from '../_models/metadata/series-filter';\r\nimport {ToggleService} from '../_services/toggle.service';\r\nimport {FilterSettings} from './filter-settings';\r\nimport {SeriesFilterV2} from '../_models/metadata/v2/series-filter-v2';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {TypeaheadComponent} from '../typeahead/_components/typeahead.component';\r\nimport {DrawerComponent} from '../shared/drawer/drawer.component';\r\nimport {AsyncPipe, NgClass, NgForOf, NgIf, NgTemplateOutlet} from '@angular/common';\r\nimport {translate, TranslocoModule} from \"@ngneat/transloco\";\r\nimport {SortFieldPipe} from \"../_pipes/sort-field.pipe\";\r\nimport {MetadataBuilderComponent} from \"./_components/metadata-builder/metadata-builder.component\";\r\nimport {allFields} from \"../_models/metadata/v2/filter-field\";\r\nimport {MetadataService} from \"../_services/metadata.service\";\r\nimport {FilterUtilitiesService} from \"../shared/_services/filter-utilities.service\";\r\nimport {FilterService} from \"../_services/filter.service\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {\r\n Select2AutoCreateEvent,\r\n Select2Module,\r\n Select2Option,\r\n Select2UpdateEvent,\r\n Select2UpdateValue\r\n} from \"ng-select2-component\";\r\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nconst ANIMATION_SPEED = 750;\r\n\r\n@Component({\r\n selector: 'app-metadata-filter',\r\n templateUrl: './metadata-filter.component.html',\r\n styleUrls: ['./metadata-filter.component.scss'],\r\n animations: [\r\n trigger(\r\n 'inOutAnimation',\r\n [\r\n transition(\r\n ':enter',\r\n [\r\n style({ height: 0, opacity: 0 }),\r\n animate('.5s ease-out',\r\n style({ height: 300, opacity: 1 }))\r\n ]\r\n ),\r\n transition(\r\n ':leave',\r\n [\r\n style({ height: 300, opacity: 1 }),\r\n animate('.5s ease-in',\r\n style({ height: 0, opacity: 0 }))\r\n ]\r\n )\r\n ]\r\n ),\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgIf, NgbCollapse, NgTemplateOutlet, DrawerComponent, NgbTooltip, TypeaheadComponent,\r\n ReactiveFormsModule, FormsModule, NgbRating, AsyncPipe, TranslocoModule, SortFieldPipe,\r\n MetadataBuilderComponent, NgForOf, Select2Module, NgClass]\r\n})\r\nexport class MetadataFilterComponent implements OnInit {\r\n\r\n /**\r\n * This toggles the opening/collapsing of the metadata filter code\r\n */\r\n @Input() filterOpen: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Should filtering be shown on the page\r\n */\r\n @Input() filteringDisabled: boolean = false;\r\n\r\n @Input({required: true}) filterSettings!: FilterSettings;\r\n\r\n @Output() applyFilter: EventEmitter = new EventEmitter();\r\n\r\n @ContentChild('[ngbCollapse]') collapse!: NgbCollapse;\r\n private readonly destroyRef = inject(DestroyRef);\r\n public readonly utilityService = inject(UtilityService);\r\n public readonly filterUtilitiesService = inject(FilterUtilitiesService);\r\n\r\n\r\n /**\r\n * Controls the visibility of extended controls that sit below the main header.\r\n */\r\n filteringCollapsed: boolean = true;\r\n\r\n libraries: Array> = [];\r\n\r\n sortGroup!: FormGroup;\r\n isAscendingSort: boolean = true;\r\n\r\n updateApplied: number = 0;\r\n\r\n fullyLoaded: boolean = false;\r\n filterV2: SeriesFilterV2 | undefined;\r\n allSortFields = allSortFields;\r\n allFilterFields = allFields;\r\n\r\n smartFilters!: Array;\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly toastr = inject(ToastrService);\r\n\r\n\r\n constructor(public toggleService: ToggleService, private filterService: FilterService) {\r\n this.filterService.getAllFilters().subscribe(res => {\r\n this.smartFilters = res.map(r => {\r\n return {\r\n value: r,\r\n label: r.name,\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.filterSettings === undefined) {\r\n this.filterSettings = new FilterSettings();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.filterOpen) {\r\n this.filterOpen.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(openState => {\r\n this.filteringCollapsed = !openState;\r\n this.toggleService.set(!this.filteringCollapsed);\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n\r\n this.loadFromPresetsAndSetup();\r\n }\r\n\r\n // loadSavedFilter(event: Select2UpdateEvent) {\r\n // // Load the filter from the backend and update the screen\r\n // if (event.value === undefined || typeof(event.value) === 'string') return;\r\n // const smartFilter = event.value as SmartFilter;\r\n // this.filterV2 = this.filterUtilitiesService.decodeSeriesFilter(smartFilter.filter);\r\n // this.cdRef.markForCheck();\r\n // console.log('update event: ', event);\r\n // }\r\n //\r\n // createFilterValue(event: Select2AutoCreateEvent) {\r\n // // Create a new name and filter\r\n // if (!this.filterV2) return;\r\n // this.filterV2.name = event.value;\r\n // this.filterService.saveFilter(this.filterV2).subscribe(() => {\r\n //\r\n // const item = {\r\n // value: {\r\n // filter: this.filterUtilitiesService.encodeSeriesFilter(this.filterV2!),\r\n // name: event.value,\r\n // } as SmartFilter,\r\n // label: event.value\r\n // };\r\n // this.smartFilters.push(item);\r\n // this.sortGroup.get('name')?.setValue(item);\r\n // this.cdRef.markForCheck();\r\n // this.toastr.success(translate('toasts.smart-filter-updated'));\r\n // this.apply();\r\n // });\r\n //\r\n // console.log('create event: ', event);\r\n // }\r\n\r\n\r\n close() {\r\n this.filterOpen.emit(false);\r\n this.filteringCollapsed = true;\r\n this.toggleService.set(!this.filteringCollapsed);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n deepClone(obj: any): any {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.map(item => this.deepClone(item));\r\n }\r\n\r\n const clonedObj: any = {};\r\n\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n if (typeof obj[key] === 'object' && obj[key] !== null) {\r\n clonedObj[key] = this.deepClone(obj[key]);\r\n } else {\r\n clonedObj[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return clonedObj;\r\n }\r\n\r\n handleFilters(filter: SeriesFilterV2) {\r\n this.filterV2 = filter;\r\n }\r\n\r\n\r\n loadFromPresetsAndSetup() {\r\n this.fullyLoaded = false;\r\n\r\n this.filterV2 = this.deepClone(this.filterSettings.presetsV2);\r\n\r\n this.sortGroup = new FormGroup({\r\n sortField: new FormControl({value: this.filterV2?.sortOptions?.sortField || SortField.SortName, disabled: this.filterSettings.sortDisabled}, []),\r\n limitTo: new FormControl(this.filterV2?.limitTo || 0, []),\r\n name: new FormControl(this.filterV2?.name || '', [])\r\n });\r\n if (this.filterSettings?.presetsV2?.sortOptions) {\r\n this.isAscendingSort = this.filterSettings?.presetsV2?.sortOptions!.isAscending;\r\n }\r\n\r\n\r\n this.sortGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n if (this.filterV2?.sortOptions === null) {\r\n this.filterV2.sortOptions = {\r\n isAscending: this.isAscendingSort,\r\n sortField: parseInt(this.sortGroup.get('sortField')?.value, 10)\r\n };\r\n }\r\n this.filterV2!.sortOptions!.sortField = parseInt(this.sortGroup.get('sortField')?.value, 10);\r\n this.filterV2!.limitTo = Math.max(parseInt(this.sortGroup.get('limitTo')?.value || '0', 10), 0);\r\n this.filterV2!.name = this.sortGroup.get('name')?.value || '';\r\n this.cdRef.markForCheck();\r\n });\r\n\r\n this.fullyLoaded = true;\r\n this.apply();\r\n }\r\n\r\n\r\n updateSortOrder() {\r\n if (this.filterSettings.sortDisabled) return;\r\n this.isAscendingSort = !this.isAscendingSort;\r\n if (this.filterV2?.sortOptions === null) {\r\n this.filterV2.sortOptions = {\r\n isAscending: this.isAscendingSort,\r\n sortField: SortField.SortName\r\n }\r\n }\r\n\r\n this.filterV2!.sortOptions!.isAscending = this.isAscendingSort;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n clear() {\r\n // Apply any presets which will trigger the \"apply\"\r\n this.loadFromPresetsAndSetup();\r\n }\r\n\r\n apply() {\r\n this.applyFilter.emit({isFirst: this.updateApplied === 0, filterV2: this.filterV2!});\r\n\r\n if (this.utilityService.getActiveBreakpoint() === Breakpoint.Mobile && this.updateApplied !== 0) {\r\n this.toggleSelected();\r\n }\r\n\r\n this.updateApplied++;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n save() {\r\n if (!this.filterV2) return;\r\n this.filterV2.name = this.sortGroup.get('name')?.value;\r\n this.filterService.saveFilter(this.filterV2).subscribe(() => {\r\n this.toastr.success(translate('toasts.smart-filter-updated'));\r\n this.apply();\r\n });\r\n }\r\n\r\n toggleSelected() {\r\n this.toggleService.toggle();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n setToggle(event: any) {\r\n this.toggleService.set(!this.filteringCollapsed);\r\n }\r\n\r\n protected readonly Breakpoint = Breakpoint;\r\n}\r\n", "\r\n \r\n \r\n
= Breakpoint.Tablet; else mobileView\" [@inOutAnimation]>\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n {{t('filter-title')}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n Breakpoint.Tablet\" [ngTemplateOutlet]=\"buttons\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n", "import {CommonModule, DOCUMENT} from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n TrackByFunction,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {VirtualScrollerComponent, VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller';\r\nimport {FilterSettings} from 'src/app/metadata-filter/filter-settings';\r\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\r\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\r\nimport {JumpKey} from 'src/app/_models/jumpbar/jump-key';\r\nimport {Library} from 'src/app/_models/library/library';\r\nimport {Pagination} from 'src/app/_models/pagination';\r\nimport {FilterEvent, FilterItem, SortField} from 'src/app/_models/metadata/series-filter';\r\nimport {ActionItem} from 'src/app/_services/action-factory.service';\r\nimport {JumpbarService} from 'src/app/_services/jumpbar.service';\r\nimport {ScrollService} from 'src/app/_services/scroll.service';\r\nimport {LoadingComponent} from \"../../shared/loading/loading.component\";\r\n\r\n\r\nimport {NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {MetadataFilterComponent} from \"../../metadata-filter/metadata-filter.component\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\r\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\r\n\r\n\r\nconst ANIMATION_TIME_MS = 0;\r\n\r\n@Component({\r\n selector: 'app-card-detail-layout',\r\n standalone: true,\r\n imports: [CommonModule, LoadingComponent, VirtualScrollerModule, CardActionablesComponent, NgbTooltip, MetadataFilterComponent, TranslocoDirective],\r\n templateUrl: './card-detail-layout.component.html',\r\n styleUrls: ['./card-detail-layout.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CardDetailLayoutComponent implements OnInit, OnChanges {\r\n\r\n private readonly filterUtilityService = inject(FilterUtilitiesService);\r\n protected readonly utilityService = inject(UtilityService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly jumpbarService = inject(JumpbarService);\r\n private readonly router = inject(Router);\r\n private readonly scrollService = inject(ScrollService);\r\n\r\n @Input() header: string = '';\r\n @Input() isLoading: boolean = false;\r\n @Input() items: any[] = [];\r\n @Input() pagination!: Pagination;\r\n /**\r\n * Parent scroll for virtualize pagination\r\n */\r\n @Input() parentScroll!: Element | Window;\r\n\r\n // Filter Code\r\n @Input() filterOpen!: EventEmitter;\r\n /**\r\n * Should filtering be shown on the page\r\n */\r\n @Input() filteringDisabled: boolean = false;\r\n /**\r\n * Any actions to exist on the header for the parent collection (library, collection)\r\n */\r\n @Input() actions: ActionItem[] = [];\r\n /**\r\n * A trackBy to help with rendering. This is required as without it there are issues when scrolling\r\n */\r\n @Input({required: true}) trackByIdentity!: TrackByFunction;\r\n @Input() filterSettings!: FilterSettings;\r\n @Input() refresh!: EventEmitter;\r\n\r\n\r\n @Input() jumpBarKeys: Array = []; // This is approx 784 pixels tall, original keys\r\n jumpBarKeysToRender: Array = []; // What is rendered on screen\r\n\r\n @Output() itemClicked: EventEmitter = new EventEmitter();\r\n @Output() applyFilter: EventEmitter = new EventEmitter();\r\n\r\n @ContentChild('cardItem') itemTemplate!: TemplateRef;\r\n @ContentChild('noData') noDataTemplate!: TemplateRef;\r\n @ViewChild('.jump-bar') jumpBar!: ElementRef;\r\n\r\n @ViewChild(VirtualScrollerComponent) private virtualScroller!: VirtualScrollerComponent;\r\n\r\n filter: SeriesFilterV2 = this.filterUtilityService.createSeriesV2Filter();\r\n libraries: Array> = [];\r\n\r\n updateApplied: number = 0;\r\n hasResumedJumpKey: boolean = false;\r\n bufferAmount: number = 1;\r\n\r\n protected readonly Breakpoint = Breakpoint;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n\r\n @HostListener('window:resize', ['$event'])\r\n @HostListener('window:orientationchange', ['$event'])\r\n resizeJumpBar() {\r\n const currentSize = (this.document.querySelector('.viewport-container')?.getBoundingClientRect().height || 10) - 30;\r\n this.jumpBarKeysToRender = this.jumpbarService.generateJumpBar(this.jumpBarKeys, currentSize);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.trackByIdentity === undefined) {\r\n this.trackByIdentity = (_: number, item: any) => `${this.header}_${this.updateApplied}_${item?.libraryId}`;\r\n }\r\n\r\n if (this.filterSettings === undefined) {\r\n this.filterSettings = new FilterSettings();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.pagination === undefined) {\r\n this.pagination = {currentPage: 1, itemsPerPage: this.items.length, totalItems: this.items.length, totalPages: 1};\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.refresh) {\r\n this.refresh.subscribe(() => {\r\n this.cdRef.markForCheck();\r\n this.virtualScroller.refresh();\r\n });\r\n }\r\n }\r\n\r\n\r\n ngOnChanges(): void {\r\n this.jumpBarKeysToRender = [...this.jumpBarKeys];\r\n this.resizeJumpBar();\r\n\r\n // TODO: I wish I had signals so I can tap into when isLoading is false and trigger the scroll code\r\n\r\n // Don't resume jump key when there is a custom sort order, as it won't work\r\n if (!this.hasCustomSort()) {\r\n if (!this.hasResumedJumpKey && this.jumpBarKeysToRender.length > 0) {\r\n const resumeKey = this.jumpbarService.getResumeKey(this.router.url);\r\n if (resumeKey === '') return;\r\n const keys = this.jumpBarKeysToRender.filter(k => k.key === resumeKey);\r\n if (keys.length < 1) return;\r\n\r\n this.hasResumedJumpKey = true;\r\n setTimeout(() => this.scrollTo(keys[0]), 100);\r\n }\r\n }\r\n // else {\r\n // // I will come back and refactor this to work\r\n // // const scrollPosition = this.jumpbarService.getResumePosition(this.router.url);\r\n // // console.log('scroll position: ', scrollPosition);\r\n // // if (scrollPosition > 0) {\r\n // // setTimeout(() => this.virtualScroller.scrollToIndex(scrollPosition, true, 0, 1000), 100);\r\n // // }\r\n // }\r\n }\r\n\r\n hasCustomSort() {\r\n if (this.filteringDisabled) return false;\r\n const hasCustomSort = this.filter?.sortOptions?.sortField != SortField.SortName || !this.filter?.sortOptions.isAscending;\r\n const hasNonDefaultSortField = this.filterSettings?.presetsV2?.sortOptions?.sortField != SortField.SortName;\r\n\r\n return hasCustomSort;\r\n }\r\n\r\n performAction(action: ActionItem) {\r\n if (typeof action.callback === 'function') {\r\n action.callback(action, undefined);\r\n }\r\n }\r\n\r\n applyMetadataFilter(event: FilterEvent) {\r\n this.applyFilter.emit(event);\r\n this.updateApplied++;\r\n this.filter = event.filterV2;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n scrollTo(jumpKey: JumpKey) {\r\n if (this.hasCustomSort()) return;\r\n\r\n let targetIndex = 0;\r\n for(let i = 0; i < this.jumpBarKeys.length; i++) {\r\n if (this.jumpBarKeys[i].key === jumpKey.key) break;\r\n targetIndex += this.jumpBarKeys[i].size;\r\n }\r\n\r\n this.virtualScroller.scrollToIndex(targetIndex, true, 0, ANIMATION_TIME_MS);\r\n this.jumpbarService.saveResumeKey(this.router.url, jumpKey.key);\r\n // TODO: This doesn't work, we need the offset from virtual scroller\r\n this.jumpbarService.saveScrollOffset(this.router.url, this.scrollService.scrollPosition);\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n tryToSaveJumpKey(item: any) {\r\n let name = '';\r\n if (item.hasOwnProperty('name')) {\r\n name = item.name;\r\n } else if (item.hasOwnProperty('title')) {\r\n name = item.title;\r\n }\r\n this.jumpbarService.saveResumeKey(this.router.url, name.charAt(0));\r\n }\r\n}\r\n", "\r\n\r\n
0\">\r\n
\r\n

\r\n 0\" class=\"\">\r\n  \r\n \r\n 0\">\r\n {{header}} \r\n {{pagination.totalItems}}\r\n \r\n

\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n

\r\n \r\n

\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n = 4 && items.length > 0 && scroll.viewPortInfo.maxScrollPosition > 0\" [ngTemplateOutlet]=\"jumpBar\" [ngTemplateOutletContext]=\"{ id: 'jumpbar' }\">\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n

\r\n \r\n

\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n"], "mappings": "o4CAGA,IAAMA,GAAU,GAKHC,IAAc,IAAA,CAArB,IAAOA,EAAP,MAAOA,CAAc,CAMzBC,aAAA,CAJA,KAAAC,WAAsC,CAAA,EAEtC,KAAAC,aAAwC,CAAA,CAExB,CAGhBC,aAAaC,EAAW,CACtB,OAAI,KAAKH,WAAWI,eAAeD,CAAG,EAAU,KAAKH,WAAWG,CAAG,EAC5D,EACT,CAEAE,kBAAkBF,EAAW,CAC3B,OAAI,KAAKF,aAAaG,eAAeD,CAAG,EAAU,KAAKF,aAAaE,CAAG,EAChE,CACT,CAEAG,cAAcH,EAAaI,EAAa,CACtC,KAAKP,WAAWG,CAAG,EAAII,CACzB,CAEAC,iBAAiBL,EAAaI,EAAa,CACzC,KAAKN,aAAaE,CAAG,EAAII,CAC3B,CAEAE,gBAAgBC,EAA6BC,EAAmB,CAC9D,IAAMC,EAAYF,EAAYG,OAAShB,GACvC,GAAIc,GAAeC,EACjB,MAAO,CAAC,GAAGF,CAAW,EAGxB,IAAMI,EAAsC,CAAA,EACtCC,EAAqBC,SAASC,KAAKC,MAAMP,EAAcd,EAAO,EAAI,GAAI,EAAE,EACxEsB,EAAcT,EAAYG,OAASE,EAAqB,EAC9D,GAAII,GAAe,EAAG,MAAO,CAAC,GAAGT,CAAW,EAE5C,IAAMU,EAAeH,KAAKI,KAAKF,EAAc,CAAC,EACxCG,EAAWL,KAAKC,MAAMR,EAAYG,OAAS,CAAC,EAClDC,OAAAA,EAAoBS,KAAKb,EAAY,CAAC,CAAC,EACvC,KAAKc,0BAA0BF,EAAUF,EAAcV,EAAaI,CAAmB,EACvFA,EAAoBS,KAAKb,EAAYY,CAAQ,CAAC,EAC9C,KAAKG,2BAA2BH,EAAUF,EAAcV,EAAaI,CAAmB,EACxFA,EAAoBS,KAAKb,EAAYA,EAAYG,OAAS,CAAC,CAAC,EAErDC,CACT,CAEAW,2BAA2BH,EAAkBI,EAA2B,EAAGhB,EAA6BI,EAAmC,CACzI,IAAMa,EAAgC,CAAA,EACtC,QAAQC,EAAU,EAAGA,EAAUF,EAAkBE,IAAW,CAC1D,IAAIC,EAAM,IACNC,EAAW,GACf,QAAQC,EAAIT,EAAW,EAAGS,EAAIrB,EAAYG,OAAS,EAAGkB,IAChDrB,EAAYqB,CAAC,EAAEC,KAAOH,GAAO,CAACF,EAAeM,SAASF,CAAC,IACzDF,EAAMnB,EAAYqB,CAAC,EAAEC,KACrBF,EAAWC,GAGfJ,EAAeJ,KAAKO,CAAQ,CAC9B,CACA,QAAQC,EAAIT,EAAW,EAAGS,EAAIrB,EAAYG,OAAS,EAAGkB,IAC/CJ,EAAeM,SAASF,CAAC,GAAGjB,EAAoBS,KAAKb,EAAYqB,CAAC,CAAC,CAE5E,CAEAP,0BAA0BF,EAAkBI,EAA2B,EAAGhB,EAA6BI,EAAmC,CACxI,IAAMa,EAAgC,CAAA,EACtC,QAAQC,EAAU,EAAGA,EAAUF,EAAkBE,IAAW,CAC1D,IAAIC,EAAM,IACNC,EAAW,GACf,QAAQC,EAAI,EAAGA,EAAIT,EAAUS,IACvBrB,EAAYqB,CAAC,EAAEC,KAAOH,GAAO,CAACF,EAAeM,SAASF,CAAC,IACzDF,EAAMnB,EAAYqB,CAAC,EAAEC,KACrBF,EAAWC,GAGfJ,EAAeJ,KAAKO,CAAQ,CAC9B,CAEA,QAAQC,EAAI,EAAGA,EAAIT,EAAUS,IACtBJ,EAAeM,SAASF,CAAC,GAAGjB,EAAoBS,KAAKb,EAAYqB,CAAC,CAAC,CAE5E,CAQCG,YAAYC,EAAkBC,EAAkC,CAC/D,IAAMC,EAAgC,CAAA,EACtCF,OAAAA,EAAKG,QAAQC,GAAM,CACjB,IAAIC,EAAKJ,EAAYG,CAAG,EAAEE,OAAO,CAAC,EAC9B,gCAAgCC,KAAKF,CAAE,IACzCA,EAAK,KAEFH,EAAKjC,eAAeoC,CAAE,IACzBH,EAAKG,CAAE,EAAI,GAEbH,EAAKG,CAAE,GAAK,CACd,CAAC,EACMG,OAAON,KAAKA,CAAI,EAAEO,IAAIC,IACpB,CACL1C,IAAK0C,EACLb,KAAMK,EAAKQ,CAAC,EACZC,MAAOD,EAAEE,YAAW,GAEvB,EAAEC,KAAK,CAACC,EAAGC,IACND,EAAE9C,IAAM+C,EAAE/C,IAAY,GACtB8C,EAAE9C,IAAM+C,EAAE/C,IAAY,EACnB,CACR,CACH,yCAnHWL,EAAc,yBAAdA,EAAcqD,QAAdrD,EAAcsD,UAAAC,WAFb,MAAM,CAAA,EAEd,IAAOvD,EAAPwD,SAAOxD,CAAc,GAAA,ECNrB,IAAOyD,GAAP,KAAqB,CAA3BC,aAAA,CACI,KAAAC,aAAe,GAKf,KAAAC,eAAyB,EACzB,KAAAC,aAAwB,EAC1B,GCFF,IAAaC,IAAa,IAAA,CAApB,IAAOA,EAAP,MAAOA,CAAa,CAExBC,YAAoBC,EAAkC,CAAlC,KAAAA,iBAAAA,CACpB,CAEAC,UAAUC,EAAgB,CACxB,OAAQA,EAAK,CACX,KAAKC,EAAUC,SACb,OAAO,KAAKJ,iBAAiBK,UAAU,2BAA2B,EACpE,KAAKF,EAAUG,QACb,OAAO,KAAKN,iBAAiBK,UAAU,yBAAyB,EAClE,KAAKF,EAAUI,aACb,OAAO,KAAKP,iBAAiBK,UAAU,+BAA+B,EACxE,KAAKF,EAAUK,iBACb,OAAO,KAAKR,iBAAiBK,UAAU,oCAAoC,EAC7E,KAAKF,EAAUM,WACb,OAAO,KAAKT,iBAAiBK,UAAU,8BAA8B,EACvE,KAAKF,EAAUO,YACb,OAAO,KAAKV,iBAAiBK,UAAU,8BAA8B,EACvE,KAAKF,EAAUQ,aACb,OAAO,KAAKX,iBAAiBK,UAAU,+BAA+B,EACxE,KAAKF,EAAUS,cACb,OAAO,KAAKZ,iBAAiBK,UAAU,gCAAgC,EACzE,KAAKF,EAAUU,OACb,OAAO,KAAKb,iBAAiBK,UAAU,wBAAwB,CACnE,CAEF,yCA3BWP,GAAagB,EAAAC,GAAA,EAAA,CAAA,CAAA,yCAAbjB,EAAakB,KAAA,GAAAC,WAAA,EAAA,CAAA,EAApB,IAAOnB,EAAPoB,SAAOpB,CAAa,GAAA,ECA1B,IAAaqB,IAAe,IAAA,CAAtB,IAAOA,EAAP,MAAOA,CAAe,CAE1BC,UAAUC,EAAkB,CAC1B,OAAQA,EAAK,CACX,KAAKC,EAAYC,UACf,OAAOC,EAAU,8BAA8B,EACjD,KAAKF,EAAYG,WACf,OAAOD,EAAU,8BAA8B,EACjD,KAAKF,EAAYI,eACf,OAAOF,EAAU,mCAAmC,EACtD,KAAKF,EAAYK,SACf,OAAOH,EAAU,4BAA4B,EAC/C,KAAKF,EAAYM,YACf,OAAOJ,EAAU,gCAAgC,EACnD,KAAKF,EAAYO,OACf,OAAOL,EAAU,0BAA0B,EAC7C,KAAKF,EAAYQ,QACf,OAAON,EAAU,2BAA2B,EAC9C,KAAKF,EAAYS,OACf,OAAOP,EAAU,0BAA0B,EAC7C,KAAKF,EAAYU,MACf,OAAOR,EAAU,yBAAyB,EAC5C,KAAKF,EAAYW,QACf,OAAOT,EAAU,2BAA2B,EAC9C,KAAKF,EAAYY,KACf,OAAOV,EAAU,wBAAwB,EAC3C,KAAKF,EAAYa,SACf,OAAOX,EAAU,4BAA4B,EAC/C,KAAKF,EAAYc,UACf,OAAOZ,EAAU,6BAA6B,EAChD,KAAKF,EAAYe,UACf,OAAOb,EAAU,6BAA6B,EAChD,KAAKF,EAAYgB,SACf,OAAOd,EAAU,4BAA4B,EAC/C,KAAKF,EAAYiB,kBACf,OAAOf,EAAU,sCAAsC,EACzD,KAAKF,EAAYkB,UACf,OAAOhB,EAAU,6BAA6B,EAChD,KAAKF,EAAYmB,UACf,OAAOjB,EAAU,6BAA6B,EAChD,KAAKF,EAAYoB,aACf,OAAOlB,EAAU,iCAAiC,EACpD,KAAKF,EAAYqB,SACf,OAAOnB,EAAU,6BAA6B,EAChD,KAAKF,EAAYsB,YACf,OAAOpB,EAAU,gCAAgC,EACnD,KAAKF,EAAYuB,WACf,OAAOrB,EAAU,+BAA+B,EAClD,KAAKF,EAAYwB,QACf,OAAOtB,EAAU,2BAA2B,EAC9C,KAAKF,EAAYyB,KACf,OAAOvB,EAAU,wBAAwB,EAC3C,KAAKF,EAAY0B,YACf,OAAOxB,EAAU,+BAA+B,EAClD,KAAKF,EAAY2B,WACf,OAAOzB,EAAU,+BAA+B,EAClD,KAAKF,EAAY4B,QACf,OAAO1B,EAAU,2BAA2B,EAC9C,KAAKF,EAAY6B,KACf,OAAO3B,EAAU,wBAAwB,EAC3C,KAAKF,EAAY8B,SACf,OAAO5B,EAAU,6BAA6B,EAChD,KAAKF,EAAY+B,WACf,OAAO7B,EAAU,gCAAgC,EACnD,KAAKF,EAAYgC,YACf,OAAO9B,EAAU,6BAA6B,EAChD,KAAKF,EAAYiC,cACf,OAAO/B,EAAU,kCAAkC,EACrD,QACE,MAAM,IAAIgC,MAAM,8BAA8BnC,CAAK,EAAE,CACzD,CACF,yCAvEWF,EAAe,2CAAfA,EAAesC,KAAA,GAAAC,WAAA,EAAA,CAAA,EAAtB,IAAOvC,EAAPwC,SAAOxC,CAAe,GAAA,ECA5B,IAAayC,IAAoB,IAAA,CAA3B,IAAOA,EAAP,MAAOA,CAAoB,CAE/BC,UAAUC,EAAuB,CAC/B,OAAQA,EAAK,CACX,KAAKC,EAAiBC,WACpB,OAAOC,EAAU,oCAAoC,EACvD,KAAKF,EAAiBG,SACpB,OAAOD,EAAU,iCAAiC,EACpD,KAAKF,EAAiBI,MACpB,OAAOF,EAAU,8BAA8B,EACjD,KAAKF,EAAiBK,YACpB,OAAOH,EAAU,qCAAqC,EACxD,KAAKF,EAAiBM,iBACpB,OAAOJ,EAAU,8CAA8C,EACjE,KAAKF,EAAiBO,SACpB,OAAOL,EAAU,kCAAkC,EACrD,KAAKF,EAAiBQ,cACpB,OAAON,EAAU,2CAA2C,EAC9D,KAAKF,EAAiBS,QACpB,OAAOP,EAAU,gCAAgC,EACnD,KAAKF,EAAiBU,YACpB,OAAOR,EAAU,yCAAyC,EAC5D,KAAKF,EAAiBW,SACpB,OAAOT,EAAU,kCAAkC,EACrD,KAAKF,EAAiBY,SACpB,OAAOV,EAAU,kCAAkC,EACrD,KAAKF,EAAiBa,SACpB,OAAOX,EAAU,kCAAkC,EACrD,KAAKF,EAAiBc,QACpB,OAAOZ,EAAU,iCAAiC,EACpD,KAAKF,EAAiBe,SACpB,OAAOb,EAAU,mCAAmC,EACtD,KAAKF,EAAiBgB,YACpB,OAAOd,EAAU,uCAAuC,EAC1D,KAAKF,EAAiBiB,aACpB,OAAOf,EAAU,sCAAsC,EACzD,QACE,MAAM,IAAIgB,MAAM,mCAAmCnB,CAAK,EAAE,CAC9D,CACF,yCAvCWF,EAAoB,gDAApBA,EAAoBsB,KAAA,GAAAC,WAAA,EAAA,CAAA,EAA3B,IAAOvB,EAAPwB,SAAOxB,CAAoB,GAAA,mFEHbyB,EAAA,EAAA,SAAA,EAAA,EAA8DC,EAAA,CAAA,qBAAuBC,EAAA,0BAAvCC,EAAA,QAAAC,CAAA,EAAgBC,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAH,CAAA,CAAA,6BAM9DJ,EAAA,EAAA,SAAA,EAAA,EAAkFC,EAAA,CAAA,0BAAiCC,EAAA,0BAAtDC,EAAA,QAAAK,CAAA,EAAqBH,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,CAAA,CAAA,0BAO9EC,EAAA,CAAA,EACIC,EAAA,EAAA,QAAA,EAAA,8BAEJD,EAAA,CAAA,EACIC,EAAA,EAAA,QAAA,EAAA,8BAEJD,EAAA,CAAA,EACIC,EAAA,EAAA,QAAA,EAAA,0CAEJD,EAAA,CAAA,EACIT,EAAA,EAAA,MAAA,EAAA,EAAyB,EAAA,QAAA,GAAA,CAAA,EAMbW,EAAA,aAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAcF,EAAAG,aAAAN,CAAA,CAAoB,CAAA,CAAA,EAAC,OAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAC3BF,EAAAI,mBAAA,CAAoB,CAAA,CAAA,EANpCjB,EAAA,EAUAF,EAAA,EAAA,SAAA,EAAA,EAAoEW,EAAA,QAAA,UAAA,CAAAE,EAAAC,CAAA,EAAA,IAAAM,EAAAC,EAAA,CAAA,EAAA,OAAAJ,EAASG,EAAAE,OAAA,CAAU,CAAA,CAAA,EAAgBpB,EAAA,EAAS,6BAOhHqB,EAAA,CAAA,2BAEIb,EAAA,EAAA,UAAA,EAAA,2CAASP,EAAA,OAAAqB,CAAA,EAAgB,oBAAA,EAAA,EAEU,WAAAC,CAAA,EACE,iBAAA,EAAA,EACL,aAAA,EAAA,6BAPxChB,EAAA,CAAA,EACIiB,EAAA,EAAAC,GAAA,EAAA,EAAA,eAAA,EAAA,EAAiH,EAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,uCAAlGxB,EAAA,EAAAF,EAAA,mBAAA2B,CAAA,EAA4B,0BAAAC,GAAA,EAAAC,GAAAC,EAAAlB,EAAAmB,uBAAA,CAAA,6BAFnDzB,EAAA,CAAA,EACIiB,EAAA,EAAAS,GAAA,EAAA,EAAA,eAAA,EAAA,oCAAe9B,EAAA,EAAAF,EAAA,OAAAI,EAAA,EAAA,EAAAQ,EAAAqB,gBAAA,CAAA,6BA7B3B3B,EAAA,CAAA,EAA8D,EAAA,EAAA,EAEtDiB,EAAA,EAAAW,GAAA,EAAA,EAAA,eAAA,EAAA,EAAiD,EAAAC,GAAA,EAAA,EAAA,eAAA,EAAA,EAGE,EAAAC,GAAA,EAAA,EAAA,eAAA,EAAA,EAGC,EAAAC,GAAA,EAAA,EAAA,eAAA,EAAA,EAGH,EAAAC,GAAA,EAAA,EAAA,eAAA,EAAA,kCAVvCpC,EAAA,EAAAF,EAAA,WAAAuC,CAAA,EACKrC,EAAA,EAAAF,EAAA,eAAAY,EAAA4B,cAAAC,IAAA,EAGAvC,EAAA,EAAAF,EAAA,eAAAY,EAAA4B,cAAAE,MAAA,EAGAxC,EAAA,EAAAF,EAAA,eAAAY,EAAA4B,cAAAG,OAAA,EAGAzC,EAAA,EAAAF,EAAA,eAAAY,EAAA4B,cAAAI,IAAA,EAiBA1C,EAAA,EAAAF,EAAA,eAAAY,EAAA4B,cAAAK,QAAA,4BAqBnBtC,EAAA,EAAA,IAAA,EAAA,kCAA6EP,EAAA,aAAA8C,EAAAlC,EAAAmC,QAAAC,OAAA,CAAA,6BAFjF1C,EAAA,CAAA,EACIT,EAAA,EAAA,OAAA,EAAA,EAAyBC,EAAA,CAAA,EAAmBC,EAAA,EAC5CwB,EAAA,EAAA0B,GAAA,EAAA,EAAA,IAAA,EAAA,sCADyB/C,EAAA,CAAA,EAAAC,EAAA2C,EAAAlC,EAAAmC,QAAAG,IAAA,CAAA,EACrBhD,EAAA,EAAAF,EAAA,OAAAY,EAAAmC,QAAAC,OAAA,6BAjExB1C,EAAA,CAAA,EACIT,EAAA,EAAA,OAAA,CAAA,EAA8B,EAAA,MAAA,CAAA,EACL,EAAA,MAAA,CAAA,EACsB,EAAA,SAAA,CAAA,EAE/B0B,EAAA,EAAA4B,GAAA,EAAA,EAAA,SAAA,CAAA,EACJpD,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,CAAA,EAAuC,EAAA,SAAA,CAAA,EAE/B0B,EAAA,EAAA6B,GAAA,EAAA,EAAA,SAAA,CAAA,eACJrD,EAAA,EAAS,EAGbF,EAAA,GAAA,MAAA,EAAA,EACI0B,EAAA,GAAA8B,GAAA,EAAA,EAAA,eAAA,EAAA,gBA4CJtD,EAAA,EAEAF,EAAA,GAAA,MAAA,EAAA,EACI0B,EAAA,GAAA+B,GAAA,EAAA,EAAA,eAAA,EAAA,EAIJvD,EAAA,EAEAwD,GAAA,GAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EACJxD,EAAA,EAAM,sBArEJG,EAAA,EAAAF,EAAA,YAAAY,EAAA4C,SAAA,EAIoCtD,EAAA,CAAA,EAAAF,EAAA,UAAAY,EAAA6C,eAAA,EAMKvD,EAAA,CAAA,EAAAF,EAAA,UAAAI,EAAA,EAAA,EAAAQ,EAAA8C,iBAAA,CAAA,EAKpBxD,EAAA,CAAA,EAAAF,EAAA,OAAAI,EAAA,GAAA,EAAAQ,EAAA+C,cAAA,CAAA,EA+CAzD,EAAA,CAAA,EAAAF,EAAA,OAAAY,EAAAmC,UAAA,IAAA,GD3B/B,IAAKP,EAAL,SAAKA,EAAa,CAChBA,OAAAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OALGA,CAML,EANKA,GAAa,CAAA,CAAA,EAQZoB,GAAN,KAAiB,CAGfC,YAAYX,EAAe,GAAIF,EAAkB,GAAE,CAFnD,KAAAE,KAAO,GACP,KAAAF,QAAU,GAER,KAAKE,KAAOA,EACZ,KAAKF,QAAUA,CACjB,GAGIc,GAA4C,IAAIC,IAAI,CACtD,CAACC,EAAYC,YAAa,IAAIL,GAAY,mBAAmB,CAAC,EAC9D,CAACI,EAAYE,cAAe,IAAIN,GAAY,qBAAqB,CAAC,EAClE,CAACI,EAAYG,aAAc,IAAIP,GAAY,uBAAuB,CAAC,CAAC,CACvE,EAEKQ,GAAe,CAACJ,EAAYK,WAAYL,EAAYM,QAASN,EAAYO,KAAMP,EAAYQ,QAAQ,EACnGC,GAAe,CAACT,EAAYU,SAAUV,EAAYW,YAAaX,EAAYG,aAAcH,EAAYY,WAAYZ,EAAYE,aAAa,EAC1IW,GAAiB,CAACb,EAAYc,kBAAmBd,EAAYe,UAAWf,EAAYgB,UACtFhB,EAAYiB,YAAajB,EAAYkB,WAAYlB,EAAYmB,UAC7DnB,EAAYoB,OAAQpB,EAAYqB,YAAarB,EAAYsB,SACzDtB,EAAYuB,SAAUvB,EAAYwB,MAAOxB,EAAYyB,UACrDzB,EAAY0B,QAAS1B,EAAY2B,OAAQ3B,EAAY4B,UACrD5B,EAAY6B,QAAS7B,EAAY8B,eAAgB9B,EAAY+B,KAC7D/B,EAAYgC,QAAShC,EAAYiC,KAAMjC,EAAYkC,QAAQ,EAEzDC,GAAgB,CAACnC,EAAYoC,UAAU,EACvCC,GAAa,CAACrC,EAAYC,WAAW,EAErCqC,GAAoC,CACxCtC,EAAY4B,UAAW5B,EAAY6B,QAAS7B,EAAYgB,UAAWhB,EAAYc,iBAAiB,EAE5FyB,GAA6C,CACjDvC,EAAYgB,SAAS,EAEjBwB,GAAyC,CAC7CxC,EAAYW,WAAW,EAGnB8B,GAAoB,CACxBC,EAAiBC,MACjBD,EAAiBE,SACjBF,EAAiBG,WACjBH,EAAiBI,SACjBJ,EAAiBK,OAAO,EACpBC,GAAkB,CACtBN,EAAiBO,SACjBP,EAAiBQ,QACjBR,EAAiBC,MACjBD,EAAiBE,QAAQ,EACrBO,GAAoB,CACxBT,EAAiBC,MACjBD,EAAiBE,SACjBF,EAAiBU,SACjBV,EAAiBW,cACjBX,EAAiBY,YACjBZ,EAAiBa,gBAAgB,EAC7BC,GAAsB,CAC1Bd,EAAiBC,MACjBD,EAAiBE,SACjBF,EAAiBe,SACjBf,EAAiBgB,YACjBhB,EAAiBiB,YAAY,EACzBC,GAAqB,CACzBlB,EAAiBC,KAAK,EA2BXkB,IAA0B,IAAA,CAAjC,IAAOA,EAAP,MAAOA,CAA0B,CA0BrC,IAAI9E,SAAO,CACT,IAAM+E,EAAQC,SAAS,KAAKvE,UAAUwE,IAAI,OAAO,EAAGC,MAAO,EAAE,EAC7D,OAAKnE,GAAWoE,IAAIJ,CAAK,EAClBhE,GAAWkE,IAAIF,CAAK,EADQ,IAErC,CAEA,IAAI/F,yBAAuB,CACzB,IAAMoG,EAAOJ,SAAS,KAAKvE,UAAUwE,IAAI,YAAY,GAAGC,MAAO,EAAE,EACjE,OAAOE,IAASzB,EAAiBe,UAAYU,IAASzB,EAAiBgB,aAAeS,IAASzB,EAAiBiB,YAClH,CAEA9D,YAA6BuE,EAAmDC,EAC7DC,EAA0C,CADhC,KAAAF,gBAAAA,EAAmD,KAAAC,eAAAA,EAC7D,KAAAC,qBAAAA,EApCV,KAAAC,MAAgB,EAKhB,KAAA9E,gBAAsC+E,GACrC,KAAAC,gBAAkB,IAAIC,EAGf,KAAAC,MAAQC,EAAOC,CAAiB,EAChC,KAAAC,WAAaF,EAAOG,EAAU,EAC9B,KAAAC,WAAaJ,EAAOK,EAAsB,EAE3D,KAAAzF,UAAuB,IAAI0F,GAAU,CACnC,WAAc,IAAIC,EAA8BzC,EAAiBC,MAAO,CAAA,CAAE,EAC1E,YAAe,IAAIwC,EAA6B,GAAI,CAAA,CAAE,EACvD,EACD,KAAAzF,kBAAyD,IAAI0F,GAAgB,CAAC1C,EAAiBC,KAAK,CAAuB,EAC3H,KAAAhD,eAAiD,IAAIyF,GAAgB5G,EAAcC,IAAqB,EACxG,KAAAR,iBAAmBoH,GAAoB,CAAA,CAAE,EAEzC,KAAAC,OAAkB,GACC,KAAA9G,cAAgBA,CAc6B,CAEhE+G,UAAQ,CACN,KAAK/F,UAAUgG,WAAW,QAAS,IAAIL,EAAyBnF,EAAYK,WAAY,CAAA,CAAE,CAAC,EAE3F,KAAKb,UAAUwE,IAAI,OAAO,GAAGyB,aAAaC,KAAKC,GAAoB,EAAIC,EAAmB,KAAKd,UAAU,CAAC,EAAEe,UAAWC,GAAgB,KAAKC,kBAAkBD,CAAG,CAAC,EAClK,KAAKE,mBAAkB,EAEvB,KAAKxG,UAAUwE,IAAI,aAAa,GAAGyB,aAAaC,KAAKE,EAAmB,KAAKd,UAAU,CAAC,EAAEe,UAAS,EAGnG,KAAK5H,iBAAmB,KAAKuB,UAAUwE,IAAI,OAAO,EAAGyB,aAAaC,KAChEO,GAAU,KAAKC,OAAOjC,KAAK,EAC3B0B,GAAoB,EACpBQ,GAAO,IAAK,CACV,IAAMC,EAAWrC,SAAS,KAAKvE,UAAUwE,IAAI,OAAO,GAAGC,MAAO,EAAE,EAChE,OAAOpD,GAAewF,SAASD,CAAQ,CACzC,CAAC,EACDE,GAAWC,GAAM,KAAKC,sBAAqB,CAAE,EAC7CZ,EAAmB,KAAKd,UAAU,CAAC,EAIrC,KAAKtF,UAAWiG,aAAaC,KAAKC,GAAoB,EAAIC,EAAmB,KAAKd,UAAU,CAAC,EAAEe,UAAUU,GAAI,CAC3G,KAAKE,sBAAqB,CAC5B,CAAC,EAED,KAAKnB,OAAS,GACd,KAAKX,MAAM+B,aAAY,CACzB,CAEAD,uBAAqB,CACnB,IAAME,EAAO,CACXC,WAAY7C,SAAS,KAAKvE,UAAUwE,IAAI,YAAY,GAAGC,MAAO,EAAE,EAChEH,MAAOC,SAAS,KAAKvE,UAAUwE,IAAI,OAAO,GAAGC,MAAO,EAAE,EACtDA,MAAO,KAAKzE,UAAUwE,IAAI,aAAa,GAAGC,OAGxC,OAAO0C,EAAK1C,OAAU,UAAY5B,GAAWgE,SAASM,EAAK7C,KAAK,IAClE6C,EAAK1C,MAAQ,KAAKe,WAAW6B,OAAOF,EAAK1C,KAAK,GAI5C,OAAO0C,EAAK1C,OAAU,UAAY,CAACvF,OAAOoI,MAAMH,EAAK1C,KAAK,IAC5D0C,EAAK1C,MAAQ0C,EAAK1C,MAAQ,IAGxB,OAAO0C,EAAK1C,OAAU,YACxB0C,EAAK1C,MAAQ0C,EAAK1C,MAAQ,IAGxB,GAAC0C,EAAK1C,OAAU,CAAC,CAACjE,EAAYK,WAAYL,EAAYM,OAAO,EAAE+F,SAASM,EAAK7C,KAAK,GAAM,CAAC3B,GAAckE,SAASM,EAAK7C,KAAK,IAC9H,KAAKW,gBAAgBsC,KAAKJ,CAAI,CAChC,CAEAX,oBAAkB,CAChB,IAAMF,EAAM,KAAKI,OAAOjC,QAAU,aAAe,CAAC,KAAKiC,OAAOjC,MAAQ,GAAK,KAAKiC,OAAOjC,MACvF,KAAKzE,UAAUwE,IAAI,YAAY,GAAGgD,WAAW,KAAKd,OAAOU,UAAU,EACnE,KAAKpH,UAAUwE,IAAI,OAAO,GAAGgD,WAAW,KAAKd,OAAOpC,KAAK,EAErD1D,GAAaiG,SAAS,KAAKH,OAAOpC,KAAK,EACzC,KAAKtE,UAAUwE,IAAI,aAAa,GAAGgD,WAAWlB,CAAG,EACxC3D,GAAckE,SAAS,KAAKH,OAAOpC,KAAK,EACjD,KAAKtE,UAAUwE,IAAI,aAAa,GAAGgD,WAAWlB,CAAG,EACxCzD,GAAWgE,SAAS,KAAKH,OAAOpC,KAAK,EAC9C,KAAKtE,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,KAAKhC,WAAWiC,MAAMnB,CAAG,CAAC,EAEjEjF,GAAewF,SAAS,KAAKH,OAAOpC,KAAK,EAC5C,KAAK/F,yBAA2B+H,EAAIO,SAAS,GAAG,EAClD,KAAK7G,UAAUwE,IAAI,aAAa,GAAGgD,WAAWlB,EAAIoB,MAAM,GAAG,EAAEC,IAAIC,GAAKrD,SAASqD,EAAG,EAAE,CAAC,CAAC,EAElF,KAAKlB,OAAOpC,QAAU9D,EAAYe,UACpC,KAAKvB,UAAUwE,IAAI,aAAa,GAAGgD,WAAWlB,CAAG,EAEjD,KAAKtG,UAAUwE,IAAI,aAAa,GAAGgD,WAAWjD,SAAS+B,EAAK,EAAE,CAAC,EAInE,KAAKtG,UAAUwE,IAAI,aAAa,GAAGgD,WAAWjD,SAAS+B,EAAK,EAAE,CAAC,EAIjE,KAAKnB,MAAM+B,aAAY,CACzB,CAEAF,uBAAqB,CAEjB,OADoBzC,SAAS,KAAKvE,UAAUwE,IAAI,OAAO,GAAGC,MAAO,EAAE,EAChD,CACjB,KAAKjE,EAAYc,kBACf,OAAO,KAAKsD,gBAAgBiD,wBAAuB,EAAG3B,KAAKyB,EAAIG,GAAQA,EAAKH,IAAII,IACvE,CAACtD,MAAOsD,EAAItD,MAAOuD,MAAOD,EAAIE,KAAK,EAC3C,CAAC,CAAC,EACL,KAAKzH,EAAYgB,UACf,OAAO,KAAKoD,gBAAgBsD,iBAAgB,EAAGhC,KAAKyB,EAAIQ,GAAWA,EAAQR,IAAIS,IACtE,CAAC3D,MAAO2D,EAAO3D,MAAOuD,MAAOI,EAAOH,KAAK,EACjD,CAAC,CAAC,EACL,KAAKzH,EAAY2B,OACf,OAAO,KAAKyC,gBAAgByD,aAAY,EAAGnC,KAAKyB,EAAIW,GAAUA,EAAOX,IAAIY,IAChE,CAAC9D,MAAO8D,EAAMC,GAAIR,MAAOO,EAAMN,KAAK,EAC5C,CAAC,CAAC,EACL,KAAKzH,EAAYe,UACf,OAAO,KAAKqD,gBAAgB6D,gBAAe,EAAGvC,KAAKyB,EAAIe,GAAYA,EAASf,IAAIgB,IACvE,CAAClE,MAAOkE,EAAOC,QAASZ,MAAOW,EAAOV,MAAQ,KAAKU,EAAOC,OAAO,GAAG,EAC5E,CAAC,CAAC,EACL,KAAKpI,EAAY6B,QACf,OAAOwD,GAAGgD,EAAkB,EAAE3C,KAAKyB,EAAIe,GAAYA,EAASf,IAAIgB,IACvD,CAAClE,MAAOkE,EAAOlE,MAAOuD,MAAOW,EAAOV,KAAK,EACjD,CAAC,CAAC,EACL,KAAKzH,EAAY4B,UACf,OAAO,KAAKyC,eAAeiE,aAAY,EAAG5C,KAAKyB,EAAIoB,GAAQA,EAAKpB,IAAIqB,IAC3D,CAACvE,MAAOuE,EAAIR,GAAIR,MAAOgB,EAAIC,IAAI,EACvC,CAAC,CAAC,EACL,KAAKzI,EAAY+B,KACf,OAAO,KAAKqC,gBAAgBsE,WAAU,EAAGhD,KAAKyB,EAAIe,GAAYA,EAASf,IAAIgB,IAClE,CAAClE,MAAOkE,EAAOH,GAAIR,MAAOW,EAAOV,KAAK,EAC9C,CAAC,CAAC,EACL,KAAKzH,EAAY8B,eACf,OAAO,KAAKwC,qBAAqBqE,eAAc,EAAGjD,KAAKyB,EAAIe,GAAYA,EAASf,IAAIgB,IAC3E,CAAClE,MAAOkE,EAAOH,GAAIR,MAAOW,EAAOV,KAAK,EAC9C,CAAC,CAAC,EACL,KAAKzH,EAAYkB,WAAY,OAAO,KAAK0H,iBAAiBC,EAAWC,SAAS,EAC9E,KAAK9I,EAAYuB,SAAU,OAAO,KAAKqH,iBAAiBC,EAAWtH,QAAQ,EAC3E,KAAKvB,EAAYqB,YAAa,OAAO,KAAKuH,iBAAiBC,EAAWxH,WAAW,EACjF,KAAKrB,EAAYoB,OAAQ,OAAO,KAAKwH,iBAAiBC,EAAWzH,MAAM,EACvE,KAAKpB,EAAYwB,MAAO,OAAO,KAAKoH,iBAAiBC,EAAWrH,KAAK,EACrE,KAAKxB,EAAYsB,SAAU,OAAO,KAAKsH,iBAAiBC,EAAWvH,QAAQ,EAC3E,KAAKtB,EAAYyB,UAAW,OAAO,KAAKmH,iBAAiBC,EAAWpH,SAAS,EAC7E,KAAKzB,EAAYmB,UAAW,OAAO,KAAKyH,iBAAiBC,EAAW1H,SAAS,EAC7E,KAAKnB,EAAYgC,QAAS,OAAO,KAAK4G,iBAAiBC,EAAW7G,OAAO,EACzE,KAAKhC,EAAYiC,KAAM,OAAO,KAAK2G,iBAAiBC,EAAW5G,IAAI,EACnE,KAAKjC,EAAYkC,SAAU,OAAO,KAAK0G,iBAAiBC,EAAW3G,QAAQ,EAC3E,KAAKlC,EAAYiB,YAAa,OAAO,KAAK2H,iBAAiBC,EAAWE,UAAU,EAChF,KAAK/I,EAAY0B,QAAS,OAAO,KAAKkH,iBAAiBC,EAAWG,MAAM,CAC1E,CACA,OAAO3D,GAAG,CAAA,CAAE,CAChB,CAEAuD,iBAAiBK,EAAgB,CAC/B,OAAO,KAAK7E,gBAAgB8E,mBAAmBD,CAAI,EAAEvD,KAAKyB,EAAIgC,GAAUA,EAAOhC,IAAIiC,IAC1E,CAACnF,MAAOmF,EAAOpB,GAAIR,MAAO4B,EAAOX,IAAI,EAC7C,CAAC,CAAC,CACL,CAGA1C,kBAAkBD,EAAW,CAC3B,IAAMM,EAAWrC,SAAS+B,EAAK,EAAE,EAEjC,GAAI1F,GAAaiG,SAASD,CAAQ,EAAG,CACnC,KAAK1G,kBAAkB2J,KAAK5G,EAAiB,EAC7C,KAAK9C,eAAe0J,KAAK7K,EAAcC,IAAI,EAEvC,KAAK6G,SACP,KAAK9F,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,EAAE,EAChD,KAAKxH,UAAUwE,IAAI,YAAY,GAAGgD,WAAWvE,GAAkB,CAAC,CAAC,GAEnE,MACF,CAEA,GAAIhC,GAAa4F,SAASD,CAAQ,EAAG,CACnC,IAAMkD,EAAQ,CAAC,GAAGnG,EAAiB,EAC/BX,GAAuC6D,SAASD,CAAQ,GAC1DkD,EAAMC,KAAK,GAAGvG,EAAe,EAE/B,KAAKtD,kBAAkB2J,KAAKC,CAAK,EACjC,KAAK3J,eAAe0J,KAAK7K,EAAcE,MAAM,EACzC,KAAK4G,SACP,KAAK9F,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,CAAC,EAC/C,KAAKxH,UAAUwE,IAAI,YAAY,GAAGgD,WAAW7D,GAAkB,CAAC,CAAC,GAEnE,MACF,CAEA,GAAId,GAAWgE,SAASD,CAAQ,EAAG,CACjC,KAAK1G,kBAAkB2J,KAAKrG,EAAe,EAC3C,KAAKrD,eAAe0J,KAAK7K,EAAcI,IAAI,EAEvC,KAAK0G,SACP,KAAK9F,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,EAAK,EACnD,KAAKxH,UAAUwE,IAAI,YAAY,GAAGgD,WAAWhE,GAAgB,CAAC,CAAC,GAEjE,MACF,CAEA,GAAIb,GAAckE,SAASD,CAAQ,EAAG,CACpC,KAAK1G,kBAAkB2J,KAAKzF,EAAkB,EAC9C,KAAKjE,eAAe0J,KAAK7K,EAAcG,OAAO,EAE1C,KAAK2G,SACP,KAAK9F,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,EAAK,EACnD,KAAKxH,UAAUwE,IAAI,YAAY,GAAGgD,WAAWpD,GAAmB,CAAC,CAAC,GAEpE,MACF,CAEA,GAAI/C,GAAewF,SAASD,CAAQ,EAAG,CACrC,IAAIkD,EAAQ,CAAC,GAAG9F,EAAmB,EAC/BjB,GAA2C8D,SAASD,CAAQ,GAC9DkD,EAAMC,KAAK,GAAGpG,EAAiB,EAE7Bb,GAAkC+D,SAASD,CAAQ,IACrDkD,EAAQA,EAAMnD,OAAOqD,GAAKA,IAAM9G,EAAiBiB,YAAY,GAE/D,KAAKjE,kBAAkB2J,KAAKC,CAAK,EACjC,KAAK3J,eAAe0J,KAAK7K,EAAcK,QAAQ,EAC3C,KAAKyG,SACP,KAAK9F,UAAUwE,IAAI,aAAa,GAAGgD,WAAW,CAAC,EAC/C,KAAKxH,UAAUwE,IAAI,YAAY,GAAGgD,WAAWsC,EAAM,CAAC,CAAC,GAEvD,MACF,CACF,CAIAvM,aAAa0M,EAAc,CACzB,KAAKhD,sBAAqB,CAC5B,CACAzJ,oBAAkB,CAChB,KAAKyJ,sBAAqB,CAC5B,yCAjQW5C,GAA0B6F,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,EAAA,CAAA,CAAA,sBAA1BhG,EAA0BiG,UAAA,CAAA,CAAA,yBAAA,CAAA,EAAAC,OAAA,CAAAxF,MAAA,QAAA2B,OAAA,SAAAzG,gBAAA,iBAAA,EAAAuK,QAAA,CAAAvF,gBAAA,iBAAA,EAAAwF,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,mBAAAC,GAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,IAAA,eAAA,EAAA,CAAA,WAAA,EAAA,EAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,MAAA,KAAA,EAAA,CAAA,EAAA,WAAA,OAAA,SAAA,MAAA,EAAA,CAAA,kBAAA,QAAA,EAAA,cAAA,MAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,WAAA,OAAA,SAAA,MAAA,EAAA,CAAA,kBAAA,aAAA,EAAA,WAAA,aAAA,EAAA,CAAA,EAAA,WAAA,SAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA,OAAA,MAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,OAAA,OAAA,eAAA,OAAA,kBAAA,cAAA,EAAA,eAAA,MAAA,EAAA,CAAA,OAAA,SAAA,YAAA,UAAA,kBAAA,cAAA,MAAA,IAAA,EAAA,eAAA,MAAA,EAAA,CAAA,OAAA,WAAA,kBAAA,cAAA,EAAA,mBAAA,OAAA,OAAA,EAAA,YAAA,QAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,cAAA,aAAA,OAAA,KAAA,kBAAA,cAAA,gBAAA,GAAA,EAAA,eAAA,EAAA,aAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,wBAAA,WAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,mBAAA,yBAAA,EAAA,CAAA,kBAAA,cAAA,EAAA,OAAA,oBAAA,WAAA,iBAAA,YAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,QAAA,yBAAA,cAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,cAAA,OAAA,EAAA,KAAA,iBAAA,OAAA,EAAA,YAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,SCtIvCnN,EAAA,EAAAqN,GAAA,GAAA,EAAA,eAAA,CAAA,QAAiC5O,EAAA,gBAAA,qBAAA,iBDoH7B6O,GAAmBC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GACnBC,GACAC,GACAC,GACAC,GACAC,GACAC,EACAC,EACAC,GAAaC,GACbC,GAEAC,GACAC,EAEAC,EAAkB,EAAAC,OAAA,CAAA;uEAAA,EAAAC,gBAAA,CAAA,CAAA,EAIhB,IAAO3I,EAAP4I,SAAO5I,CAA0B,GAAA,gDG9HP6I,EAAA,EAAA,SAAA,EAAA,EAA6DC,EAAA,CAAA,EAAaC,EAAA,0BAAjCC,EAAA,QAAAC,EAAAC,KAAA,EAAoBC,EAAA,EAAAC,EAAAH,EAAAI,KAAA,sCAezDR,EAAA,EAAA,SAAA,GAAA,CAAA,EAAgGS,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAAC,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAE,aAAAL,CAAA,CAAe,CAAA,CAAA,EACpHM,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAA8BC,EAAA,CAAA,EAA8BC,EAAA,EAAO,2CAFjBC,EAAA,aAAAgB,EAAA,cAAAC,EAAA,EAAAC,GAAAT,CAAA,CAAA,CAAA,EAEpBN,EAAA,CAAA,EAAAC,EAAAY,EAAA,cAAAC,EAAA,EAAAC,GAAAT,CAAA,CAAA,CAAA,sCANlDZ,EAAA,EAAA,MAAA,CAAA,EAAkF,EAAA,MAAA,EAAA,EACvD,EAAA,0BAAA,EAAA,EACwFS,EAAA,kBAAA,SAAAa,EAAA,CAAA,IAAAV,EAAAF,EAAAa,CAAA,EAAAT,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAAmBD,EAAAS,aAAAZ,EAAAU,CAAA,CAAuB,CAAA,CAAA,EACjJtB,EAAA,EAAA,MAAA,EAAA,EACIyB,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,EAAA,EAIJxB,EAAA,EAAM,EACgB,EACxB,6CARuBI,EAAA,CAAA,EAAAH,EAAA,QAAAS,EAAA,GAAA,EAAiB,SAAAe,CAAA,EAAsB,kBAAAZ,EAAAa,qBAAA,EAEmEtB,EAAA,CAAA,EAAAH,EAAA,OAAAS,EAAAG,EAAAc,OAAAC,WAAAC,OAAA,GAAAhB,EAAAc,OAAAC,WAAAC,OAAA,CAAA,sCApBnJC,EAAA,CAAA,EACIhC,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,MAAA,CAAA,EACH,EAAA,MAAA,CAAA,EACI,EAAA,SAAA,CAAA,EAEdyB,EAAA,EAAAQ,GAAA,EAAA,EAAA,SAAA,EAAA,EACJ/B,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,CAAA,EAAsB,EAAA,SAAA,EAAA,EACyBS,EAAA,QAAA,UAAA,CAAAC,EAAAwB,CAAA,EAAA,IAAAnB,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAoB,UAAA,CAAW,CAAA,CAAA,EAC3DjB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAAiDC,EAAA,EAAA,EAAiBC,EAAA,EAAO,EACpE,EACP,EAEVuB,EAAA,GAAAW,GAAA,EAAA,EAAA,MAAA,EAAA,EAaJlC,EAAA,yCAxBwCI,EAAA,CAAA,EAAAH,EAAA,UAAAY,EAAAsB,YAAA,EAKqC/B,EAAA,CAAA,EAAAH,EAAA,aAAAgB,EAAA,UAAA,CAAA,EAA4B,WAAAJ,EAAAuB,iBAAA,IAAAvB,EAAAuB,eAAA,GAAAvB,EAAAc,OAAAC,WAAAC,QAAAhB,EAAAuB,cAAA,EAExChC,EAAA,CAAA,EAAAC,EAAAY,EAAA,UAAA,CAAA,EAIhBb,EAAA,EAAAH,EAAA,UAAAY,EAAAc,OAAAC,UAAA,6BAqBjC9B,EAAA,EAAA,SAAA,EAAA,EAA6DC,EAAA,CAAA,EAAaC,EAAA,0BAAjCC,EAAA,QAAAoC,EAAAlC,KAAA,EAAoBC,EAAA,EAAAC,EAAAgC,EAAA/B,KAAA,sCAezDR,EAAA,EAAA,SAAA,GAAA,CAAA,EAAsFS,EAAA,QAAA,UAAA,CAAAC,EAAA8B,CAAA,EAAA,IAAAC,EAAA5B,EAAA,EAAAC,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAE,aAAAwB,CAAA,CAAe,CAAA,CAAA,EAC1GvB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAA8BC,EAAA,CAAA,EAAoBC,EAAA,EAAO,+BAFPC,EAAA,aAAAgB,EAAA,aAAA,CAAA,EAEpBb,EAAA,CAAA,EAAAC,EAAAY,EAAA,aAAA,CAAA,sCANlDnB,EAAA,EAAA,MAAA,EAAA,EAAkF,EAAA,MAAA,EAAA,EACvD,EAAA,0BAAA,EAAA,EACkFS,EAAA,kBAAA,SAAAa,EAAA,CAAA,IAAAmB,EAAA/B,EAAAgC,CAAA,EAAA5B,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAAmBD,EAAAS,aAAAiB,EAAAnB,CAAA,CAAuB,CAAA,CAAA,EAC3ItB,EAAA,EAAA,MAAA,EAAA,EACIyB,EAAA,EAAAkB,GAAA,EAAA,EAAA,SAAA,EAAA,EAIJzC,EAAA,EAAM,EACgB,EACxB,6CARuBI,EAAA,CAAA,EAAAH,EAAA,QAAAsC,CAAA,EAAW,SAAAG,CAAA,EAAsB,kBAAA7B,EAAAa,qBAAA,EAE+DtB,EAAA,CAAA,EAAAH,EAAA,OAAAsC,EAAA1B,EAAAc,OAAAC,WAAAC,OAAA,GAAAhB,EAAAc,OAAAC,WAAAC,OAAA,CAAA,sCAnBrI/B,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,MAAA,EAAA,EACH,EAAA,MAAA,EAAA,EACW,EAAA,SAAA,CAAA,EAErByB,EAAA,EAAAoB,GAAA,EAAA,EAAA,SAAA,EAAA,EACJ3C,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,EAAA,EAA4B,EAAA,SAAA,EAAA,EACKS,EAAA,QAAA,UAAA,CAAAC,EAAAoC,CAAA,EAAA,IAAA/B,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAoB,UAAA,CAAW,CAAA,CAAA,EAC7CjB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAAiDC,EAAA,CAAA,EAAiBC,EAAA,EAAO,EACpE,EACP,EAEVuB,EAAA,GAAAsB,GAAA,EAAA,EAAA,MAAA,EAAA,EAYJ7C,EAAA,qCAvBwCI,EAAA,CAAA,EAAAH,EAAA,UAAAY,EAAAsB,YAAA,EAKuB/B,EAAA,CAAA,EAAAH,EAAA,aAAAgB,EAAA,UAAA,CAAA,EAEEb,EAAA,CAAA,EAAAC,EAAAY,EAAA,UAAA,CAAA,EAIhBb,EAAA,EAAAH,EAAA,UAAAY,EAAAc,OAAAC,UAAA,6BAlD7DE,EAAA,CAAA,EACIhC,EAAA,EAAA,OAAA,CAAA,EACIyB,EAAA,EAAAuB,GAAA,GAAA,EAAA,eAAA,CAAA,EAAmG,EAAAC,GAAA,GAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EA8DvGhD,EAAA,8BA/DMI,EAAA,EAAAH,EAAA,YAAAY,EAAAoC,SAAA,EACa7C,EAAA,EAAAH,EAAA,OAAAY,EAAAqC,eAAAC,oBAAA,IAAAtC,EAAAuC,WAAAC,OAAA,EAAmE,WAAAC,CAAA,6BAH9FxB,EAAA,CAAA,EACIP,EAAA,EAAAgC,GAAA,EAAA,EAAA,eAAA,CAAA,sBAAenD,EAAA,EAAAH,EAAA,OAAAY,EAAAc,MAAA,GD2CnB,IAAa6B,IAAwB,IAAA,CAA/B,IAAOA,EAAP,MAAOA,CAAwB,CAlBrCC,aAAA,CAwBW,KAAArB,eAAiB,EACjB,KAAAV,sBAAwBgC,GACvB,KAAAC,OAAuC,IAAIC,EAC3C,KAAAC,MAA4B,IAAID,EAEzB,KAAAE,MAAQC,EAAOC,CAAiB,EAChC,KAAAC,gBAAkBF,EAAOG,EAAe,EACtC,KAAAhB,eAAiBa,EAAOI,EAAc,EACtC,KAAAC,qBAAuBL,EAAOM,EAAsB,EACrD,KAAAC,WAAaP,EAAOQ,EAAU,EAC7B,KAAAnB,WAAaA,EAEhC,KAAAH,UAAuB,IAAIuB,GAAU,CAAA,CAAE,EAEvC,KAAArC,aAAiE,CAC/D,CAAChC,MAAOsE,GAAkBC,GAAIpE,MAAOqE,EAAU,qBAAqB,CAAC,EACrE,CAACxE,MAAOsE,GAAkBG,IAAKtE,MAAOqE,EAAU,sBAAsB,CAAC,CAAC,EAG1EE,UAAQ,CACN,KAAK5B,UAAU6B,WAAW,aAAc,IAAIC,EAA+B,KAAKpD,QAAQqD,aAAeP,GAAkBC,GAAI,CAAA,CAAE,CAAC,EAChI,KAAKzB,UAAUgC,aAAaC,KAAKC,GAAoB,EAAIC,EAAmB,KAAKd,UAAU,EAAGe,GAAIC,GAAS,CACzG,KAAK3D,OAAOqD,YAAcO,SAAS,KAAKtC,UAAUuC,IAAI,YAAY,GAAGrF,MAAO,EAAE,EAC9E,KAAKwD,OAAO8B,KAAK,KAAK9D,MAAM,CAC9B,CAAC,CAAC,EAAE+D,UAAS,CACf,CAEAzD,WAAS,CACP,KAAKN,OAAOC,WAAa,CAAC,KAAKqC,gBAAgB0B,6BAA4B,EAAI,GAAG,KAAKhE,OAAOC,UAAU,EACxG,KAAKkC,MAAM8B,aAAY,CACzB,CAEA7E,aAAaH,EAAa,CACxB,KAAKe,OAAOC,WAAa,KAAKD,OAAOC,WAAWiE,MAAM,EAAGjF,CAAK,EAAEkF,OAAO,KAAKnE,OAAOC,WAAWiE,MAAMjF,EAAQ,CAAC,CAAC,EAC9G,KAAKkD,MAAM8B,aAAY,CACzB,CAEAtE,aAAaV,EAAemF,EAA2B,CACrD,KAAK9B,gBAAgB3C,aAAa,KAAKK,OAAOC,WAAYhB,EAAOmF,CAAU,EAC3E,KAAKpC,OAAO8B,KAAK,KAAK9D,MAAM,CAC9B,yCA9CW6B,EAAwB,sBAAxBA,EAAwBwC,UAAA,CAAA,CAAA,sBAAA,CAAA,EAAAC,OAAA,CAAAtE,OAAA,SAAAS,eAAA,iBAAAV,sBAAA,uBAAA,EAAAwE,QAAA,CAAAvC,OAAA,SAAAE,MAAA,OAAA,EAAAsC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,OAAA,UAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,MAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,kBAAA,aAAA,EAAA,aAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,SAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,WAAA,EAAA,QAAA,aAAA,UAAA,EAAA,CAAA,cAAA,OAAA,EAAA,KAAA,WAAA,SAAA,EAAA,CAAA,cAAA,OAAA,EAAA,iBAAA,EAAA,CAAA,QAAA,WAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,kBAAA,QAAA,SAAA,iBAAA,EAAA,CAAA,EAAA,WAAA,MAAA,EAAA,CAAA,OAAA,SAAA,QAAA,eAAA,EAAA,aAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,WAAA,EAAA,QAAA,YAAA,EAAA,CAAA,cAAA,OAAA,EAAA,WAAA,UAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,MAAA,EAAA,CAAA,EAAA,WAAA,QAAA,EAAA,CAAA,EAAA,WAAA,OAAA,EAAA,CAAA,EAAA,MAAA,WAAA,EAAA,QAAA,YAAA,EAAA,CAAA,QAAA,WAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,WAAA,OAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GC5CrCnF,EAAA,EAAAqF,GAAA,EAAA,EAAA,eAAA,CAAA,OAAiC3G,EAAA,gBAAA,kBAAA,iBDgC7B4G,EACAC,GACAC,EAEAC,GAAWC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GACXC,GAEAC,GAAmBC,GAAAC,GACnBC,CAAkB,EAAAC,gBAAA,CAAA,CAAA,EAIhB,IAAOpE,EAAPqE,SAAOrE,CAAwB,GAAA,mHGzC/BsE,EAAA,EAAA,KAAA,EACEC,EAAA,EAAA,CAAA,EACFC,EAAA,uCAFqEC,EAAA,kBAAAC,MAAA,EACrDC,EAAA,EAAAF,EAAA,mBAAAG,CAAA,EAAkC,0BAAAC,EAAA,EAAAC,GAAAC,CAAA,CAAA,sCAIhDT,EAAA,EAAA,KAAA,EAAK,EAAA,aAAA,EAAA,CAAA,EAC+EU,EAAA,eAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAgBF,EAAAG,cAAAC,IAAkB,EAAK,CAAC,CAAA,CAAA,EACxHjB,EAAA,EAAA,KAAA,EAAA,EACEkB,EAAA,CAAA,EACFhB,EAAA,EACAF,EAAA,EAAA,MAAA,EAAA,EAEEC,EAAA,EAAA,EAAA,EACFC,EAAA,EAAM,EACK,iDARuBG,EAAA,EAAAF,EAAA,SAAAM,CAAA,EAAiB,UAAAU,GAAA,EAAAC,EAAA,CAAA,EAA4B,QAAA,GAAA,EAE7Ef,EAAA,CAAA,EAAAgB,GAAA,IAAAC,EAAA,cAAA,EAAA,GAAA,EAIcjB,EAAA,CAAA,EAAAF,EAAA,mBAAAG,CAAA,6BAbxBiB,EAAA,CAAA,EACEC,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAAuF,EAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,uCAAjFtB,EAAA,EAAAF,EAAA,OAAAyB,GAAAf,EAAAgB,WAAAC,MAAA,EAA6C,WAAAC,CAAA,6BAFvDR,EAAA,CAAA,EACEC,EAAA,EAAAQ,GAAA,EAAA,EAAA,eAAA,CAAA,uBAAe3B,EAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,CAAA,4BAyCHC,EAAA,EAAA,IAAA,EAAA,4BAA0BhC,EAAA,QAAAmB,EAAA,eAAA,CAAA,4BAExBa,EAAA,EAAA,IAAA,EAAA,4BAA4BhC,EAAA,QAAAmB,EAAA,gBAAA,CAAA,6BAI9BtB,EAAA,EAAA,SAAA,EAAA,EAA4DkB,EAAA,CAAA,mBAAqBhB,EAAA,0BAArCC,EAAA,QAAAiC,CAAA,EAAgB/B,EAAA,EAAAgC,EAAAC,EAAA,EAAA,EAAAF,CAAA,CAAA,4BAiBlEnC,EAAA,EAAA,EAAA,uBAA+EE,EAAA,mBAAAoC,CAAA,6BAEjFvC,EAAA,EAAA,MAAA,EAAA,EACEC,EAAA,EAAA,EAAA,EACFC,EAAA,wBADgBG,EAAA,EAAAF,EAAA,mBAAAoC,CAAA,sCA7CpBvC,EAAA,EAAA,MAAA,EAAA,EAAyE,EAAA,MAAA,EAAA,EAC3B,EAAA,uBAAA,EAAA,EAIpBU,EAAA,SAAA,SAAA8B,EAAA,CAAA7B,EAAA8B,CAAA,EAAA,IAAA5B,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAUF,EAAA6B,cAAAF,CAAA,CAAqB,CAAA,CAAA,EACrDtC,EAAA,EAAuB,EAEzBF,EAAA,EAAA,OAAA,EAAA,EAAsD,EAAA,MAAA,EAAA,EAC9B,EAAA,MAAA,EAAA,EACW,EAAA,MAAA,EAAA,EACA,EAAA,QAAA,EAAA,EACckB,EAAA,CAAA,EAAoBhB,EAAA,EAC7DiC,EAAA,EAAA,QAAA,EAAA,EACFjC,EAAA,EAAM,EAERF,EAAA,GAAA,MAAA,EAAA,EAA+B,GAAA,QAAA,EAAA,EACkBkB,EAAA,EAAA,EAAsBhB,EAAA,EACnEF,EAAA,GAAA,SAAA,EAAA,EAAiDU,EAAA,QAAA,UAAA,CAAAC,EAAA8B,CAAA,EAAA,IAAA5B,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAA8B,gBAAA,CAAiB,CAAA,CAAA,EACzEnB,EAAA,GAAAoB,GAAA,EAAA,EAAA,IAAA,EAAA,EAA8F,GAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAlB,CAAA,EAIhGzB,EAAA,EACAF,EAAA,GAAA,SAAA,EAAA,EACEwB,EAAA,GAAAsB,GAAA,EAAA,EAAA,SAAA,EAAA,EACF5C,EAAA,EAAS,EAEbF,EAAA,GAAA,MAAA,EAAA,EAAgH,GAAA,QAAA,EAAA,EAClEkB,EAAA,EAAA,EAA0BhB,EAAA,EACtEiC,EAAA,GAAA,QAAA,EAAA,EAUFjC,EAAA,EAEAsB,EAAA,GAAAuB,GAAA,EAAA,EAAA,eAAA,EAAA,EACF7C,EAAA,EACAsB,EAAA,GAAAwB,GAAA,EAAA,EAAA,MAAA,EAAA,EAGF9C,EAAA,EAAO,6CA7CiBG,EAAA,CAAA,EAAAF,EAAA,SAAAU,EAAAoC,QAAA,EAAmB,wBAAApC,EAAAqC,eAAA,EACsB,iBAAArC,EAAAsC,eAAAC,cAAA,EAK3D/C,EAAA,EAAAF,EAAA,YAAAU,EAAAwC,SAAA,EAI2ChD,EAAA,CAAA,EAAAgC,EAAAf,EAAA,aAAA,CAAA,EAKIjB,EAAA,CAAA,EAAAgC,EAAAf,EAAA,eAAA,CAAA,EACyEjB,EAAA,EAAAF,EAAA,WAAAU,EAAAsC,eAAAG,YAAA,EAC5DjD,EAAA,EAAAF,EAAA,OAAAU,EAAA0C,eAAA,EAAuB,WAAAC,CAAA,EAMrDnD,EAAA,CAAA,EAAAF,EAAA,UAAAU,EAAA4C,aAAA,EAGApD,EAAA,EAAAF,EAAA,UAAAI,EAAA,GAAAmD,GAAA7C,EAAAoB,eAAAC,oBAAA,GAAArB,EAAAgB,WAAA8B,MAAA,CAAA,EACctD,EAAA,CAAA,EAAAgC,EAAAf,EAAA,mBAAA,CAAA,EAa/BjB,EAAA,CAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,EAAArB,EAAAgB,WAAAC,MAAA,EAEMzB,EAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,GAAArB,EAAAgB,WAAAC,MAAA,4BA5C3BN,EAAA,EAAAoC,GAAA,GAAA,GAAA,MAAA,EAAA,kBAA0CzD,EAAA,OAAAU,EAAAgD,aAAAhD,EAAAoC,QAAA,sCAqD1CjD,EAAA,EAAA,MAAA,EAAA,EAAwE,EAAA,SAAA,EAAA,EACzBU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAkD,MAAA,CAAO,CAAA,CAAA,EAAE5B,EAAA,EAAA,IAAA,EAAA,EAAqEjB,EAAA,CAAA,EAAchB,EAAA,EAClJF,EAAA,EAAA,SAAA,EAAA,EAAsCU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAmD,MAAA,CAAO,CAAA,CAAA,EAAE7B,EAAA,EAAA,IAAA,EAAA,EAAwDjB,EAAA,CAAA,EAAchB,EAAA,EAAS,EAEzIF,EAAA,EAAA,MAAA,EAAA,EAAyC,EAAA,SAAA,EAAA,EACAU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAoD,KAAA,CAAM,CAAA,CAAA,EACpD9B,EAAA,EAAA,IAAA,EAAA,EACAjB,EAAA,EAAA,EACFhB,EAAA,EAAS,sCAP2HG,EAAA,CAAA,EAAAgC,EAAAf,EAAA,OAAA,CAAA,EACpBjB,EAAA,CAAA,EAAAgC,EAAAf,EAAA,OAAA,CAAA,EAGxDjB,EAAA,CAAA,EAAAF,EAAA,WAAAU,EAAAsC,eAAAe,cAAA,GAAAC,EAAAtD,EAAAwC,UAAAe,IAAA,MAAA,IAAA,MAAAD,EAAAE,MAAA,EAEtDhE,EAAA,CAAA,EAAAgB,GAAA,IAAAC,EAAA,MAAA,EAAA,GAAA,6BApFRC,EAAA,CAAA,EACEC,EAAA,EAAA8C,GAAA,EAAA,EAAA,eAAA,CAAA,eAsBA9C,EAAA,EAAA+C,GAAA,EAAA,EAAA,cAAA,KAAA,EAAA5C,CAAA,EAAgD,EAAA6C,GAAA,GAAA,EAAA,cAAA,KAAA,EAAA7C,CAAA,sBAtBjCtB,EAAA,EAAAF,EAAA,OAAAmC,EAAA,EAAA,EAAAzB,EAAAG,cAAAyD,YAAA,CAAA,GD4EjB,IAAaC,IAAuB,IAAA,CAA9B,IAAOA,EAAP,MAAOA,CAAuB,CA6ClCC,YAAmBC,EAAsCC,EAA4B,CAAlE,KAAAD,cAAAA,EAAsC,KAAAC,cAAAA,EAxChD,KAAAC,WAAoC,IAAIC,EAKxC,KAAAC,kBAA6B,GAI5B,KAAAC,YAAyC,IAAIF,EAGtC,KAAAG,WAAaC,EAAOC,EAAU,EAC/B,KAAAC,eAAiBF,EAAOG,EAAc,EACtC,KAAAC,uBAAyBJ,EAAOK,EAAsB,EAMtE,KAAAC,mBAA8B,GAE9B,KAAAC,UAAwC,CAAA,EAGxC,KAAAC,gBAA2B,GAE3B,KAAAC,cAAwB,EAExB,KAAAC,YAAuB,GAEvB,KAAAC,cAAgBA,GAChB,KAAAC,gBAAkBC,GAID,KAAAC,MAAQd,EAAOe,CAAiB,EAChC,KAAAC,OAAShB,EAAOiB,EAAa,EAuL3B,KAAAC,WAAaA,EAnL9B,KAAKxB,cAAcyB,cAAa,EAAGC,UAAUC,GAAM,CACjD,KAAKC,aAAeD,EAAIE,IAAIC,IACnB,CACLC,MAAOD,EACPE,MAAOF,EAAEG,MAEZ,CACH,CAAC,CACH,CAEAC,UAAQ,CACF,KAAKC,iBAAmBC,SAC1B,KAAKD,eAAiB,IAAIE,GAC1B,KAAKjB,MAAMkB,aAAY,GAGrB,KAAKrC,YACP,KAAKA,WAAWsC,KAAKC,EAAmB,KAAKnC,UAAU,CAAC,EAAEqB,UAAUe,GAAY,CAC9E,KAAK7B,mBAAqB,CAAC6B,EAC3B,KAAK1C,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,EAC/C,KAAKQ,MAAMkB,aAAY,CACzB,CAAC,EAKH,KAAKK,wBAAuB,CAC9B,CAmCAC,OAAK,CACH,KAAK3C,WAAW4C,KAAK,EAAK,EAC1B,KAAKjC,mBAAqB,GAC1B,KAAKb,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,EAC/C,KAAKQ,MAAMkB,aAAY,CACzB,CAEAQ,UAAUC,EAAQ,CAChB,GAAIA,IAAQ,MAAQ,OAAOA,GAAQ,SACjC,OAAOA,EAGT,GAAIA,aAAeC,MACjB,OAAOD,EAAIlB,IAAIoB,GAAQ,KAAKH,UAAUG,CAAI,CAAC,EAG7C,IAAMC,EAAiB,CAAA,EAEvB,QAAWC,KAAOJ,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAKI,CAAG,IAC3C,OAAOJ,EAAII,CAAG,GAAM,UAAYJ,EAAII,CAAG,IAAM,KAC/CD,EAAUC,CAAG,EAAI,KAAKL,UAAUC,EAAII,CAAG,CAAC,EAExCD,EAAUC,CAAG,EAAIJ,EAAII,CAAG,GAK9B,OAAOD,CACT,CAEAM,cAAcC,EAAsB,CAClC,KAAKC,SAAWD,CAClB,CAGAd,yBAAuB,CACrB,KAAK3B,YAAc,GAEnB,KAAK0C,SAAW,KAAKZ,UAAU,KAAKX,eAAewB,SAAS,EAE5D,KAAKC,UAAY,IAAIC,GAAU,CAC7BC,UAAW,IAAIC,EAAY,CAAChC,MAAO,KAAK2B,UAAUM,aAAaF,WAAaG,EAAUC,SAAUC,SAAU,KAAKhC,eAAeiC,YAAY,EAAG,CAAA,CAAE,EAC/IC,QAAS,IAAIN,EAAY,KAAKL,UAAUW,SAAW,EAAG,CAAA,CAAE,EACxDpC,KAAM,IAAI8B,EAAY,KAAKL,UAAUzB,MAAQ,GAAI,CAAA,CAAE,EACpD,EACG,KAAKE,gBAAgBwB,WAAWK,cAClC,KAAKlD,gBAAkB,KAAKqB,gBAAgBwB,WAAWK,YAAaM,aAItE,KAAKV,UAAUW,aAAahC,KAAKC,EAAmB,KAAKnC,UAAU,CAAC,EAAEqB,UAAU,IAAK,CACjF,KAAKgC,UAAUM,cAAgB,OACjC,KAAKN,SAASM,YAAc,CAC1BM,YAAa,KAAKxD,gBAClBgD,UAAWU,SAAS,KAAKZ,UAAUa,IAAI,WAAW,GAAG1C,MAAO,EAAE,IAGlE,KAAK2B,SAAUM,YAAaF,UAAYU,SAAS,KAAKZ,UAAUa,IAAI,WAAW,GAAG1C,MAAO,EAAE,EAC3F,KAAK2B,SAAUW,QAAUK,KAAKC,IAAIH,SAAS,KAAKZ,UAAUa,IAAI,SAAS,GAAG1C,OAAS,IAAK,EAAE,EAAG,CAAC,EAC9F,KAAK2B,SAAUzB,KAAO,KAAK2B,UAAUa,IAAI,MAAM,GAAG1C,OAAS,GAC3D,KAAKX,MAAMkB,aAAY,CACvB,CAAC,EAED,KAAKtB,YAAc,GACnB,KAAK4D,MAAK,CACZ,CAGAC,iBAAe,CACT,KAAK1C,eAAeiC,eACxB,KAAKtD,gBAAkB,CAAC,KAAKA,gBACzB,KAAK4C,UAAUM,cAAgB,OACjC,KAAKN,SAASM,YAAc,CAC1BM,YAAa,KAAKxD,gBAClBgD,UAAWG,EAAUC,WAIzB,KAAKR,SAAUM,YAAaM,YAAc,KAAKxD,gBAC/C,KAAKM,MAAMkB,aAAY,EACzB,CAEAwC,OAAK,CAEH,KAAKnC,wBAAuB,CAC9B,CAEAiC,OAAK,CACH,KAAKxE,YAAYyC,KAAK,CAACkC,QAAS,KAAKhE,gBAAkB,EAAG2C,SAAU,KAAKA,QAAS,CAAC,EAE/E,KAAKlD,eAAewE,oBAAmB,IAAOxD,EAAWyD,QAAU,KAAKlE,gBAAkB,GAC5F,KAAKmE,eAAc,EAGrB,KAAKnE,gBACL,KAAKK,MAAMkB,aAAY,CACzB,CAEA6C,MAAI,CACG,KAAKzB,WACV,KAAKA,SAASzB,KAAO,KAAK2B,UAAUa,IAAI,MAAM,GAAG1C,MACjD,KAAK/B,cAAcoF,WAAW,KAAK1B,QAAQ,EAAEhC,UAAU,IAAK,CAC1D,KAAKJ,OAAO+D,QAAQC,EAAU,6BAA6B,CAAC,EAC5D,KAAKV,MAAK,CACZ,CAAC,EACH,CAEAM,gBAAc,CACZ,KAAKnF,cAAcwF,OAAM,EACzB,KAAKnE,MAAMkB,aAAY,CACzB,CAEAkD,UAAUC,EAAU,CAClB,KAAK1F,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,CACjD,yCA/NWf,GAAuB6F,EAAAC,EAAA,EAAAD,EAAAE,EAAA,CAAA,CAAA,sBAAvB/F,EAAuBgG,UAAA,CAAA,CAAA,qBAAA,CAAA,EAAAC,eAAA,SAAAC,EAAAC,EAAAC,EAAA,IAAAF,EAAA,kjEC7EpCG,EAAA,EAAAC,GAAA,EAAA,EAAA,eAAA,CAAA,OAAiCC,EAAA,gBAAA,iBAAA,iBDyErBC,EAAmBC,GAAkBC,GAC7CC,GAAmBC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAEC,GAAwBC,GAAWC,GAAeC,EAAEC,GACzEC,GAA0BC,EAASC,GAAeC,EAAO,EAAAC,OAAA,CAAA;mEAAA,EAAAC,KAAA,CAAAC,UA3B/C,CACVC,GACE,iBACA,CACEC,GACE,SACA,CACEC,GAAM,CAAEC,OAAQ,EAAGC,QAAS,CAAC,CAAE,EAC/BC,GAAQ,eACNH,GAAM,CAAEC,OAAQ,IAAKC,QAAS,CAAC,CAAE,CAAC,CAAC,CACtC,EAEHH,GACE,SACA,CACEC,GAAM,CAAEC,OAAQ,IAAKC,QAAS,CAAC,CAAE,EACjCC,GAAQ,cACNH,GAAM,CAAEC,OAAQ,EAAGC,QAAS,CAAC,CAAE,CAAC,CAAC,CACpC,CACF,CACF,CACF,CACF,EAAAE,gBAAA,CAAA,CAAA,EAOG,IAAOxI,EAAPyI,SAAOzI,CAAuB,GAAA,yMGxE5B0I,EAAA,EAAA,OAAA,EAAA,EAA0C,EAAA,uBAAA,EAAA,EAChBC,EAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAiBF,EAAAG,cAAAN,CAAA,CAAqB,CAAA,CAAA,EAAyCO,EAAA,EAAuBC,EAAA,EAAA,OAAA,EAChID,EAAA,qBADkEE,EAAA,EAAAC,EAAA,UAAAP,EAAAQ,OAAA,EAAmB,UAAAR,EAAAS,MAAA,6BAInFd,EAAA,EAAA,OAAA,EAAA,EAEuCU,EAAA,CAAA,EAAyBD,EAAA,qGAAzBE,EAAA,EAAAI,EAAAV,EAAAW,WAAAC,UAAA,6BAJzCjB,EAAA,EAAA,MAAA,EACEU,EAAA,CAAA,EACAQ,EAAA,EAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAGFV,EAAA,mBAJEE,EAAA,EAAAS,GAAA,IAAAf,EAAAS,OAAA,OAAA,EAGOH,EAAA,EAAAC,EAAA,OAAAP,EAAAW,aAAAK,MAAA,6BAVfrB,EAAA,EAAA,MAAA,EAAA,EAAiF,EAAA,MAAA,EAAA,EACtD,EAAA,IAAA,EAErBkB,EAAA,EAAAI,GAAA,EAAA,EAAA,OAAA,EAAA,EAA0C,EAAAC,GAAA,EAAA,EAAA,OAAA,EAAA,EAS5Cd,EAAA,EAAK,EACD,mBAVKE,EAAA,CAAA,EAAAC,EAAA,OAAAP,EAAAQ,QAAAW,OAAA,CAAA,EAGAb,EAAA,EAAAC,EAAA,OAAAP,EAAAS,SAAAO,QAAAhB,EAAAS,OAAAU,OAAA,CAAA,6BAcPxB,EAAA,EAAA,GAAA,EACEyB,EAAA,EAAA,EAAA,EACFhB,EAAA,mBADgBE,EAAA,EAAAC,EAAA,mBAAAP,EAAAqB,cAAA,sCAMZ1B,EAAA,EAAA,MAAA,EAAA,EACKC,EAAA,QAAA,UAAA,CAAA,IAAA0B,EAAAxB,EAAAyB,CAAA,EAAAC,UAAAxB,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAyB,iBAAAH,CAAA,CAAsB,CAAA,CAAA,EAGlCF,EAAA,EAAA,EAAA,EACFhB,EAAA,2DAHoFsB,GAAA,KAAA,kBAAAC,EAAA,EAAA,wBAEpErB,EAAA,EAAAC,EAAA,mBAAAP,EAAA4B,YAAA,EAAiC,0BAAAC,GAAA,EAAAC,GAAAR,EAAAS,EAAAC,aAAAC,qBAAAN,CAAA,CAAA,4BAOzDP,EAAA,EAAA,EAAA,uBAAuHb,EAAA,mBAAA2B,CAAA,EAA4B,0BAAAC,GAAA,EAAAC,EAAA,CAAA,sCAM/IzC,EAAA,EAAA,MAAA,EAAA,EAAqCC,EAAA,QAAA,UAAA,CAAA,IAAAyC,EAAAvC,EAAAwC,CAAA,EAAAd,UAAAxB,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAyB,iBAAAY,CAAA,CAAsB,CAAA,CAAA,EAClEjB,EAAA,EAAA,EAAA,EACFhB,EAAA,6CAFqJsB,GAAA,KAAA,kBAAAa,EAAA,EAAA,wBACrIjC,EAAA,EAAAC,EAAA,mBAAAP,EAAA4B,YAAA,EAAiC,0BAAAC,GAAA,EAAAC,GAAAO,EAAAE,CAAA,CAAA,6BAKrD5C,EAAA,EAAA,MAAA,EAAA,EAAoF,EAAA,GAAA,EAEhFyB,EAAA,EAAA,EAAA,EACFhB,EAAA,EAAI,mBADYE,EAAA,CAAA,EAAAC,EAAA,mBAAAP,EAAAqB,cAAA,6BAVlB1B,EAAA,EAAA,mBAAA,GAAA,CAAA,EAAwE,EAAA,MAAA,GAAA,CAAA,EAEpEkB,EAAA,EAAA2B,GAAA,EAAA,EAAA,MAAA,EAAA,EAGFpC,EAAA,EAAM,EAGRS,EAAA,EAAA4B,GAAA,EAAA,EAAA,MAAA,EAAA,0BAR0BlC,EAAA,QAAAP,EAAA0C,KAAA,EAAe,eAAA1C,EAAA2C,YAAA,EAEkDrC,EAAA,CAAA,EAAAC,EAAA,UAAAqC,EAAAC,aAAA,EAAyB,eAAA7C,EAAA8C,eAAA,EAM9FxC,EAAA,EAAAC,EAAA,OAAAP,EAAA0C,MAAAvB,SAAA,GAAA,CAAAnB,EAAA+C,SAAA,sCAWpBC,EAAA,CAAA,EACErD,EAAA,EAAA,SAAA,EAAA,EAAuEC,EAAA,QAAA,UAAA,CAAA,IAAAqD,EAAAnD,EAAAoD,CAAA,EAAA1B,UAAAxB,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAmD,SAAAF,CAAA,CAAiB,CAAA,CAAA,EAC/F5C,EAAA,CAAA,EACFD,EAAA,uDAF6BE,EAAA,EAAAC,EAAA,UAAA6C,EAAA,EAAAC,GAAArD,EAAAsD,cAAA,CAAA,CAAA,EAAyC,aAAAC,EAAA,gBAAAH,EAAA,EAAAI,GAAAP,EAAAQ,IAAA,CAAA,CAAA,EACpEnD,EAAA,EAAAS,GAAA,IAAAkC,EAAAS,MAAA,GAAA,6BAHN/D,EAAA,EAAA,MAAA,EAAA,EACEkB,EAAA,EAAA8C,GAAA,EAAA,EAAA,eAAA,EAAA,EAKFvD,EAAA,mBALoCE,EAAA,EAAAC,EAAA,UAAAP,EAAA4D,mBAAA,sCA/DxCZ,EAAA,CAAA,EAEEnC,EAAA,EAAAgD,GAAA,EAAA,EAAA,MAAA,CAAA,EAgBAlE,EAAA,EAAA,sBAAA,CAAA,EAAiFC,EAAA,cAAA,SAAAC,EAAA,CAAAC,EAAAgE,CAAA,EAAA,IAAA9D,EAAAC,EAAA,EAAA,OAAAC,EAAeF,EAAA+D,oBAAAlE,CAAA,CAA2B,CAAA,CAAA,EAAEO,EAAA,EAC7HT,EAAA,EAAA,MAAA,CAAA,EAAwF,EAAA,MAAA,CAAA,EACvD,EAAA,MAAA,CAAA,EAE3BkB,EAAA,EAAAmD,GAAA,EAAA,EAAA,IAAA,EAAA,EAIArE,EAAA,EAAA,mBAAA,GAAA,CAAA,EAA8J,EAAA,MAAA,GAAA,CAAA,EAG1JkB,EAAA,GAAAoD,GAAA,EAAA,EAAA,MAAA,EAAA,EAMF7D,EAAA,EAAM,EACW,EACf,EAGRS,EAAA,GAAAqD,GAAA,EAAA,EAAA,eAAA,EAAA,EACF9D,EAAA,EAEAS,EAAA,GAAAsD,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EAgBAC,EAAA,GAAA,cAAA,EAAA,EAEAxD,EAAA,GAAAyD,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAF,CAAA,+BA3DgC9D,EAAA,EAAAC,EAAA,OAAAP,EAAAS,SAAAO,QAAAhB,EAAAS,OAAAU,OAAA,CAAA,EAgBXb,EAAA,EAAAC,EAAA,iBAAAP,EAAAuE,cAAA,EAAiC,aAAAvE,EAAAwE,UAAA,EACtBlE,EAAA,EAAAC,EAAA,UAAA6C,EAAA,GAAAqB,GAAAzE,EAAA0C,MAAAvB,SAAA,GAAA,CAAAnB,EAAA+C,SAAA,CAAA,EAGtBzC,EAAA,CAAA,EAAAC,EAAA,OAAAP,EAAA0C,MAAAvB,SAAA,GAAA,CAAAnB,EAAA+C,SAAA,EAIczC,EAAA,EAAAC,EAAA,UAAA6C,EAAA,GAAAqB,GAAAzE,EAAA0C,MAAAvB,SAAA,GAAA,CAAAnB,EAAA+C,SAAA,CAAA,EAAuD,QAAA/C,EAAA0C,KAAA,EAAwB,eAAA1C,EAAA2C,YAAA,EAA8B,eAAA3C,EAAA0E,YAAA,EAKrGpE,EAAA,CAAA,EAAAC,EAAA,UAAAwB,EAAAc,aAAA,EAAyB,eAAA7C,EAAA8C,eAAA,EASxCxC,EAAA,EAAAC,EAAA,OAAAP,EAAA4D,oBAAAzC,QAAA,GAAAnB,EAAA0C,MAAAvB,OAAA,GAAAY,EAAAC,aAAA2C,kBAAA,CAAA,EAmBJrE,EAAA,CAAA,EAAAC,EAAA,UAAAP,EAAA+C,SAAA,GDlBf,IAAM6B,GAAoB,EAUbC,IAAyB,IAAA,CAAhC,IAAOA,EAAP,MAAOA,CAAyB,CAyDpCC,YAAsCC,EAAkB,CAAlB,KAAAA,SAAAA,EAvDrB,KAAAC,qBAAuBC,EAAOC,EAAsB,EAClD,KAAAC,eAAiBF,EAAOG,EAAc,EACxC,KAAAC,MAAQJ,EAAOK,CAAiB,EAChC,KAAAC,eAAiBN,EAAOO,EAAc,EACtC,KAAAC,OAASR,EAAOS,EAAM,EACtB,KAAAC,cAAgBV,EAAOW,EAAa,EAE5C,KAAAnF,OAAiB,GACjB,KAAAsC,UAAqB,GACrB,KAAAL,MAAe,CAAA,EAYf,KAAAmD,kBAA6B,GAI7B,KAAArF,QAA6B,CAAA,EAS7B,KAAAsF,YAA8B,CAAA,EACvC,KAAAlC,oBAAsC,CAAA,EAE5B,KAAAmC,YAAiC,IAAIC,EACrC,KAAAC,YAAyC,IAAID,EAQvD,KAAAE,OAAyB,KAAKlB,qBAAqBmB,qBAAoB,EACvE,KAAAC,UAAwC,CAAA,EAExC,KAAAC,cAAwB,EACxB,KAAAC,kBAA6B,GAC7B,KAAA3D,aAAuB,EAEJ,KAAA4D,WAAaA,CAE2B,CAK3DC,eAAa,CACX,IAAMC,GAAe,KAAK1B,SAAS2B,cAAc,qBAAqB,GAAGC,sBAAqB,EAAGC,QAAU,IAAM,GACjH,KAAKhD,oBAAsB,KAAK2B,eAAesB,gBAAgB,KAAKf,YAAaW,CAAW,EAC5F,KAAKpB,MAAMyB,aAAY,CACzB,CAEAC,UAAQ,CACF,KAAKjE,kBAAoB9B,SAC3B,KAAK8B,gBAAkB,CAACkE,EAAWC,IAAc,GAAG,KAAKxG,MAAM,IAAI,KAAK4F,aAAa,IAAIY,GAAMC,SAAS,IAGtG,KAAK3C,iBAAmBvD,SAC1B,KAAKuD,eAAiB,IAAI4C,GAC1B,KAAK9B,MAAMyB,aAAY,GAGrB,KAAKnG,aAAeK,SACtB,KAAKL,WAAa,CAACyG,YAAa,EAAGC,aAAc,KAAK3E,MAAMvB,OAAQP,WAAY,KAAK8B,MAAMvB,OAAQmG,WAAY,CAAC,EAChH,KAAKjC,MAAMyB,aAAY,GAGrB,KAAKS,SACP,KAAKA,QAAQC,UAAU,IAAK,CAC1B,KAAKnC,MAAMyB,aAAY,EACvB,KAAKW,gBAAgBF,QAAO,CAC9B,CAAC,CAEL,CAGAG,aAAW,CAOT,GANA,KAAK9D,oBAAsB,CAAC,GAAG,KAAKkC,WAAW,EAC/C,KAAKU,cAAa,EAKd,CAAC,KAAKlD,cAAa,GACjB,CAAC,KAAKgD,mBAAqB,KAAK1C,oBAAoBzC,OAAS,EAAG,CAClE,IAAMwG,EAAY,KAAKpC,eAAeqC,aAAa,KAAKnC,OAAOoC,GAAG,EAClE,GAAIF,IAAc,GAAI,OACtB,IAAMG,EAAO,KAAKlE,oBAAoBsC,OAAO6B,GAAKA,EAAEC,MAAQL,CAAS,EACrE,GAAIG,EAAK3G,OAAS,EAAG,OAErB,KAAKmF,kBAAoB,GACzB2B,WAAW,IAAM,KAAK9E,SAAS2E,EAAK,CAAC,CAAC,EAAG,GAAG,CAC9C,CAUJ,CAEAxE,eAAa,CACX,GAAI,KAAKuC,kBAAmB,MAAO,GACnC,IAAMvC,EAAgB,KAAK4C,QAAQgC,aAAaC,WAAaC,EAAUC,UAAY,CAAC,KAAKnC,QAAQgC,YAAYI,YACvGC,EAAyB,KAAKhE,gBAAgBiE,WAAWN,aAAaC,WAAaC,EAAUC,SAEnG,OAAO/E,CACT,CAEAnD,cAAcsI,EAAuB,CAC/B,OAAOA,EAAOC,UAAa,YAC7BD,EAAOC,SAASD,EAAQzH,MAAS,CAErC,CAEA+C,oBAAoB4E,EAAkB,CACpC,KAAK1C,YAAY2C,KAAKD,CAAK,EAC3B,KAAKtC,gBACL,KAAKH,OAASyC,EAAME,SACpB,KAAKxD,MAAMyB,aAAY,CACzB,CAGA3D,SAAS2F,EAAgB,CACvB,GAAI,KAAKxF,cAAa,EAAI,OAE1B,IAAIyF,EAAc,EAClB,QAAQC,EAAI,EAAGA,EAAI,KAAKlD,YAAY3E,QAC9B,KAAK2E,YAAYkD,CAAC,EAAEhB,MAAQc,EAAQd,IADEgB,IAE1CD,GAAe,KAAKjD,YAAYkD,CAAC,EAAEvF,KAGrC,KAAKgE,gBAAgBwB,cAAcF,EAAa,GAAM,EAAGnE,EAAiB,EAC1E,KAAKW,eAAe2D,cAAc,KAAKzD,OAAOoC,IAAKiB,EAAQd,GAAG,EAE9D,KAAKzC,eAAe4D,iBAAiB,KAAK1D,OAAOoC,IAAK,KAAKlC,cAAcyD,cAAc,EAEvF,KAAK/D,MAAMyB,aAAY,CACzB,CAEArF,iBAAiBwF,EAAS,CACxB,IAAIoC,EAAO,GACPpC,EAAKqC,eAAe,MAAM,EAC5BD,EAAOpC,EAAKoC,KACHpC,EAAKqC,eAAe,OAAO,IACpCD,EAAOpC,EAAKvD,OAEd,KAAK6B,eAAe2D,cAAc,KAAKzD,OAAOoC,IAAKwB,EAAKE,OAAO,CAAC,CAAC,CACnE,yCAvKW1E,GAAyB2E,EAyDhBC,EAAQ,CAAA,CAAA,sBAzDjB5E,EAAyB6E,UAAA,CAAA,CAAA,wBAAA,CAAA,EAAAC,eAAA,SAAAC,EAAAC,EAAAC,EAAA,IAAAF,EAAA,6JA8CzBG,GAAwB,CAAA,oHA9CxBnK,EAAA,SAAA,SAAAC,EAAA,CAAA,OAAAgK,EAAArD,cAAA3G,CAAA,CAAqB,EAAA,GAAAmK,EAAA,EAAI,oBAAA,SAAAnK,EAAA,CAAA,OAAzBgK,EAAArD,cAAA3G,CAAA,CAAqB,EAAA,GAAAmK,EAAA,0/CCnDlCnJ,EAAA,EAAAoJ,GAAA,GAAA,GAAA,eAAA,CAAA,OAAiC1J,EAAA,gBAAA,oBAAA,iBD8CrB2J,GAAYC,GAAAC,EAAAC,EAAAC,GAAEC,GAAkBC,GAAqBT,GAAEU,GAA0BC,GAAYC,GAAyBC,CAAkB,EAAAC,OAAA,CAAA;sEAAA,EAAAC,gBAAA,CAAA,CAAA,EAK9I,IAAOjG,EAAPkG,SAAOlG,CAAyB,GAAA", "names": ["keySize", "JumpbarService", "constructor", "resumeKeys", "resumeScroll", "getResumeKey", "key", "hasOwnProperty", "getResumePosition", "saveResumeKey", "value", "saveScrollOffset", "generateJumpBar", "jumpBarKeys", "currentSize", "fullSize", "length", "jumpBarKeysToRender", "targetNumberOfKeys", "parseInt", "Math", "floor", "removeCount", "removalTimes", "ceil", "midPoint", "push", "_removeFirstPartOfJumpBar", "_removeSecondPartOfJumpBar", "numberOfRemovals", "removedIndexes", "removal", "min", "minIndex", "i", "size", "includes", "getJumpKeys", "data", "keySelector", "keys", "forEach", "obj", "ch", "charAt", "test", "Object", "map", "k", "title", "toUpperCase", "sort", "a", "b", "factory", "\u0275fac", "providedIn", "_JumpbarService", "FilterSettings", "constructor", "sortDisabled", "statementLimit", "saveDisabled", "SortFieldPipe", "constructor", "translocoService", "transform", "value", "SortField", "SortName", "translate", "Created", "LastModified", "LastChapterAdded", "TimeToRead", "ReleaseYear", "ReadProgress", "AverageRating", "Random", "\u0275\u0275directiveInject", "TranslocoService", "pure", "standalone", "_SortFieldPipe", "FilterFieldPipe", "transform", "value", "FilterField", "AgeRating", "translate", "Characters", "CollectionTags", "Colorist", "CoverArtist", "Editor", "Formats", "Genres", "Inker", "Imprint", "Team", "Location", "Languages", "Libraries", "Letterer", "PublicationStatus", "Penciller", "Publisher", "ReadProgress", "ReadTime", "ReleaseYear", "SeriesName", "Summary", "Tags", "Translators", "UserRating", "Writers", "Path", "FilePath", "WantToRead", "ReadingDate", "AverageRating", "Error", "pure", "standalone", "_FilterFieldPipe", "FilterComparisonPipe", "transform", "value", "FilterComparison", "BeginsWith", "translate", "Contains", "Equal", "GreaterThan", "GreaterThanEqual", "LessThan", "LessThanEqual", "Matches", "NotContains", "NotEqual", "EndsWith", "IsBefore", "IsAfter", "IsInLast", "IsNotInLast", "MustContains", "Error", "pure", "standalone", "_FilterComparisonPipe", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "field_r1", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "\u0275\u0275pipeBind1", "comparison_r2", "\u0275\u0275elementContainerStart", "\u0275\u0275element", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r3", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onDateSelect", "updateIfDateFilled", "d_r5", "\u0275\u0275reference", "toggle", "\u0275\u0275elementContainer", "options_r6", "multipleAllowed_r7", "\u0275\u0275template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_6_ng_container_1_ng_container_1_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_6_ng_container_1_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "dropdown_r9", "\u0275\u0275pureFunction2", "_c1", "opts_r8", "MultipleDropdownAllowed", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_6_ng_container_1_Template", "dropdownOptions$", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_2_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_3_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_4_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_5_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_ng_container_6_Template", "predicateType_r10", "PredicateType", "Text", "Number", "Boolean", "Date", "Dropdown", "t_r11", "UiLabel", "tooltip", "MetadataFilterRowComponent_ng_container_0_ng_container_14_i_3_Template", "unit", "MetadataFilterRowComponent_ng_container_0_option_5_Template", "MetadataFilterRowComponent_ng_container_0_option_8_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_11_Template", "MetadataFilterRowComponent_ng_container_0_ng_container_14_Template", "\u0275\u0275projection", "formGroup", "availableFields", "validComparisons$", "predicateType$", "FilterRowUi", "constructor", "unitLabels", "Map", "FilterField", "ReadingDate", "AverageRating", "ReadProgress", "StringFields", "SeriesName", "Summary", "Path", "FilePath", "NumberFields", "ReadTime", "ReleaseYear", "UserRating", "DropdownFields", "PublicationStatus", "Languages", "AgeRating", "Translators", "Characters", "Publisher", "Editor", "CoverArtist", "Letterer", "Colorist", "Inker", "Penciller", "Writers", "Genres", "Libraries", "Formats", "CollectionTags", "Tags", "Imprint", "Team", "Location", "BooleanFields", "WantToRead", "DateFields", "DropdownFieldsWithoutMustContains", "DropdownFieldsThatIncludeNumberComparisons", "NumberFieldsThatIncludeDateComparisons", "StringComparisons", "FilterComparison", "Equal", "NotEqual", "BeginsWith", "EndsWith", "Matches", "DateComparisons", "IsBefore", "IsAfter", "NumberComparisons", "LessThan", "LessThanEqual", "GreaterThan", "GreaterThanEqual", "DropdownComparisons", "Contains", "NotContains", "MustContains", "BooleanComparisons", "MetadataFilterRowComponent", "field", "parseInt", "get", "value", "has", "comp", "metadataService", "libraryService", "collectionTagService", "index", "allFields", "filterStatement", "EventEmitter", "cdRef", "inject", "ChangeDetectorRef", "destroyRef", "DestroyRef", "dateParser", "NgbDateParserFormatter", "FormGroup", "FormControl", "BehaviorSubject", "of", "loaded", "ngOnInit", "addControl", "valueChanges", "pipe", "distinctUntilChanged", "takeUntilDestroyed", "subscribe", "val", "handleFieldChange", "populateFromPreset", "startWith", "preset", "filter", "inputVal", "includes", "switchMap", "_", "getDropdownObservable", "propagateFilterUpdate", "markForCheck", "stmt", "comparison", "format", "isNaN", "emit", "patchValue", "parse", "split", "map", "d", "getAllPublicationStatus", "pubs", "pub", "label", "title", "getAllAgeRatings", "ratings", "rating", "getAllGenres", "genres", "genre", "id", "getAllLanguages", "statuses", "status", "isoCode", "mangaFormatFilters", "getLibraries", "libs", "lib", "name", "getAllTags", "allCollections", "getPersonOptions", "PersonRole", "Character", "Translator", "Writer", "role", "getAllPeopleByRole", "people", "person", "next", "comps", "push", "c", "event", "\u0275\u0275directiveInject", "MetadataService", "LibraryService", "CollectionTagService", "selectors", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c0", "decls", "vars", "consts", "template", "rf", "ctx", "MetadataFilterRowComponent_ng_container_0_Template", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "NumberValueAccessor", "CheckboxControlValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "MinValidator", "FormGroupDirective", "FormControlName", "AsyncPipe", "FilterFieldPipe", "FilterComparisonPipe", "NgSwitch", "NgSwitchCase", "NgForOf", "NgIf", "Select2Module", "Select2", "NgTemplateOutlet", "NgbTooltip", "TranslocoDirective", "NgbInputDatepicker", "styles", "changeDetection", "_MetadataFilterRowComponent", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "opt_r2", "value", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "title", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r6", "i_r5", "\u0275\u0275nextContext", "index", "ctx_r2", "\u0275\u0275resetView", "removeFilter", "\u0275\u0275element", "t_r7", "\u0275\u0275pureFunction1", "_c0", "$event", "_r4", "updateFilter", "\u0275\u0275template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_div_11_button_4_Template", "filterStmt_r8", "availableFilterFields", "filter", "statements", "length", "\u0275\u0275elementContainerStart", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_option_5_Template", "_r1", "addFilter", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_div_11_Template", "groupOptions", "statementLimit", "opt_r10", "_r13", "i_r12", "_r11", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_div_10_button_4_Template", "filterStmt_r14", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_option_4_Template", "_r9", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_div_10_Template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_Template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_Template", "\u0275\u0275templateRefExtractor", "formGroup", "utilityService", "getActiveBreakpoint", "Breakpoint", "Desktop", "mobileView_r15", "MetadataBuilderComponent_ng_container_0_ng_container_1_Template", "MetadataBuilderComponent", "constructor", "allFields", "update", "EventEmitter", "apply", "cdRef", "inject", "ChangeDetectorRef", "metadataService", "MetadataService", "UtilityService", "filterUtilityService", "FilterUtilitiesService", "destroyRef", "DestroyRef", "FormGroup", "FilterCombination", "Or", "translate", "And", "ngOnInit", "addControl", "FormControl", "combination", "valueChanges", "pipe", "distinctUntilChanged", "takeUntilDestroyed", "tap", "values", "parseInt", "get", "emit", "subscribe", "createDefaultFilterStatement", "markForCheck", "slice", "concat", "filterStmt", "selectors", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "MetadataBuilderComponent_ng_container_0_Template", "NgIf", "MetadataFilterRowComponent", "NgForOf", "FormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "NgbTooltip", "ReactiveFormsModule", "FormGroupDirective", "FormControlName", "TranslocoDirective", "changeDetection", "_MetadataBuilderComponent", "\u0275\u0275elementStart", "\u0275\u0275elementContainer", "\u0275\u0275elementEnd", "\u0275\u0275property", "undefined", "\u0275\u0275advance", "filterSection_r2", "\u0275\u0275pureFunction1", "_c1", "isOpen_r1", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "toggleService", "set", "\u0275\u0275text", "\u0275\u0275pureFunction0", "_c2", "\u0275\u0275textInterpolate1", "t_r5", "\u0275\u0275elementContainerStart", "\u0275\u0275template", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_div_1_Template", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "activeBreakpoint_r6", "Breakpoint", "Tablet", "mobileView_r7", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_Template", "utilityService", "getActiveBreakpoint", "\u0275\u0275element", "field_r9", "\u0275\u0275textInterpolate", "\u0275\u0275pipeBind1", "buttons_r10", "$event", "_r8", "handleFilters", "updateSortOrder", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_i_14_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_ng_template_15_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_option_18_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_ng_container_23_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_div_24_Template", "filterV2", "allFilterFields", "filterSettings", "statementLimit", "sortGroup", "sortDisabled", "isAscendingSort", "descSort_r11", "allSortFields", "_c3", "Mobile", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_Template", "fullyLoaded", "_r12", "clear", "apply", "save", "saveDisabled", "tmp_7_0", "get", "value", "MetadataFilterComponent_ng_container_0_ng_container_1_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_Template", "MetadataFilterComponent_ng_container_0_ng_template_5_Template", "toggleState$", "MetadataFilterComponent", "constructor", "toggleService", "filterService", "filterOpen", "EventEmitter", "filteringDisabled", "applyFilter", "destroyRef", "inject", "DestroyRef", "utilityService", "UtilityService", "filterUtilitiesService", "FilterUtilitiesService", "filteringCollapsed", "libraries", "isAscendingSort", "updateApplied", "fullyLoaded", "allSortFields", "allFilterFields", "allFields", "cdRef", "ChangeDetectorRef", "toastr", "ToastrService", "Breakpoint", "getAllFilters", "subscribe", "res", "smartFilters", "map", "r", "value", "label", "name", "ngOnInit", "filterSettings", "undefined", "FilterSettings", "markForCheck", "pipe", "takeUntilDestroyed", "openState", "set", "loadFromPresetsAndSetup", "close", "emit", "deepClone", "obj", "Array", "item", "clonedObj", "key", "Object", "prototype", "hasOwnProperty", "call", "handleFilters", "filter", "filterV2", "presetsV2", "sortGroup", "FormGroup", "sortField", "FormControl", "sortOptions", "SortField", "SortName", "disabled", "sortDisabled", "limitTo", "isAscending", "valueChanges", "parseInt", "get", "Math", "max", "apply", "updateSortOrder", "clear", "isFirst", "getActiveBreakpoint", "Mobile", "toggleSelected", "save", "saveFilter", "success", "translate", "toggle", "setToggle", "event", "\u0275\u0275directiveInject", "ToggleService", "FilterService", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "\u0275\u0275template", "MetadataFilterComponent_ng_container_0_Template", "\u0275\u0275property", "NgIf", "NgTemplateOutlet", "DrawerComponent", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "NumberValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "FormsModule", "AsyncPipe", "TranslocoModule", "TranslocoDirective", "SortFieldPipe", "MetadataBuilderComponent", "NgForOf", "Select2Module", "NgClass", "styles", "data", "animation", "trigger", "transition", "style", "height", "opacity", "animate", "changeDetection", "_MetadataFilterComponent", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "performAction", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275property", "actions", "header", "\u0275\u0275textInterpolate", "pagination", "totalItems", "\u0275\u0275template", "CardDetailLayoutComponent_ng_container_0_div_1_span_4_span_2_Template", "\u0275\u0275textInterpolate1", "undefined", "CardDetailLayoutComponent_ng_container_0_div_1_span_3_Template", "CardDetailLayoutComponent_ng_container_0_div_1_span_4_Template", "length", "\u0275\u0275elementContainer", "noDataTemplate", "item_r6", "_r5", "$implicit", "tryToSaveJumpKey", "\u0275\u0275propertyInterpolate1", "i_r7", "itemTemplate", "\u0275\u0275pureFunction2", "_c5", "scroll_r8", "viewPortInfo", "startIndexWithBuffer", "jumpBar_r9", "\u0275\u0275pureFunction0", "_c6", "item_r11", "_r10", "i_r12", "CardDetailLayoutComponent_ng_container_0_ng_template_13_div_4_Template", "CardDetailLayoutComponent_ng_container_0_ng_template_13_div_5_Template", "items", "bufferAmount", "scroll_r13", "viewPortItems", "trackByIdentity", "isLoading", "\u0275\u0275elementContainerStart", "jumpKey_r15", "_r14", "scrollTo", "\u0275\u0275pureFunction1", "_c7", "hasCustomSort", "t_r4", "_c4", "size", "title", "CardDetailLayoutComponent_ng_container_0_ng_template_16_ng_container_1_Template", "jumpBarKeysToRender", "CardDetailLayoutComponent_ng_container_0_div_1_Template", "_r1", "applyMetadataFilter", "CardDetailLayoutComponent_ng_container_0_p_6_Template", "CardDetailLayoutComponent_ng_container_0_div_11_Template", "CardDetailLayoutComponent_ng_container_0_ng_container_12_Template", "CardDetailLayoutComponent_ng_container_0_ng_template_13_Template", "\u0275\u0275templateRefExtractor", "\u0275\u0275element", "CardDetailLayoutComponent_ng_container_0_ng_template_16_Template", "filterSettings", "filterOpen", "_c3", "parentScroll", "maxScrollPosition", "ANIMATION_TIME_MS", "CardDetailLayoutComponent", "constructor", "document", "filterUtilityService", "inject", "FilterUtilitiesService", "utilityService", "UtilityService", "cdRef", "ChangeDetectorRef", "jumpbarService", "JumpbarService", "router", "Router", "scrollService", "ScrollService", "filteringDisabled", "jumpBarKeys", "itemClicked", "EventEmitter", "applyFilter", "filter", "createSeriesV2Filter", "libraries", "updateApplied", "hasResumedJumpKey", "Breakpoint", "resizeJumpBar", "currentSize", "querySelector", "getBoundingClientRect", "height", "generateJumpBar", "markForCheck", "ngOnInit", "_", "item", "libraryId", "FilterSettings", "currentPage", "itemsPerPage", "totalPages", "refresh", "subscribe", "virtualScroller", "ngOnChanges", "resumeKey", "getResumeKey", "url", "keys", "k", "key", "setTimeout", "sortOptions", "sortField", "SortField", "SortName", "isAscending", "hasNonDefaultSortField", "presetsV2", "action", "callback", "event", "emit", "filterV2", "jumpKey", "targetIndex", "i", "scrollToIndex", "saveResumeKey", "saveScrollOffset", "scrollPosition", "name", "hasOwnProperty", "charAt", "\u0275\u0275directiveInject", "DOCUMENT", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "VirtualScrollerComponent", "\u0275\u0275resolveWindow", "CardDetailLayoutComponent_ng_container_0_Template", "CommonModule", "NgClass", "NgForOf", "NgIf", "NgTemplateOutlet", "LoadingComponent", "VirtualScrollerModule", "CardActionablesComponent", "NgbTooltip", "MetadataFilterComponent", "TranslocoDirective", "styles", "changeDetection", "_CardDetailLayoutComponent"] }